Repository navigation
v2.0.0-rc.1
Pre-release
Pre-release
Changes since v0.0.0-onnxruntime-1.27.1
- fix(wgc): pull-based frame delivery to stop CopyResource wedging the stop path
- fix(wgc): address CodeRabbit review on the pull-based frame delivery PR
- fix(wgc): register onFrameArrived's in-flight guard before touching the frame pool
- fix(wgc): return before touching the frame pool when the legacy callback is null
- test(wgc): run the #460 stall scenario on the path that still has a callback
- fix(macos): serve ONNX Runtime from a build that respects the 13.0 floor
- docs(perf): settle the macOS export's 4 s cold start, and kill the asar lever
- docs(perf): keep the cold-start conclusions at the evidence level
- docs(perf): stop the cold-start section excluding more than it measured
- fix(ci): read the runner image instead of interpolating an empty string
- feat(editor): add audio-track data model for external audio import
- feat(editor): import external audio files as audio-kind assets
- feat(editor): add timeline state ops for imported audio tracks
- feat(editor): import audio onto the timeline with a lane and inspector
- feat(editor): drag and trim audio tracks on the timeline lane
- feat(editor): play imported audio tracks in the preview
- feat(export): mix imported audio tracks into the exported MP4
- feat(editor): fold audio import into the single "Import media" button
- fix(editor): smooth audio-track preview and stop audio becoming a clip
- feat(editor): add audio from the timeline toolbar, not the media tab
- refine(editor): tidy the audio toolbar button and inspector pane
- refine(editor): reposition Add audio and make Delete track span
- refine(editor): match the audio-track pane to the global Audio pane
- refactor(editor): drop the superseded audio-track move/resize ops
- refactor(editor): remove the mute feature from imported audio tracks
- docs: list audioTracks[] in the document-model top-level shape
- fix(editor): address CodeRabbit review on the audio-import PR (#502)
- feat(editor): honor imported-track boost in the preview (CodeRabbit #5)
- feat(editor): always show the audio lane + an "Add audio" shortcut (M)
- fix(editor): sync imported audio tracks to trims in the export (issue #350)
- fix(editor): address CodeRabbit follow-up on the audio-track PR (#502)
- docs(editor): correct the timelineStartSec comments — the head is raw, not output
- fix(editor): play imported audio contiguously in preview to match the export
- fix(ipc): accept audio paths in the generic media reads so imported waveforms survive a reopen
- fix(editor): three more preview↔export audio seam bugs
- fix(editor): four imported-audio state leaks
- refactor(editor): three imported-audio cleanups
- feat(audio): clip-anchor timeline audio tracks
- feat(audio): fades, loop and mute on timeline audio tracks
- feat(audio): record voiceovers against the timeline
- fix(audio): unblock voiceover recording and restore the left-edge trim
- fix(audio): make the loop toggle reachable, and give voiceover a button
- test(timeline): pin the voiceover toolbar button
- feat(audio): make loop fill by itself, and mark where it repeats
- feat(timeline): one audio button with a named menu, and real tooltips
- fix(ui): forward refs through the Popover and Tooltip wrappers
- feat(timeline): stack overlapping audio tracks on their own rows
- fix(audio): silence the timeline's own tracks while recording a take
- feat(audio): dock the voiceover recorder instead of covering the video
- fix(audio): stop tracks inside a trimmed stretch from playing
- fix(audio): keep tracks at 1x and in place under speed regions
- perf(transcription): extract audio natively, off the UI thread
- fix(timeline): let the keyboard activate a lane pill, not just the pointer
- fix(transcription): stop the background pass transcribing music
- feat(ai): let the agent see and place audio tracks
- feat(timeline): show what an audio pill crops, and let it slip
- fix(timeline): say that Alt slips, instead of leaving it to be discovered
- fix(timeline): put the slip gesture where it is read without hovering
- feat(editor): fold captions into the transcript tab
- feat(editor): read the transcript from the voiceover, not just the film
- feat(document): add immutable transcript word edits
- fix(document): validate referenced word ownership and join CJK independently of language tag
- fix(document): read CJK segment edges by code point for non-BMP Han
- feat(document): make a corrected word survive its re-transcription
- feat(editor): correct a word in the transcript without cutting the film
- feat(editor): add words to the transcript that nobody said
- feat(editor): an added word buys itself time, and the film holds its frame
- revert(editor): an added word no longer splits the clip it lands in
- feat(timeline): mark where words were added, without storing anything new
- feat(ai): let the chat correct a word it heard wrong
- feat(document): store the pause an added word needs, as a region
- feat(editor): the readers count the pause an added word bought
- feat(timeline): one answer to whether a raw moment is in the film
- feat(editor): decide a word by the ruler, so both lanes agree
- feat(audio): a cut under a voiceover takes the words, not the take's tail
- feat(editor): a transcript cut names a moment, not an owner
- feat(captions): the lane is a document fact, and the captions follow it
- feat(audio): one voiceover row, one music row, through a single door
- fix(document): sweep the trims that struck words through without cutting
- feat(timeline): tell the two insertion lanes apart, and pin the inert one
- feat(timeline): one walk over a take, losing time to a cut and gaining it to a word
- fix(timeline): the projection counts the pauses, so audio stops landing early
- fix(export): a pause reaches the compositor, instead of exporting as nothing
- feat(audio): the export and the transcript read the take's walk
- feat(preview): the voice parks with the walk, and every take plays once
- feat(editor): add a word on either lane, and draw the time it buys
- feat(editor): cut the notch into the take, inside one outline
- fix(timeline): a scrub names a moment on the ruler, not on the tape
- fix(preview): the picture spends the pause a word bought
- fix(preview): an insertion is media that plays, not a pause
- fix(preview): park the picture on the insertion, don't re-seek it
- fix(timeline): the scrub release carries its ruler second too
- refactor(timeline): one clock — an insertion is media, so the clip is longer
- fix(captions): place a cue past an insertion on the source it names
- fix(document): reconcile clip geometry with the insertions on every load
- fix(captions): an added word is subtitled over the media it inserted
- fix(timeline): the insertions are a required argument, and the compiler found the rest
- fix(transcript): the pane follows the voice across an insertion, and highlights the added word
- fix(captions): an added word and the word after it share a second — order them on the ruler
- refactor(timeline): delete the duplicate answer, route the rest through the one mapping
- revert(insertions): remove the added-word machinery, keep the gesture
- feat(media): generate the media an added word is spoken over
- feat(timeline): the insertion layer — a clip reads a list of parts, not a file
- feat(timeline): the one funnel reads parts, so an extension is a segment like any other
- feat(document): the clip grows with the word, at the one funnel every write goes through
- feat(media): an extension resolves to a file, and the save generates it
- feat(preview): the DOM preview plays an extension, because it is handed a clip
- fix(transcript): the conversion source second -> ruler second lives in one place
- fix(insertions): an extension is a clip, because that is the only shape the app maps
- feat(insertions): an insertion is a clip, stored as one
- refactor(timeline): the seam a clip leaves closes only under generated media
- refactor(timeline): two clips whose media continues across the join are one clip
- fix(insertions): editing an insertion's text resizes the clip it plays
- test(insertions): shortening an insertion is a second claim, pinned separately
- feat(insertions): an insertion in a voice-over is a track fragment
- refactor(voiceover): the take walk is a subtraction again
- fix(insertions): a release build cannot retype an inserted word either
- docs(insertions): the gate is the runtime refusal, not the dead-code elimination
- refactor(insertions): one flag for the dev gate, read where the gesture happens
- fix(ai): the chat cannot rewrite a word nobody said
- fix: the six CodeRabbit findings that were still standing and cheap
- fix: the four CodeRabbit findings that were left, including the read capability
- fix(rebase): restore what replaying 112 commits dropped
- docs(e2e): checks for imported audio, voice-over and word insertion
- build: pin electron exactly, so packaging works without a second declaration
- fix(insertions): the deleted word stayed in the transcript
- test(insertions): control tests that control something
- fix(i18n): simplify transcript panel title across all locales
- fix(website): derive trimId from clipWord.trimIds in gen-recreation
- fix(editor): reset all parameters on audio track pane reset
- test(editor): verify audio track live drafts are cleared on reset
- fix(editor): prevent audio track slider jump on release
- fix(editor): polish UI layout, slider gauge, icons and captions panel
- fix(timeline): expand initial timeline height and dynamically adjust for stacked audio lanes
- test(timeline): cover overlapping same-kind audio tracks
- fix(editor): keep the camera preset labels inside their button
- fix(compositor): high-quality motion blur and gaussian webcam blur
- fix(compositor): bound cursor motion blur trail_dt to at most 1 frame
- fix(compositor): show the webcam background effects on click, not on the next scrub
- fix(compositor): open the settle window after a paused seek too
- fix(editor): keep the top bar usable when the window gets narrow
- fix(build): ship the ffmpeg CLI in the macOS .app so transcription works without a system ffmpeg
- fix(build): address review comments and format before-pack.cjs
- fix(build): harden macOS ffmpeg dylib staging
- chore: name @Beetix code owner for Linux/Wayland capture
- fix: avoid AV1 clip-switch crashes on Windows
- fix: preserve Windows AV1 software decode timing
- docs: record the 554 pre-fix and post-fix crash A/B
- docs: name the issue number in the A/B verdict cell
- fix: guard Windows frame decoding resources and hardware tests
- docs(website): add the export benchmark post, with live standings
- fix(editor): fold a probed duration in on the shared write queue
- fix(timeline): read the document at write time in addZoomsBulk
- fix(editor): bind the probed duration to the take that produced it
- test(editor): cover the probed-duration decision, guards included
- style: apply biome formatting to the probed-duration changes
- fix(preview): mount the primary asset while the timeline is empty
- test: run the probed-duration decision test in the default environment
- fix: close the rest of the auto-zoom write race, and stop the seed clobbering a measured length
- fix(editor): recover a missing primary asset when seeding the timeline
- fix(rec): the microphone can't be disabled in the Studio Rec tab
- fix(capture): drain the Linux decoder at EOF on the seek path
- fix(capture): match the real AVERROR_INVALIDDATA in the seek path
- fix(capture): return the last frame when seeking at/past end (frame-dropped captures)
- docs(capture): note the EOF drain is inert on B-frame-less captures
- fix(captioning): correct web-demuxer.wasm URL — transcription always failed with "Failed to fetch"
- fix(macos): exclude recording controls from captures
- fix(capture): stamp Linux video frames with wall-clock PTS to stop time-compression
- fix(capture): write the tail frame even when stopped while paused (CodeRabbit #512)
- fix(capture): freeze staging while paused and snapshot wall-clock before flush (CodeRabbit #512)
- refactor(capture): give a paused frame its own StageOutcome::Frozen
- fix(preview): hold the frame a VFR seek lands on, not the one after it
- fix(capture): pass the dmabuf argument the three new tests omitted
- fix(windows): let the default microphone id veto the device name
- feat(store): let a caller bound a document save that never answers
- refactor(timeline): one auto-zoom collect/append path for both callers
- feat(recording): suggest cursor-dwell zooms for a freshly imported take
- feat(launch): add the after-recording auto-zoom toggle
- feat(editor): run the fresh-take auto-zoom pass on the metadata write queue
- fix(editor): keep the placeholder duration on the asset, and off auto-zoom
- fix(timeline): re-collect auto-zoom suggestions when the clips move underneath
- fix(recording): write the cursor sidecar before publishing the session
- fix(recording): persist auto-zoom preferences and reconcile media duration
- chore: bump nix package to v1.11.0
- fix(macos): warn when recording the default microphone
- fix(macos): suppress stale microphone warnings
- fix(macos): only warn about a defaulted microphone when one was actually requested
- fix(macos): let the default microphone id veto the device name
- refactor(schema): drop autoTranscribe, which nothing has ever read
- refactor(schema): drop the two input schemas nothing consumes
- chore: let CodeRabbit approve PRs
- chore: let CodeRabbit approve PRs
- fix(capture-linux): measure the cursor against the window, not its monitor
- test(capture-linux): cover the encoder-preferred content_rect branch
- fix(capture-linux): set the content rect on the dmabuf path too
- fix(transcription): a recording with no audio is a verdict, not a failed job
- test(transcription): assert the silent-media toast says what it says
- ci: auto-approve Beetix PRs limited to Linux/Wayland paths
- revert: CodeRabbit back to comment-only
- ci: read the approvable paths from CODEOWNERS instead of duplicating them
- docs: add Trendshift repository badge
- docs(website): indicate lower is better for export benchmark standings
- fix(website): port newestPerPlatform to leaderboard so multi-platform builds rank correctly
- fix(macos): resolve Chromium USB microphone labels
- feat(cursor): add smart cursor auto-hide and zoom hide (#104)
- fix(linux): validate mapped DMA-BUF frames
- fix(macos): drop video frames whose timestamp does not advance
- docs(macos): state the timestamp gate's measured bounds, not assumed ones
- fix(macos): stop the take when the writer dies mid-capture, and tell the user
- fix(macos): let a second stop wait for the shutdown already running
- fix(macos): settle the native stop on the helper's exit, not its first error
- fix(macos): keep a timed-out helper out of the next take, and say why a take ended
- fix(macos): listen for errors on the helper's output pipes too
- fix(macos): recover the take a dead writer or a killed helper left on disk
- fix(macos): keep a recovered take when the disk is still full, and say what failed
- fix(wgc): read the config argument as UTF-16 so non-ASCII output paths resolve
- fix(timeline): coalesce scrub state updates per frame
- test(timeline): measure per-frame scrub commits against one update's cost
- fix(windows): low-pass before decimating so 96/192 kHz sources stop aliasing
- docs(testing): add the anti-alias check, and log the A/B that confirms it
- fix(ai): report every modifier removed with a pill
- fix(ai): enumerate audio pills too, now that RegionKind carries them
- ci(whisper-stt): drop the msvc-dev-cmd step the Windows build never used
- docs(linux): bring the platform table back in line with what the code does
- docs(linux): the webcam is a separate file on Windows too, and VAAPI needs dmabuf export
- fix(capture-linux): re-apply the vaMapBuffer2 guard to the dmabuf encoder's CPU upload
- fix(capture-linux): apply the vaMapBuffer2 guard to a forced VAAPI encoder too
- fix(hud): keep a dragged HUD inside the display work area
- fix(hud): clamp the visible bar, not the window, into the work area
- feat(editor): show what a trim keeps, while the handles are still moving
- fix(editor): size the card timecode gate to the timecode it is gating
- fix(editor): measure the card timecode gate instead of guessing per character
- feat(launch): make post-recording auto-zoom systematic and remove toggle button
- fix(hud): keep open popovers on screen and harden the work-area clamp
- fix(build): re-fetch a staged ONNX Runtime that is the right version from the wrong archive
- feat: add Czech (cs) locale
- fix(cs): correct Czech grammar, terminology and typos in locale files
- fix(cs): replace em dashes with natural Czech punctuation throughout
- fix(cs): replace escaped inner quotes with proper Czech closing quotation mark
- fix(cs): address CodeRabbit review: grammar, gender agreement and missing preposition
- fix(cs): add cs to tutorialHelpTranslations static locale map
- fix(cs): add missing i18n keys added in main merge (autoZoom, cursor)
- fix(cs): register cs in main process and packaging, sync keys with main
- fix(hud): label recording controls for assistive technology
- test(hud): pin the exact accessible name of every HUD control
- feat(settings): persist recording setup and project appearance defaults
- fix(settings): fail stale CLI sources and keep HUD stop/save in sync
- fix(settings): stop camera pref ping-pong and stale select-source writes
- refactor(settings): drop the Settings dialog and new-project appearance defaults
- docs(perf): record the HEVC 8-bit macOS decode measurements
- docs(perf): harden the decode harnesses after review
- feat(presets): store editor style presets as shareable files
- chore(i18n): add style preset strings for all locales
- feat(editor): add a Presets menu to the Composition pane
- docs(testing): log the PR #652 macOS settings-persistence pass
- fix(editor): move presets menu to header
- fix(presets): handle persistence failures
- fix(export): take the output shape from the scene, never a hardcoded 16:9
- fix(timeline): stop losing the source-dimension backfill on fresh recordings
- test(timeline): cover the backfill retry after a timed-out save wait
- fix(compositor): clamp the click-bounce cursor size at zero
- test(cursor): pin the click-bounce envelope, align the inspect script
- docs(cursor): drop the last references to the deleted nativeCursor.ts
- fix(compositor): keep privacy blur on its content under zoom and 3D tilt
- fix(compositor): close two edge leaks in the zoomed privacy mask
- docs(testing): log the privacy-blur-under-zoom export pass
- fix(compositor): match the Linux background blur to the HLSL/Metal Kawase
- test(compositor): check the Linux Kawase parity on the vertical axis too
- fix(compositor): size Linux Kawase blur texels from actual pyramid dimensions
- feat: add German (de) locale
- fix(i18n): add missing German stylePresets strings and match import button label
- feat(website): add comparison, platform and feature pages, a FAQ and the CLI reference
- docs(website): bring the docs and the blog in line with v1.11.0
- feat(website): localize the site into fr, es, pt-BR, ja, zh-CN, zh-TW and de
- build(website): build with Docusaurus Faster
- docs(website): say what the input group grants before telling users to join it
- test(website): cover English-only route matching and release asset patterns
- docs(website): keep the comparison pages to the choices that matter
- docs(website): drop the "not production-grade" framing from intro and FAQ
- docs(website): point the Camtasia and Linux pages at what the CLI needs
- feat(website): translate every page but the blog, and track stale translations
- docs(website): translate the comparison, platform and feature pages
- fix(website): order stale translations by commit, not by commit time
- chore: keep Markdown at LF
- docs(website): carry the CLI requirement links into the translations
- docs(website): note the rebase blind spot of i18n:check
- test(compositor): measure the Linux cursor trail over a one-frame shutter
- fix(dev): bypass the HTTP cache when loading the Vite dev server
- feat(zoom): drive the 3D tilt from cursor motion
- feat(zoom): rock the tilted screen on each click
- feat(cursor): extrude the cursor along the screen normal
- feat(compositor): expose programme time to the frame geometry
- feat(background): animate the gradient wallpapers
- feat(frames): draw a window chrome around the screen plane
- feat(effects): defocus the tilted screen by its depth
- feat(3d): add the follow-cursor orbit camera and a modelled 3D cursor
- fix(i18n): add the German strings for the 3D effects
- revert: back out the 3D effects until they run on macOS and Linux
- fix(audio): boost the mic only over system audio, and clamp the mix once
- test(audio): cover the mix gain per format and give the gain rule one home
- feat(zoom): drive the 3D tilt from cursor motion
- feat(zoom): rock the tilted screen on each click
- feat(cursor): extrude the cursor along the screen normal
- feat(compositor): expose programme time to the frame geometry
- feat(background): animate the gradient wallpapers
- feat(frames): draw a window chrome around the screen plane
- feat(effects): defocus the tilted screen by its depth
- feat(3d): add the follow-cursor orbit camera and a modelled 3D cursor
- fix(i18n): add the German strings for the 3D effects
- feat(frames): model the device frames in 3D
- feat(effects): pick a device frame in the Effects pane
- feat(frames): frame the recording with a 3D device
- fix(frames): keep the footage, model the devices after real products
- fix(frames): keep every border's thickness around every corner
- test(frames): show the window's title-bar corners in the v4 close-ups
- fix(frames): widen the roundness ranges and round only the inside of the laptop and screen bezels
- docs(frames): align the hinge range and the corner tolerance with the derivation and the test
- test(frames): cover the preset frame defaults and legacy values, and document the mode-17 slots
- fix(macos): realign a microphone stamped on a foreign clock
- Revert "fix(macos): realign a microphone stamped on a foreign clock"
- fix(macos): decode 24-bit integer microphone audio
- fix(macos): read unsigned integer PCM around its midpoint
- fix(macos): keep the Dock icon, Cmd+Tab and the menu bar
- fix(macos): accept 8-bit integer PCM microphone input
- chore: bump nix package to v1.12.2
- chore: name @My-Denia code owner for Windows capture
- fix(export): wait for GIF cancel to finish native cleanup
- fix(export): surface GIF cancel request failures
- fix(capture-linux): latch capture-started so an early first frame is not lost
- fix(capture-linux): keep the liveness check ahead of the capture latch
- test(capture-linux): cover the undeferred, repeated and post-error capture waits
- test(capture-linux): state what each wait case pins
- feat(auto-zoom): place suggestions on recorded clicks
- feat(stt): add cross-platform Silero VAD pre-pass via whisper.cpp
- fix(stt): address CodeRabbit review feedback on Silero VAD pre-pass
- fix(stt): filter singleton invalid VAD intervals and missing end segments
- perf(build): reduce package size and optimize V8 heap memory footprint
- fix: update mediapipe notice path and clarify renderer v8 flag scope
- fix(packaging): restore Windows ffmpeg-shared.exe and address review findings
- test(i18n): reject unsupported extra locale tags in packaging config
- refactor(i18n): consolidate packaging locale mapping into declarative table
- fix(packaging): keep cs and de Chromium locales when pruning
- feat(macos): gather every permission in a first-run permissions window
- fix(macos): bring the permissions window back after Quit & Reopen
- fix(macos): say which button the 'bypass the private window picker' alert needs
- fix(macos): stop HUD dialogs painting a grey rectangle over the desktop
- feat(macos-capture): record from Apple's system picker in a helper session
- feat(macos): pick sources in Apple's system picker on macOS 15.2+
- fix(macos): hide the HUD while Apple's picker is up
- fix(macos-capture): never finish a writer that never started
- fix(gif): accumulate fractional frame delays so GIF playback matches its fps
- fix(shortcuts): show ⌘ for fixed undo/redo rows on macOS
- docs(inspector): stop listing the retired frame-stepping hint as rewired
- chore: normalize electron/native/README.md to LF
- fix(dialogs): attach file panels to the calling window so the export save panel cannot get lost
- fix(dialogs): own the project panels opened through the native bridge
- fix: headless export honors editor cursor tuning keys and cropRegion from v2 projects
- fix(migrate): validate and clamp v2 cropRegion before applying it
- Allow imported audio below -12 dB
- docs: e2e results for v1.13.0-rc.4 (macOS)
- docs: e2e results for v1.13.0-rc.6 (macOS)
- chore: bump nix package to v1.13.0
- ci(aur): verify sources the way a user's makepkg resolves them
- ci(aur): read source names from the regenerated .SRCINFO
- ci(aur): count a ${pkgver//./_} source name as versioned
- ci(aur): match the version as a whole segment of the source name
- fix: restore public/ copies of demo.gif and preview images for hotlinks
- ci(winget): name the missing token scope before komac's CreateRef fails
- ci(winget): report a failed workflows read as a named error, read-only GITHUB_TOKEN
- feat(export): ask for a star once, after the second export
- fix(export): ask on the first export, and only within its own session
- ci: put one star line at the head of stable release notes
- test(ci): pin that gh actually consumes NOTES_ARGS
- ci: unpin the macOS compositor runner from macos-14
- test(ci): close two holes in the macOS runner guard
- feat(website): offer a star once a download has started
- fix(website): use GitHub's mark for the navbar GitHub link
- fix(website): no star prompt when nothing was downloaded
- fix(transcript): load projects whose transcript ends before it starts
- fix(zoom): pace transitions by zoom level and keep them at screen speed
- fix(zoom): sample the previous frame one screen frame back
- docs(e2e): state the 1x/4x match with its measured tolerance
- docs(e2e): drop the duplicated scale difference
- diag(windows): add opt-in audio device-state watcher for #724
- fix(windows): keep the render endpoint alive during recording
- fix(windows): address CodeRabbit findings on the audio-device watcher
- fix(windows): write a real tone instead of silence for the keep-alive
- fix(windows): move the keep-alive tone above audible range
- fix(windows): address CodeRabbit findings on the keep-alive tone
- fix(windows): address review findings on the keep-alive and device watcher
- fix(windows): finish #726 review cleanup
- feat(ui): soften the interface without changing its layout
- test(i18n): fail i18n:check on keys the code asks for but en lacks
- test(i18n): check each key against its own translator's namespace
- docs(agents): name the source picker's Select button
- feat(compositor): continuous corners on every rounded shape
- test(compositor): measure the corner slope on the contour itself
- fix(preview): no background fringe around the card's rounded corners
- fix(preview): mark the canvas painted only once pixels are on it
- fix(cli): lay the screen out at its probed size
- feat(format): add Auto, a frame shaped around the composition
- feat(format): make Auto the default for new projects
- docs(website): describe the Auto format
- docs(e2e): log the Auto format pass
- docs(website): scope the Auto default to new projects
- docs(roadmap): review the roadmap at v1.13.0
- docs: AGENTS.md no longer describes Pixi.js as the renderer
- feat(inspector): pick fixed choices from rows of buttons
- feat(inspector): free rows, and five speed presets
- feat(cursor): drop the keep-inside-frame option
- feat(camera): frame the webcam by dragging, not with two pan sliders
- fix(camera): show the framing picture only in its own shape
- feat(editor): a shorter top bar, and a first run that offers to record
- feat(timeline): a softer clip card with a smooth waveform
- feat(timeline): a navigator that shows what it navigates
- fix(timeline): measure the clip timecode as its tabular digits render
- feat(editor): camera roundness slider and anchored positions
- fix(website): lift the smooth waveform into the recreation data
- feat(inspector): pick the zoom level from a row of buttons
- fix(inspector): route click-impact through the zoom-pane write chain
- fix(inspector): keep queued zoom writes from crossing replacements or a stalled save
- fix(inspector): scope unknown-save blocking to the save's own epoch
- feat(inspector): four zoom presets and a free zoom field
- feat(inspector): the background picker back inline, Screen Studio's way
- feat(camera): zoom the webcam by its frame's corners
- feat(editor): grab handles and a ratio row in Edit clip
- feat(editor): a wider inspector when the stage has room
- fix(windows): let the top bar's rule run under the window controls
- fix(windows): square hover areas for the window controls
- fix(edit-clip): move and resize the crop from the keyboard
- fix(compositor): mask the screen with its slot in block layouts
- feat(format): offer Auto only for a timeline of one composition
- fix(format): leave Auto out of mixed timelines and keep its frame still
- feat(cursor): option to always render the arrow cursor
- feat(editor): make wallpaper 11 the default and first in the picker
- fix(timeline): keep queued zoom levels through span and focus saves
- fix(timeline): put a focus back only over a write of its own epoch
- fix(timeline): roll a focus drag back when its commit fails late
- fix(timeline): let a zoom write that saves a live drag undo it too
- fix: fill rounded background color swatch
- fix(cli): carry the recording frame through v2 project exports
- fix(compositor): let the screen's edges follow the motion blur
- fix(compositor): keep device frames out of the screen edge trail
- fix(compositor): motion-blur the framed screen as one object
- fix(compositor): read the off-screen footage only inside the rounded aperture
- docs(testing): log the phone-frame motion blur export check
- perf(compositor): branch before the mode-18 footage fallback in WGSL
- fix(cli): export projects saved by the editor
- fix(cli): confine a loaded document's media grant to the trusted dirs
- refactor(cursor): drop the always-true click effects gate
- fix(ai-edition): let chat message text be selected and copied
- fix(ai-edition): copy chat messages via main-process clipboard on Windows
- ci(nix): retain Xvfb diagnostics for capture probes
- ci(nix): keep the run_cli mapping printable on the errexit path
- perf(compositor): compile the Windows shaders at build time
- fix(compositor): draw the webcam on Linux during a Full Camera hold
- fix(cursor): stop shipping the sweezy-cursors.com packs
- fix(website): stop publishing the sweezy-cursors.com packs
- fix(website): drop the cursor theme label the recreation no longer draws
- feat(cursor): add five original cursor themes
- feat(cursor): ship raster themes and 3D modeling direction
- docs(cursor): distinguish 2D outlines from 3D materials
- feat(cursor): sculpt original cursor themes in 3D
- test(cursor): align model coverage with selectable themes
- fix(editor): one bounds table in the model, and a reset on every slider
- fix(editor): keep typed text sizes on unmount; reset only from the button
- test(editor): hold the speed and preset fixtures to the new bounds
- feat(audio): a soft limiter and -16 LUFS loudness at export
- fix(audio): measure the recording's loudness again when Retry reloads it
- feat(audio): music beds start at -18 dB with 1 s fades and duck under the voice
- fix(export): pass the bitrate to the encoder and dither the GIF
- feat(export): named destinations, detailed settings under Advanced
- fix(export): own disclosure class, honest destination docs
- fix(ai-edition): silence cuts keep breath next to kept speech
- feat(editor): new projects start from your look, and a preset never changes the format
- fix(compositor): size cursor, shadow and corners by the screen, not the frame or the source
- fix(compositor): give text annotations a symmetric 300 ms exit
- fix(compositor): keep pulse at its full duration in short regions
- fix(cli): take auto zoom and caption bounds from the editor's own paths
- fix(hud): say what the system cursor turns off
- fix(cli): measure the caption inset to the plate, not the region
- fix(cli): place captions in the editor's bottom-anchored caption box
- fix(hud): no editable-cursor promise when capture falls back to the browser
- fix(zoom): grey out zoom levels that would blur the recording, and bound the render
- fix(zoom): step over disabled levels by keyboard, and limit a zoom by every clip it spans
- fix(zoom): point the zoom row at the visible reason its levels are greyed out
- fix(text): embed the offered fonts so the render matches the picker
- fix(text): make the shipped fonts win over installed ones of the same name
- fix(compositor): tilted zooms that never roll and carry motion blur
- fix(compositor): mask the tilted blur trail, trail from the previous camera
- fix(compositor): steep roll-free Left and Right, iso folded into Left
- fix(compositor): render every gradient stop at its offset, not just the ends
- feat(editor): curated backgrounds first, one-colour gradient behind Custom
- fix(compositor): keep Linux gradients opaque when the first stop is at 0
- fix(compositor): premultiply translucent gradient stops
- fix(editor): keep a hex draft in the Custom background rows
- feat(recording): keep notifications out on macOS, opt-in Hide desktop icons
- fix(capture): build the macOS helper again, and own the cover's promise in its thread
- feat(editor): text that cannot be made unreadable
- fix(captions): offer turning captions on only when the transcript has speech
- fix(editor): defaults that look good without touching anything
- feat(editor): name the cursor size, click bounce and shadow instead of numbering them
- fix(compositor): shrink the webcam toward its anchor and give auto-follow a dead zone
- fix(compositor): cache the follow view per region, settle past the last sample, time the ease-in on screen
- fix(compositor): bound auto-follow cache to region
- feat(format): fill a fixed format with a window that follows the cursor
- fix: stabilize audit integration checks
- fix(editor): resolve contrast helper in main build
- fix(editor): keep slider header height stable when the reset button appears
- refactor(editor): drop explanatory hints, hide inoperative settings
- style(timeline): candy colours for clips, pills and the pan/zoom bar
- style(timeline): candy borders in their own colour, not darkened
- style(timeline): fainter candy glow on the light theme
- style(timeline): no border and no gloss line on the candy shapes
- style(timeline): tiny-pill handles in the lane colour
- fix(captions): open caption settings in place of the transcript pane
- feat(camera): show the camera background on the crop thumbnail
- feat(effects): roundness under padding, hidden and reset at zero padding
- feat(captions): pick the caption position from the camera-style anchor grid
- refactor(editor): hide zoom levels that would blur instead of explaining why
- fix(editor): drop the zoom level row when no preset is within reach
- fix(timeline): make the clip edit button hover stand out from the clip
- fix(cursor): preview each theme by its main arrow only, centered
- refactor(editor): remove the previous/next clip transport buttons
- fix(zoom): put the custom level on the preset row, drop the blur hint
- feat(inspector): pick the right panel's fixed choices in one click
- feat(cursor): a size slider up to four times the default
- fix(compositor): Left back to the v1.13.0 iso, Right its mirror
- feat(cursor): sculpt the original themes' 3D arrow and hand
- fix(compositor): motion-blur the framed screen as one object under a 3D camera
- fix(effects): steady padding drag, roundness kept through zero padding
- refactor(effects): remove the Fit button
- fix(preview): keep the last frame up while an Auto format reshapes the canvas
- fix(preview): drop a frame whose bitmap lands after a newer one's
- fix(compositor): resize the preview in place instead of rebuilding the compositor
- fix(compositor): record the cursor file when playback auto-advances to the next clip
- feat(annotations): place annotations anywhere on the frame, boxes that fit the text
- fix(annotations): keep a refitted annotation on the frame, convert only through its own clip
- fix(compositor): make the frame the container in block layouts
- test(compositor): probe the frame body itself in the motion-blur trail test
- fix(effects): hold the Roundness row through a drag up from 0 too
- fix(slider): end the drag on a cancelled touch too
- style(timeline): the clip back in the brand's green, zooms in blue
- style(edit-clip): draw the kept range as the clip's candy card
- refactor(editor): remove the transport seek bar
- chore(website): regenerate recreation data for the new cursor hotspots
- feat(cursor): move click impact to the cursor settings, for every camera
- fix(migrate): lift a v2 zoom's click impact into the cursor setting
- fix(background): make the gradient motions visible at a glance
- feat(zoom): give the 3D Orbit camera the zoom's focus mode
- fix(zoom): offer 3D Orbit with the cursor hidden when the focus is manual
- fix(camera): shrink half as much in a zoom, size from 15 to 50%
- fix(compositor): keep the cursor's size at the zoom focus under Left and Right
- feat(cursor): pick the cursor types drawn as recorded, 3D under the styles
- fix(cursor): arrow and hand by default, bigger centred cursor previews
- fix(cursor): read a cursor file again after a failed read
- feat(background): animate image wallpapers with the same three motions
- style(timeline): centre the transport in the header row
- fix(layout): measure the padding from the device frame's outer edge
- docs(compositor): drop the retired undistort pipeline from the comments
- docs(compositor): name where OUT_W and OUT_H still place things
- fix(zoom): let 3D Orbit frame the screen's corners like the other cameras
- test(compositor): pin the orbit's corner framing on both axes, both ways
- fix(cursor): scale the 3D cursor's click press to the named bounce levels
- fix(cursor): put click impact right under click bounce
- fix(roundness): only square the corners at 0% padding without a frame
- feat(background): blur the wallpaper by an amount instead of a switch
- fix(background): carry an old blur switch through reverse migration and look copy
- fix(cursor): let the bounce level drive the 3D cursor's whole click gesture
- fix(cursor): no click aim at None, fail the levels video on an ffmpeg error
- fix(zoom): frame the zoom window like a flat zoom under 3D Orbit
- test(compositor): follow bg_blur's switch to an amount in the render tests
- fix(cursor): dive the 3D cursor onto the click, in depth, over ~20 frames
- test(compositor): measure the click ring past the tip the dive moves
- docs(website): answer the FAQ's Homebrew question with the official tap
- fix(export): size a GIF from the source, not the hidden MP4 tier
- fix(homebrew): require macOS 13 in the cask, like the app
- feat(macos): record system audio from a Core Audio tap with Apple's picker
- fix(macos): release a half-built system-audio tap, and say when it failed
- feat(rec): let auto-zoom after recording be turned off again
- fix(rec): bound the prefs read, explain the disabled row, reconcile a failed write
- fix(rec): hide the auto-zoom row under the system cursor
- fix(rec): let a newer prefs snapshot win over the failed-write re-read
- fix(rec): leave the auto-zoom hand-off alone across a project switch
- fix(i18n): only check calls to translators, not every name starting with t
- fix(recording): offer no microphone on macOS 13 and 14
- fix: ignore hidden cursor telemetry in auto-zoom
- fix: honor recorded cursor visibility in compositor
- fix: preserve cursor visibility at clip offsets
- fix(compositor): hide every cursor layer while hidden, not a visible click's impact
- fix(auto-zoom): judge a press without its own mouse-up by the grace window
- test(compositor): check the tilted cursor model follows the plane's perspective
- feat(toasts): give a toast a cross to close it, inside its top end corner
- fix(toasts): colour the close button from the theme tokens
- fix(toasts): keep the close button's border off when it is hovered
- feat(website): redraw the scroll walkthrough in the editor's new direction
- docs(blog): making of v2, a demo is never ugly
- docs(design): align the design system with the editor's new direction
- docs(website): describe the current editor UI, in every locale
- docs(website): current speed limits and the 3D camera in the demo guide and auto zoom page
- docs: say auto zooms are placed after every take
- docs: restore the French pages' question marks and semicolons
- fix(compositor): drop unsolvable trail taps and keep depth of field off canvas
- style(theme): set the light shell apart with a greyer canvas and visible rules
- docs: bring the computer-use e2e pass up to date with v2
- docs(build): drop the note that says the macOS job is disabled
- docs(website): describe v2's macOS permissions on the install page
- fix(auto-zoom): keep the video's first and last seconds wide
- fix(auto-zoom): drop the pointer's rest on Stop along with the Stop click
- feat(auto-zoom): plan zooms as shots from recorded clicks
- docs(website): automatic zooms follow the recorded clicks, in every locale
- docs(website): say zooms land on clicks everywhere a page names them
- fix(compositor): keep the camera's corners until Full Camera reaches the frame
- docs(website): German docs take the app's German labels
- docs(website): align macOS permission steps with the install page
- feat(cursor): raise the default cursor size by 30%
- fix(editor): make the output format part of a style preset again
- fix(editor): keep the preset mark on a visible row during a rename
- feat(export): one settings panel in the export dialog
- fix(export): name the GIF loop toggle for screen readers
- fix(camera): shrink to 70% in a zoom, whatever its depth
- fix(camera): no shrink under a zoom region that does not zoom
- fix: skip empty speed regions in render plan
- feat(cursor): place the default cursor size at the target mark
- fix: handle macOS capture permission failures
- docs: stop take before retrying macOS permission check
- fix: add settings shortcut to cursor permission warning
- feat(recording): capture the webcam at its real resolution and frame rate
- fix(recording): ignore a camera quality change made during a take
- fix(recording): do not read studio-range black as a visible webcam frame
- fix(recording): size the browser webcam sidecar from its own camera stream
- fix(recording): copy padded NV12 rows a row at a time
- revert: drop the NV12 2-D copy path, which fixed a bug that cannot happen
- fix(recording): report the frame rate the DirectShow graph settled on
- test(recording): update camera quality fixtures
- feat(export): always export H.264 and drop the codec picker
- docs: the export dialog no longer offers a codec choice
- docs(website): drop H.265 from the copy, in every locale
- docs: describe the export checklist flow as one settings panel
- feat(cursor): rebuild the Star Sprout 3D models after its reference render
- feat(cursor): rebuild Studio Ink and Pop Coral 3D models after the new sheet
- feat(cursor): recut the Prism Glow 3D hand as a gem after the new sheet
- feat(cursor): rebuild the Pixel Candy models and the Prism Glow arrow after the sheet
- feat(cursor): give Prism Glow the navy outline of its drawing, and Pop Coral's hand its coral layer
- feat(cursor): anti-alias the inner edges of the 3D cursors
- feat(cursor): extrude Prism Glow's drawing instead of modelling it
- feat(cursor): make Pop Coral cut paper with flat tops
- feat(cursor): redraw Pixel Candy as simple pixel art built from voxels
- docs(cursor): say Prism Glow is extruded, not sculpted
- docs(testing): cover webcam capture quality in the manual e2e checklist
- docs(testing): name camera-mode commands per platform, split the 24 fps check by backend
- docs(testing): give the webm frame count its own ffprobe command
- fix(editor): hide the cursor settings when a take has no cursor data
- fix(editor): read the cursor facet's availability off the current recordings
- fix(compositor): copy the decoder surface before sampling it
- fix(compositor): do not reuse a decoder copy across a resized source
- fix(recording): name the last Apple picker pick after a relaunch
- feat(cursor): model Prism Glow as a mesh traced on its 2D art
- feat(compositor): ray-trace Prism Glow as a glass crystal in 3D
- fix(compositor): draw the cursor under the camera and the annotations on Linux
- perf(compositor): group Prism Glow's triangles in bounding boxes
- fix(compositor): refract the blurred picture, the cursor sharp on top
- feat(timeline): add a Clear zooms button
- feat(timeline): widen Clear zooms into Clear timeline
- feat(timeline): move Clear timeline to the end of the toolbar behind a divider
- fix(timeline): show Clear timeline from the stored regions, not the drawn pills
- fix(capture): include menus and popups in Windows window recordings
- test(capture): add a window-popup check to the WGC helper smoke test
- docs(capture): state that a window over the recording hides the popup menu
- docs(capture): cite the measurement behind the overlapped-window note
- fix(recording): keep the remembered display out of the Record-mode source row
- fix(annotations): masks and their gimbals follow the footage, arrows get a tight gimbal
- fix(annotations): let an arrow's box start before the frame
- fix(editor): let the audio element free-run instead of re-seeking it every frame
- docs(editor): put the resolveAudioTrackPlayback doc back above its function
- fix(editor): hold the audio to the picture by rate, and resync it after a seek
- feat(ui): cap tooltip width, follow text direction, add a shortcut chip
- feat(hud): rewrite the recording bar tooltips
- test(i18n): guard tooltip placeholders and length in every locale
- docs: add the tooltip guidelines and a HUD hover check
- fix(i18n): correct HUD tooltip wording in ar, de, ja, ko, tr, vi
- fix(hud): clear the bar with tooltips, and balance their lines
- feat(editor): show a choice row's tooltip only for icon-only options
- feat(editor): explain the ambiguous inspector switches with a tooltip
- fix(editor): reword three tooltips and drop the hints nobody could reach
- docs: add the inspector hover check to the manual checklist
- fix(editor): drop the tooltip on the caption font specimens
- fix(i18n): correct camera preview, roundness, transcript tooltips in ar, cs, de, es, fr, ja, ko, pt-BR, zh
- refactor: share the editable cursor check and format a fixed shortcut's first binding
- feat(editor): rewrite the editor tooltips
- docs: rename the Record mode cursor row and the timeline tooltip labels
- docs(website): use the app's Editable cursor label in the Record mode translations
- fix(i18n): align editor tooltip wording with each locale's own terms in ar, cs, de, es, fr, it, ja, ko, ru, tr, vi
- fix(editor): keep busy buttons hoverable and open Record mode tooltips above the pill
- fix(i18n): no-break space before punctuation in the French editor tooltips
Full Changelog: v0.0.0-onnxruntime-1.27.1...v2.0.0-rc.1