What's Changed
- Windows on ARM64: release builds, PE header check, install test on ARM64 hardware by @echelon in #69
- codecs: resampled MP4 audio reads apply the edit list once by @punkhop in #42
- engine: file.exportInterchange refuses an unknown format by @punkhop in #46
- interchange: an export names every title it cannot carry by @punkhop in #51
- engine: a project saved after an interchange import opens again by @punkhop in #43
- engine: sequence.inspect reports clip ends, gain and marker comments by @punkhop in #48
- engine: sequence.inspect reports a reversed clip by @punkhop in #59
- engine: clip.replaceFromBin can keep the clip's source In by @punkhop in #49
- engine: Replace With Clip reports clips that run past the new media by @punkhop in #50
- engine: a command whose targets are named in the parameters does not need a selection by @punkhop in #52
- filmcraft: --help prints usage and an unknown option is an error by @punkhop in #47
- engine: naming a track that does not exist is an error by @punkhop in #44
- engine: timeline.place on an audio track places the sound there by @punkhop in #60
- engine: timeline.move takes linked partners along by @punkhop in #45
- edit: a ripple trim takes a later split edit along by @punkhop in #56
- edit: ripple delete closes one gap for a clip with a split edit by @punkhop in #57
- edit: a speed change with ripple moves later clips once by @punkhop in #58
- i18n: Japanese interface language (uses an installed system font) by @midasdf in #38
- MEM1–MEM4 + HW1: clip memory on a timeline from 12 GB to 1.9 GB; hardware decode actually on by @justjohn12345 in #41
- Docs: hardware decode correction; log the 2026-10-06 community batch by @echelon in #72
- Fonts: use craft-fonts as an optional build input (Japanese UI and title fallback) by @echelon in #81
- Tests: fix seed_sweep overflow and the speed-dependent export progress test by @justjohn12345 in #77
- interchange: an FCP7 master clip lands in its bin when a sequence used it first by @punkhop in #64
- project: Clear deletes a bin it is given, with everything in it by @punkhop in #68
- timeline.move: report the clips an overwrite move covers by @punkhop in #96
- codecs: look video frames up by the nearest timestamp unit (WebM at 30 fps drops every third frame) by @EthanSuquet in #83
- h264enc: strict ffmpeg oracle that sees damaged slices (#74) by @EthanSuquet in #101
- codecs: an MP4/MOV clip lasts as long as its edit list plays it by @EthanSuquet in #102
- codecs: MP4/MOV pixel format and alpha come from hvcC, avcC and the ProRes frame header (#103) by @HEOJUNFO in #118
- gpu: upload and composite the alpha plane of Y'CbCr frames by @dcarnelutti in #109
- graphics: all eight layer handles scale towards the pointer by @justjohn12345 in #79
- Timeline: the wheel scrolls as in Premiere, and the view cannot be lost by @justjohn12345 in #120
- Packaging: describe FilmCraft, not PhotoCraft, in package metadata (#94, #100) by @carlitosteso3 in #126
- i18n: Spanish interface language (Español) by @carlitosteso3 in #127
- Icons: draw straight lines on whole device pixels by @punkhop in #128
- docs: add star history chart to README by @coygeek in #122
- Window ▸ Workspaces: save your own workspaces, like Premiere by @punkhop in #121
- Ripple trim: a shorter head on a J-cut take is no longer refused by @punkhop in #104
- Ripple trim: a shorter head after an L cut keeps the earlier sound in place by @punkhop in #124
- Control: close the connection on input that isn't a request (#119) by @Luskish in #123
- Sequence: Add Tracks… opens Premiere's dialog (amount, placement, track type) by @justjohn12345 in #117
- HE-AAC plays at its output rate; AAC export caps the bitrate (#108, parts 1–2) by @carlitosteso3 in #129
- Audio: mix playback 200 ms ahead so a busy Mac doesn't drop sound by @punkhop in #131
- Audio: play a sequence on a device at another rate without phase jumps by @punkhop in #132
- Nested sequences: interchange (AAF compositions, OMF rendered sound, EDL reel AX) by @justjohn12345 in #116
- NEST4–NEST8: nest toggle, sequences as sources, Reveal in Project, Multi-Camera submenu by @justjohn12345 in #112
- Timeline: sequence tabs, Premiere-style clip menu, Nest name dialog by @justjohn12345 in #78
- NEST1–NEST3: nested sequences safety and Premiere-matching Nest (fixes two crashes) by @justjohn12345 in #82
- Nested sequences: rendering fidelity (sizes, speed, effects, captions, waveforms) by @justjohn12345 in #113
- Nested sequences: Timeline tabs (view per sequence, tab menu, reorder, restore on open) by @justjohn12345 in #115
- Codecs: add clean-room APV (RFC 9924) decoder, encoder, container support, and export presets by @mweinbach in #105
- Theme: interface type closer to Premiere's by @punkhop in #130
- Hardening: hostile MP4 edit lists and cyclic subclip chains (#66) by @echelon in #142
- Tests: image-sequence oracle fixtures are written atomically (#125) by @echelon in #143
- MCP: render_frame and render_preview leave the playhead where it was (#114) by @echelon in #144
- Transcripts: builds without speech-to-text say so (#97, #98, #89) by @echelon in #146
- Packaging: the rpm requires glibc >= 2.35, as the deb does (#93) by @echelon in #147
- Bridge: a blocking export runs as an app job, so it neither times out nor freezes the app (#91, #92) by @echelon in #154
- Transcripts: disabled, not failing, in builds without speech-to-text (#89, #97, #98) by @carlitosteso3 in #151
- Docs: releasing guide, CLI export options, README and CLAUDE.md drift (#85, #86, #87, #88, #99) by @echelon in #156
- Packaging: the Flatpak can read a project's media wherever it lives (#107) by @echelon in #158
- Web: window.filmcraft rejects with Error objects everywhere (#90) by @echelon in #159
- Rename PrintCraft to PdfCraft by @echelon in #177
- Graphics: point text and paragraph text, as Premiere has them by @justjohn12345 in #166
- Graphics: only selected layers have a box, and a hidden layer has none by @justjohn12345 in #182
- Graphics: New Layer from File anchors the picture at its own centre by @ajsongpilot in #190
- Color Matte: pick the color on creation and change it later (#29) by @carlitosteso3 in #145
- h264enc: 1-pass bitrate modes no longer starve the opening second by @EthanSuquet in #148
- Playback: a stalled audio device no longer freezes the playhead (#136) by @carlitosteso3 in #155
- Media Browser: probing a file doesn't read it whole (#157) by @carlitosteso3 in #165
- Shortcut recorder accepts modifier chords; Add Edit cuts only selected clips (#164, items 1 and 5) by @carlitosteso3 in #173
- i18n: add Brazilian Portuguese (pt-br) UI translation by @RicSchonfelder in #176
- platform: opt-in hardware H.264 encoding with VideoToolbox by @dcarnelutti in #183
- render: composite only what overlays cover, and reuse the float images by @dcarnelutti in #184
- export: show the estimated time left of a render next to its percentage by @dcarnelutti in #185
- platform: H.265 (HEVC) export with VideoToolbox by @dcarnelutti in #186
- Engine: project.selectAll and project.deselectAll for the Project panel (#168) by @Luna161 in #189
- Windows: Media Foundation/D3D11 hardware H.264 + HEVC decode by @SaymonMaster14 in #141
- M10: choose vertical titles from the Type tool flyout by @midasdf in #195
- Engine: file.import refreshes the offline-missing list (#110) by @Luna161 in #175
- Windows: VP9 + AV1 hardware decode (Media Foundation / DXVA) by @SaymonMaster14 in #162
- Windows: NVENC H.264 hardware encoding for Export (opt-in) by @SaymonMaster14 in #180
- Q/W ripple trim only the selected clips' tracks (#164) by @carlitosteso3 in #207
- Ripple delete names the sync-locked track in the way; playhead snaps to cuts (#164, items 2, 3 and snap) by @carlitosteso3 in #203
- Stabilize project lifecycle, timeline, audio and export workflows by @cirocueto2013-wq in #192
- #199: make Ctrl+C / Ctrl+X / Ctrl+V work on Windows and Linux by @DWAA1660 in #204
- fix: support integer CPAL devices and recover voice-over/audio failures by @cirocueto2013-wq in #209
- Web: Link Media Locate… links the chosen file to the selected missing clip (#111) by @Luna161 in #174
- #188: regression test — a copied Graphic clip pastes at the playhead by @echelon in #212
- fix: validate hostile project, export and MXF inputs by @cirocueto2013-wq in #210
- About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in #215
- Speed/Duration opens its dialog; dragging an effect parameter is one undo step (#201) by @carlitosteso3 in #213
- Release: FreeBSD, Flatpak x86_64/aarch64, AppImage zsync; README Downloads by @echelon in #267
- README Downloads: where to get it, then builds (Windows first) by @echelon in #271
New Contributors
- @punkhop made their first contribution in #42
- @midasdf made their first contribution in #38
- @justjohn12345 made their first contribution in #41
- @EthanSuquet made their first contribution in #83
- @HEOJUNFO made their first contribution in #118
- @dcarnelutti made their first contribution in #109
- @carlitosteso3 made their first contribution in #126
- @coygeek made their first contribution in #122
- @Luskish made their first contribution in #123
- @mweinbach made their first contribution in #105
- @ajsongpilot made their first contribution in #190
- @RicSchonfelder made their first contribution in #176
- @Luna161 made their first contribution in #189
- @SaymonMaster14 made their first contribution in #141
- @cirocueto2013-wq made their first contribution in #192
- @DWAA1660 made their first contribution in #204
Full Changelog: v0.2.1...v0.4.0