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 @@

- FilmCraft editing the demo project: Effect Controls, the Program monitor on an ocean sunset, Properties, the Project bin, and a multi-track timeline with transitions, markers and audio waveforms + FilmCraft cutting a trailer for Night of the Living Dead (1968): Effect Controls, the Program monitor on the ghouls advancing, the Project bin of public-domain films, and a multi-track timeline with dissolves, markers, a Carnival of Souls insert, a Chopin score and loudness meters

+ + + + + + + + + +
Color workspace: a Lumetri grade on Charade (1963) with curves, colour sliders, waveform and vectorscope
Colour. Grading Charade (1963) with Lumetri-style curves and scopes.
Effect Controls with the value and velocity graphs of an eased Scale push-in on the Night of the Living Dead title
Keyframes. An eased push-in on the title, with value and velocity graphs.
Export mode with H.264 MP4 settings
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).