Files
lightcraft/apps/app/examples/gen_photos.rs
T
Andrew FrahnandClaude Opus 5.5 fb097d61be Rename crates to neutral dac-* codename and binaries to app/app-cli
Mechanical rename right after the fork so upstream merges map cleanly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-10 09:43:50 +11:00

46 lines
2.2 KiB
Rust

//! Generate a folder of procedural test photos (JPEG) for import/startup benchmarks.
//!
//! `cargo run --release -p dac-app --example gen_photos -- OUT_DIR [COUNT=200] [LONG_EDGE=2000]`
//!
//! Each photo is a `dac-scenes` demo scene rendered through the pipeline with a varied
//! look (exposure, temperature, vibrance), so every file has distinct bytes. The output is our own
//! procedural content; keep it out of the repository (write to a scratch or gitignored folder).
use dac_engine::Session;
use serde_json::json;
fn main() {
let mut args = std::env::args().skip(1);
let out = std::path::PathBuf::from(args.next().expect("usage: gen_photos OUT_DIR [COUNT] [LONG_EDGE]"));
let count: usize = args.next().and_then(|c| c.parse().ok()).unwrap_or(200);
let edge: usize = args.next().and_then(|c| c.parse().ok()).unwrap_or(2000);
std::fs::create_dir_all(&out).expect("create output folder");
let mut s = Session::with_demo();
let ids = s.visible_cloned();
let t0 = std::time::Instant::now();
for i in 0..count {
let id = ids[i % ids.len()];
let round = i / ids.len();
s.execute("library.select", &json!({"ids": [id.0]})).expect("select");
s.execute("develop.reset", &json!({})).expect("reset");
let v = json!({
"light.exposure": (round as f64 * 0.37).sin() * 0.8,
"wb.temp": 6500.0 + (round as f64 * 1.3).cos() * 1500.0,
"color.vibrance": (round * 13 % 50) as f64,
});
let _ = s.execute("develop.set", &json!({"values": v}));
let img = s.render_now(id, edge, edge).expect("render");
let bytes = dac_codecs::encode_jpeg(
&dac_codecs::EncodeImage::rgba8(&img.image),
88,
dac_codecs::ChromaSubsampling::S420,
&dac_codecs::EncodeMeta::default(),
)
.expect("encode");
let dir = out.join(format!("roll-{:02}", i / 50 + 1));
std::fs::create_dir_all(&dir).expect("mkdir");
std::fs::write(dir.join(format!("LCG{:05}.jpg", i + 1)), bytes).expect("write");
}
eprintln!("wrote {count} photos ({edge} px) to {} in {:.1} s", out.display(), t0.elapsed().as_secs_f64());
}