aether_renderer_core/
config.rs1use serde::Deserialize;
2use std::path::PathBuf;
3
4#[derive(Debug, Deserialize)]
6pub struct RenderConfig {
7 pub input: PathBuf,
8 pub output: String,
9 #[serde(default = "default_fps")]
10 pub fps: u32,
11 #[serde(default = "default_format")]
12 pub format: String,
13 #[serde(default)]
14 pub fade_in: f32,
15 #[serde(default)]
16 pub fade_out: f32,
17 #[serde(default)]
18 pub bitrate: Option<String>,
19 #[serde(default)]
20 pub crf: Option<u32>,
21 #[serde(default)]
22 pub preview: bool,
23 #[serde(default)]
24 pub file_pattern: Option<String>,
25 #[serde(default)]
26 pub verbose: bool,
27 #[serde(default)]
28 pub verbose_ffmpeg: bool,
29}
30
31fn default_fps() -> u32 {
32 30
33}
34
35fn default_format() -> String {
36 "webm".into()
37}
38
39impl RenderConfig {
40 pub fn from_file(path: &str) -> Result<Self, String> {
42 let config_str = std::fs::read_to_string(path)
43 .map_err(|_| format!("❌ Config file '{}' not found.", path))?;
44 serde_json::from_str(&config_str).map_err(|e| format!("❌ Failed to parse config: {}", e))
45 }
46}