mirror of
https://github.com/storytold/lightcraft.git
synced 2026-11-09 18:10:13 -06:00
Mechanical rename right after the fork so upstream merges map cleanly. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
46 lines
2.2 KiB
Rust
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());
|
|
}
|