diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md
index 00ac86176..79e3c4b93 100644
--- a/ATTRIBUTION.md
+++ b/ATTRIBUTION.md
@@ -13,7 +13,23 @@ iconography, images or other Adobe assets; open licences only; every asset attri
| `assets/fonts/Inter-Medium.ttf` | The Inter Project Authors | https://github.com/rsms/inter | OFL-1.1 (`assets/fonts/OFL-Inter.txt`) |
| `assets/fonts/Inter-SemiBold.ttf` | The Inter Project Authors | https://github.com/rsms/inter | OFL-1.1 (`assets/fonts/OFL-Inter.txt`) |
| `assets/fonts/JetBrainsMono-Regular.ttf` | The JetBrains Mono Project Authors | https://github.com/JetBrains/JetBrainsMono | OFL-1.1 (`assets/fonts/OFL-JetBrainsMono.txt`) |
-| `docs/images/filmcraft-hero.png` | FilmCraft contributors | Original work: screenshot of FilmCraft showing procedurally generated demo footage | MIT OR Apache-2.0 |
+| `docs/images/filmcraft-hero.png` | FilmCraft contributors | Original work: FilmCraft screenshot; frames from public-domain films (Night of the Living Dead 1968, Carnival of Souls 1962), CC0 Chopin (Musopen) | MIT OR Apache-2.0; film frames public domain |
+| `docs/images/filmcraft-color.png` | FilmCraft contributors | Original work: FilmCraft screenshot; frames from Charade (1963, public domain) | MIT OR Apache-2.0; film frames public domain |
+| `docs/images/filmcraft-keyframes.png` | FilmCraft contributors | Original work: FilmCraft screenshot; frames from Night of the Living Dead (1968, public domain) | MIT OR Apache-2.0; film frames public domain |
+| `docs/images/filmcraft-export.png` | FilmCraft contributors | Original work: FilmCraft screenshot; frame from Night of the Living Dead (1968, public domain) | MIT OR Apache-2.0; film frames public domain |
+
+## Third-party media shown in screenshots
+
+The README screenshots show frames from these works. The media files themselves are not in the
+repository; each screenshot's sidecar lists exactly which appear.
+
+| Work | Author | Status | Source |
+|---|---|---|---|
+| Night of the Living Dead (1968) | George A. Romero / Image Ten | US public domain (no copyright notice) | https://archive.org/details/night-of-the-living-dead-1968-english |
+| Carnival of Souls (1962) | Herk Harvey / Harcourt Productions | US public domain | https://archive.org/details/CarnivalOfSoulsVideoQualityUpgrade |
+| Charade (1963) | Stanley Donen / Universal | US public domain (defective notice) | https://archive.org/details/charade-1963-cary-grant-audrey-hepburn-comedy-mystery-romance-thriller-full-movie |
+| Earth Views from the ISS (NHQ_2020_1221) | NASA | US Government work, public domain (no NASA endorsement implied) | https://images.nasa.gov/details/NHQ_2020_1221_Earth%20Views |
+| Chopin: Nocturne Op. 48 No. 1, Ballade No. 1 | Musopen | CC0-1.0 | https://archive.org/details/musopen-chopin |
## Assets drawn or generated in code
diff --git a/README.md b/README.md
index 188e94885..6fa9a200e 100644
--- a/README.md
+++ b/README.md
@@ -7,22 +7,34 @@
-
+
+
+
+  Colour. Grading Charade (1963) with Lumetri-style curves and scopes. |
+  Keyframes. An eased push-in on the title, with value and velocity graphs. |
+
+
+  Export. H.264 MP4 with our own encoder. |
+ Footage: Night of the Living Dead (1968), Carnival of Souls (1962) and Charade (1963), all in the US public domain; music: Chopin performed for Musopen (CC0). The media is not in this repository; full credits in ATTRIBUTION.md. |
+
+
+
## Highlights
-- **Own codecs, in Rust.** H.264 decoder (bit-exact against ffmpeg, 500+ fps at 1080p) and encoder (High profile, CABAC, B-frames, 2-pass), HEVC Main/Main 10 decoder, ProRes decode and encode, AAC-LC decode and encode, and an MP4/MOV demuxer and muxer. No FFmpeg inside.
+- **Own codecs, in Rust.** H.264 decoder (bit-exact against ffmpeg, 500+ fps at 1080p) and encoder (High profile, CABAC, B-frames, 2-pass), HEVC Main/Main 10 decoder, ProRes decode and encode, AAC-LC decode and encode, MP4/MOV and Matroska/WebM containers. No FFmpeg inside.
- **Real editing.** Insert, overwrite, ripple, roll, slip, slide, rate stretch, razor, lift/extract, nesting and markers, all built on an exact integer time base (254,016,000,000 ticks per second), so frame math never drifts.
- **GPU compositing.** A wgpu compositor samples YUV directly with footprint supersampling and blends in linear light, with a matching CPU path. Playback runs in real time at 1080p, using the audio clock as master.
- **Colour.** Lumetri-style grading: basic correction, creative looks, RGB and hue curves, colour wheels, HSL secondary and vignette, plus waveform and vectorscope.
- **Keyframes.** Linear, Bezier, auto/continuous Bezier, hold and ease, with value and velocity graphs.
+- **Audio.** EBU R128 / BS.1770 loudness meters (momentary, short-term, integrated, true peak), and clip effects (EQ, filters, dynamics, limiter, delay, reverb, DeNoise, DeHum, pitch shift) on our own DSP library.
- **Export.** H.264 MP4 with AAC, ProRes and MJPEG MOV, PNG sequences, GIF and WAV, run as background jobs.
- **Agent-drivable.** Every action is a command. The UI, a CLI, a JSON control channel and an MCP server all drive the same engine, so Claude or any agent can edit, grade and export.
## Status
-Early but moving fast: about a quarter of the way to Premiere Pro parity. See **[ROADMAP.md](ROADMAP.md)** for milestone status and estimates.
+Early but moving fast: roughly 30% of the way to Premiere Pro parity. See **[ROADMAP.md](ROADMAP.md)** for milestone status and estimates.
## Quick start
@@ -39,7 +51,7 @@ The control protocol is documented in [docs/control-protocol.md](docs/control-pr
A layered Cargo workspace: codecs and containers at the bottom, then frames and media, project model and edit algebra, rendering and export, the engine (command registry, session, undo), and finally the swappable UI (`ui-egui`). Nothing below the UI layer depends on a UI toolkit or OS APIs, and everything up to the engine compiles to `wasm32`. `cargo xtask ci` checks formatting, lints, tests, the layering rules and the wasm build.
-## The Craft family
+## Crafting Apps
Open-source, clean-room, pure-Rust creative tools. Each runs natively on macOS, Windows and Linux, and on the web.
diff --git a/crates/ui-egui/src/panels/export_mode.rs b/crates/ui-egui/src/panels/export_mode.rs
index f66151e8e..a7f8f0377 100644
--- a/crates/ui-egui/src/panels/export_mode.rs
+++ b/crates/ui-egui/src/panels/export_mode.rs
@@ -40,10 +40,9 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
}
// settings
let seq_name = app.session.project.item(seq_id).map(|i| i.name.clone()).unwrap_or_default();
- let fmt = filmcraft_engine::export::Format::from_name(&app.ui.export_format).unwrap_or(filmcraft_engine::export::Format::Mjpeg);
+ let fmt = filmcraft_engine::export::Format::from_name(&app.ui.export_format).unwrap_or(filmcraft_engine::export::Format::H264);
if app.ui.export_path.is_empty() || !app.ui.export_path.ends_with(fmt.extension()) {
- let dir = std::env::var("HOME").map(|h| format!("{h}/Movies")).unwrap_or_else(|_| ".".into());
- app.ui.export_path = format!("{dir}/{}.{}", seq_name.replace(' ', "_"), fmt.extension());
+ app.ui.export_path = format!("~/Movies/{}.{}", seq_name.replace(' ', "_"), fmt.extension());
}
let mut sui = ui.new_child(egui::UiBuilder::new().max_rect(right.shrink(16.0)).id_salt("export-settings"));
sui.label(egui::RichText::new("Settings").strong().size(14.0));
@@ -98,7 +97,7 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
ui.painter().text(b.center(), Align2::CENTER_CENTER, "Export", Tokens::semibold(13.0), Color32::WHITE);
app.auto.add("export.button", b, "Export");
if resp.clicked() {
- let r = app.session.execute("file.exportMedia", serde_json::json!({"path": app.ui.export_path, "format": app.ui.export_format}));
+ let r = app.session.execute("file.exportMedia", serde_json::json!({"path": expand_home(&app.ui.export_path), "format": app.ui.export_format}));
if let Err(e) = r {
app.ui.status = e.to_string();
}
@@ -107,3 +106,11 @@ pub fn show(app: &mut FilmcraftApp, ui: &mut egui::Ui, rect: Rect) {
crate::dock::placeholder(ui, mid, &t, "Open a sequence to export");
}
}
+
+/// `~/…` → the user's home directory (the path field shows the short form).
+fn expand_home(p: &str) -> String {
+ match (p.strip_prefix("~/"), std::env::var("HOME")) {
+ (Some(rest), Ok(h)) => format!("{h}/{rest}"),
+ _ => p.to_string(),
+ }
+}
diff --git a/crates/ui-egui/src/state.rs b/crates/ui-egui/src/state.rs
index d23bb44a5..8c214ff43 100644
--- a/crates/ui-egui/src/state.rs
+++ b/crates/ui-egui/src/state.rs
@@ -287,7 +287,7 @@ impl Default for UiState {
dark: true,
show_scopes: false,
status: String::new(),
- export_format: "mjpeg".into(),
+ export_format: "h264".into(),
export_path: String::new(),
}
}
diff --git a/docs/images/filmcraft-color.png b/docs/images/filmcraft-color.png
new file mode 100644
index 000000000..e0e7b1024
Binary files /dev/null and b/docs/images/filmcraft-color.png differ
diff --git a/docs/images/filmcraft-color.png.attribution b/docs/images/filmcraft-color.png.attribution
new file mode 100644
index 000000000..09429c19b
--- /dev/null
+++ b/docs/images/filmcraft-color.png.attribution
@@ -0,0 +1,14 @@
+asset: filmcraft-color.png
+title: README gallery: Color workspace grading Charade
+author: FilmCraft contributors (screenshot); film/footage/music credits below
+source: original work (screenshot of FilmCraft captured with its ui.screenshot control command)
+license: MIT OR Apache-2.0 (screenshot); embedded film frames are public domain, music CC0-1.0
+license-file:
+added: 2026-09-30 by Claude (agent) for Brandon Thomas
+notes: Color workspace; Lumetri Color grade (basic correction, RGB curve) on Charade (1963); Lumetri Scopes. Downscaled to 2400 px. All UI icons are drawn in code; fonts are Inter and JetBrains Mono (OFL-1.1). Contains no Adobe artwork.
+Media visible in the screenshot (none of it is committed to the repository):
+ - Night of the Living Dead (1968), dir. George A. Romero, Image Ten. US public domain (released without a copyright notice). Source: https://archive.org/details/night-of-the-living-dead-1968-english (Public Domain Mark).
+ - Carnival of Souls (1962), dir. Herk Harvey, Harcourt Productions. US public domain. Source: https://archive.org/details/CarnivalOfSoulsVideoQualityUpgrade (Public Domain Mark).
+ - Charade (1963), dir. Stanley Donen, Universal. US public domain (defective copyright notice). Source: https://archive.org/details/charade-1963-cary-grant-audrey-hepburn-comedy-mystery-romance-thriller-full-movie (Public Domain Mark).
+ - Earth Views from the ISS (NASA, NHQ_2020_1221, no-music edition). US Government work, public domain; NASA does not endorse this project. Source: https://images.nasa.gov/details/NHQ_2020_1221_Earth%20Views
+ - Chopin, Nocturne Op. 48 No. 1 and Ballade No. 1, performed for Musopen. CC0-1.0. Source: https://archive.org/details/musopen-chopin (shown only as waveforms).
diff --git a/docs/images/filmcraft-export.png b/docs/images/filmcraft-export.png
new file mode 100644
index 000000000..3520305b3
Binary files /dev/null and b/docs/images/filmcraft-export.png differ
diff --git a/docs/images/filmcraft-export.png.attribution b/docs/images/filmcraft-export.png.attribution
new file mode 100644
index 000000000..0aba550f6
--- /dev/null
+++ b/docs/images/filmcraft-export.png.attribution
@@ -0,0 +1,14 @@
+asset: filmcraft-export.png
+title: README gallery: Export mode
+author: FilmCraft contributors (screenshot); film/footage/music credits below
+source: original work (screenshot of FilmCraft captured with its ui.screenshot control command)
+license: MIT OR Apache-2.0 (screenshot); embedded film frames are public domain, music CC0-1.0
+license-file:
+added: 2026-09-30 by Claude (agent) for Brandon Thomas
+notes: Export mode with H.264 MP4 settings; preview frame from Night of the Living Dead (1968). Downscaled to 2400 px. All UI icons are drawn in code; fonts are Inter and JetBrains Mono (OFL-1.1). Contains no Adobe artwork.
+Media visible in the screenshot (none of it is committed to the repository):
+ - Night of the Living Dead (1968), dir. George A. Romero, Image Ten. US public domain (released without a copyright notice). Source: https://archive.org/details/night-of-the-living-dead-1968-english (Public Domain Mark).
+ - Carnival of Souls (1962), dir. Herk Harvey, Harcourt Productions. US public domain. Source: https://archive.org/details/CarnivalOfSoulsVideoQualityUpgrade (Public Domain Mark).
+ - Charade (1963), dir. Stanley Donen, Universal. US public domain (defective copyright notice). Source: https://archive.org/details/charade-1963-cary-grant-audrey-hepburn-comedy-mystery-romance-thriller-full-movie (Public Domain Mark).
+ - Earth Views from the ISS (NASA, NHQ_2020_1221, no-music edition). US Government work, public domain; NASA does not endorse this project. Source: https://images.nasa.gov/details/NHQ_2020_1221_Earth%20Views
+ - Chopin, Nocturne Op. 48 No. 1 and Ballade No. 1, performed for Musopen. CC0-1.0. Source: https://archive.org/details/musopen-chopin (shown only as waveforms).
diff --git a/docs/images/filmcraft-hero.png b/docs/images/filmcraft-hero.png
index e0823e7be..7584cedb7 100644
Binary files a/docs/images/filmcraft-hero.png and b/docs/images/filmcraft-hero.png differ
diff --git a/docs/images/filmcraft-hero.png.attribution b/docs/images/filmcraft-hero.png.attribution
index d6ea1662d..1276b38d9 100644
--- a/docs/images/filmcraft-hero.png.attribution
+++ b/docs/images/filmcraft-hero.png.attribution
@@ -1,8 +1,14 @@
asset: filmcraft-hero.png
-title: FilmCraft README hero screenshot
-author: FilmCraft contributors
-source: original work
-license: MIT OR Apache-2.0
+title: README hero: Editing workspace, Night of the Living Dead trailer
+author: FilmCraft contributors (screenshot); film/footage/music credits below
+source: original work (screenshot of FilmCraft captured with its ui.screenshot control command)
+license: MIT OR Apache-2.0 (screenshot); embedded film frames are public domain, music CC0-1.0
license-file:
added: 2026-09-30 by Claude (agent) for Brandon Thomas
-notes: Screenshot of the FilmCraft app itself (Editing workspace, demo project) captured with the app's own ui.screenshot control command; status strip cropped, downscaled to 2400 px. All footage shown is procedurally generated by crates/media (demo scenes); all icons are drawn in code; fonts are Inter and JetBrains Mono (OFL-1.1). Contains no Adobe artwork.
+notes: Editing workspace; Program monitor on Night of the Living Dead (1968); timeline with NotLD shots, a Carnival of Souls insert on V2 and Chopin on A2. Downscaled to 2400 px. All UI icons are drawn in code; fonts are Inter and JetBrains Mono (OFL-1.1). Contains no Adobe artwork.
+Media visible in the screenshot (none of it is committed to the repository):
+ - Night of the Living Dead (1968), dir. George A. Romero, Image Ten. US public domain (released without a copyright notice). Source: https://archive.org/details/night-of-the-living-dead-1968-english (Public Domain Mark).
+ - Carnival of Souls (1962), dir. Herk Harvey, Harcourt Productions. US public domain. Source: https://archive.org/details/CarnivalOfSoulsVideoQualityUpgrade (Public Domain Mark).
+ - Charade (1963), dir. Stanley Donen, Universal. US public domain (defective copyright notice). Source: https://archive.org/details/charade-1963-cary-grant-audrey-hepburn-comedy-mystery-romance-thriller-full-movie (Public Domain Mark).
+ - Earth Views from the ISS (NASA, NHQ_2020_1221, no-music edition). US Government work, public domain; NASA does not endorse this project. Source: https://images.nasa.gov/details/NHQ_2020_1221_Earth%20Views
+ - Chopin, Nocturne Op. 48 No. 1 and Ballade No. 1, performed for Musopen. CC0-1.0. Source: https://archive.org/details/musopen-chopin (shown only as waveforms).
diff --git a/docs/images/filmcraft-keyframes.png b/docs/images/filmcraft-keyframes.png
new file mode 100644
index 000000000..21bb470fe
Binary files /dev/null and b/docs/images/filmcraft-keyframes.png differ
diff --git a/docs/images/filmcraft-keyframes.png.attribution b/docs/images/filmcraft-keyframes.png.attribution
new file mode 100644
index 000000000..31e7fbd11
--- /dev/null
+++ b/docs/images/filmcraft-keyframes.png.attribution
@@ -0,0 +1,14 @@
+asset: filmcraft-keyframes.png
+title: README gallery: keyframe value/velocity graphs
+author: FilmCraft contributors (screenshot); film/footage/music credits below
+source: original work (screenshot of FilmCraft captured with its ui.screenshot control command)
+license: MIT OR Apache-2.0 (screenshot); embedded film frames are public domain, music CC0-1.0
+license-file:
+added: 2026-09-30 by Claude (agent) for Brandon Thomas
+notes: Editing workspace; Effect Controls with the eased Motion > Scale push-in on the Night of the Living Dead title shot, value and velocity graphs. Downscaled to 2400 px. All UI icons are drawn in code; fonts are Inter and JetBrains Mono (OFL-1.1). Contains no Adobe artwork.
+Media visible in the screenshot (none of it is committed to the repository):
+ - Night of the Living Dead (1968), dir. George A. Romero, Image Ten. US public domain (released without a copyright notice). Source: https://archive.org/details/night-of-the-living-dead-1968-english (Public Domain Mark).
+ - Carnival of Souls (1962), dir. Herk Harvey, Harcourt Productions. US public domain. Source: https://archive.org/details/CarnivalOfSoulsVideoQualityUpgrade (Public Domain Mark).
+ - Charade (1963), dir. Stanley Donen, Universal. US public domain (defective copyright notice). Source: https://archive.org/details/charade-1963-cary-grant-audrey-hepburn-comedy-mystery-romance-thriller-full-movie (Public Domain Mark).
+ - Earth Views from the ISS (NASA, NHQ_2020_1221, no-music edition). US Government work, public domain; NASA does not endorse this project. Source: https://images.nasa.gov/details/NHQ_2020_1221_Earth%20Views
+ - Chopin, Nocturne Op. 48 No. 1 and Ballade No. 1, performed for Musopen. CC0-1.0. Source: https://archive.org/details/musopen-chopin (shown only as waveforms).