Skip to content

Snitt 0.2.0

Choose a tag to compare

@impressiver impressiver released this 10 Sep 00:21
· 181 commits to main since this release
aa5e548

Snitt 0.2.0

v0.1.0 could record a window and trim it. 0.2.0 is where Snitt became an editor —
123 commits, 304 files, +28,013 lines — plus on-device transcription, a real agent
surface, and an open-source licence.

Universal (arm64 + x86_64), signed with Developer ID, notarized and stapled.

The editor

The timeline stopped being a scrub bar.

  • Waveforms and a filmstrip in every track — log-scale, with clipping marks, one
    band per audio source. Dark surface, orange waveform.
  • Per-track gain and mute, applied live in the preview and honoured by the export
    mix.
  • Crop as a bounding box you drag and adjust before committing — nothing reaches
    the edit until you press Apply.
  • Auto-deep-trim: cut the spans where nothing happens, with presets and the
    criteria behind them stated. An automatic fold says what it removed.
  • Expanded folds insert space, so the playhead skips them instead of walking
    through footage that isn't there.
  • A chapter panel for markers, with typed times and drag-to-move.
  • Transport: rewind, scrub-stops-playback, zoom and snapping with on-screen
    controls.
  • Opens centred at 75% of the screen.

Transcription — on device, and editable

Runs on your Mac with Apple's recognizer. The audio never leaves the machine.

  • The transcript is an editing surface: click a word to jump there, select a phrase
    and delete it to cut those seconds.
  • Correct a word in place — double-click, type, done.
  • Tell it what to expect. A recording carries a vocabulary of the symbol names,
    file names and product names a general speech model has never heard, and
    re-transcribes against them.
  • The spoken word highlights as playback reaches it, and the transcript breaks into
    lines at the speaker's own pauses.
  • Confidence is rendered, not hidden — a word the recognizer doubted looks doubted.
  • Marker transcripts export as WebVTT subtitles.

Agents

  • snitt_auto_deep_trim, snitt crop, pause/resume, and screenshot-the-recording over
    both MCP and the CLI.
  • snitt setup registers the MCP server with agent hosts.
  • Snitt starts on demand when a client finds it closed.
  • A client can report input the OS never saw — an agent's synthetic keystrokes and
    clicks land in the event log as content-free beats, and clicks can be drawn on the
    exported video.
  • Agent-initiated recordings disclose themselves in the UI.

Capture and export

  • Pause and resume a recording, from the menu bar or over the agent surface; a
    paused recording looks distinctly paused.
  • Microphone recording from the GUI, with a warning when your speakers will bleed
    into the mic.
  • A configurable save destination.
  • Customizable hotkeys for record and marker.
  • Export gained a resolution knob and a pre-flight menu that prices every option
    before you commit to one.
  • .snitt bundles get a Finder icon drawn from the recording itself.

The project

  • Licensed MPL-2.0, with a contributor agreement — file-level copyleft, so a
    commercial competitor cannot take the code closed, and GPL-compatible.
  • A README, a spec conformance pass, and CI.

Notable fixes

  • Clicking a transcript word highlighted the word before it — intermittently. The
    seek target quantizes to 1/600s, landing up to 0.8ms before the word's start, so
    the previous word won the lookup whenever a word's start time rounded down.
  • The Settings window was released out from under itself — a use-after-free that
    crashed shipped v0.1.0 when you toggled "Log input events".
  • Timeline gestures were interpreted on the wrong axis after the view moved to
    output time.
  • Transcription only covered the tail of a recording; it now runs per utterance.
  • Silence detection measures against the 90th percentile, not the max, so one loud
    moment no longer makes a quiet recording read as busy.
  • snitt trim discarded existing cuts instead of preserving them.
  • Adjusting gain no longer resets the playhead to the start.
  • events.json now guards its schemaVersion, like edit.json.

Upgrading

edit.json and events.json from v0.1.0 open unchanged — there is a pinned test
against a real captured v0.1.0 bundle, including the read-then-save path.

Existing installs with automatic checks enabled will be offered this build by Sparkle.
Updates are verified three ways before they install: TLS to github.com, the Developer ID
signature, and an EdDSA signature over the archive.