Skip to content

Transitions, colour, speed and keyframes - #7

Merged
calvin-archastro merged 2 commits into
mainfrom
tier-one
Oct 22, 2026
Merged

calvin-archastro merged 2 commits into
mainfrom
tier-one

Conversation

@calvin-archastro

Copy link
Copy Markdown
Contributor

Tier one of effects. Preview and export read the same plan (compose.rs), so what plays is what exports.

Transitions. Dissolve, dip to black or white, wipe and push in four directions, and zoom.

  • A transition belongs to the clip coming in. It is centred on the cut, and frames hold still past either clip's ends.
  • With nothing before it, the clip comes in over what is beneath.
  • Sound crossfades under a transition with quarter-sine curves; a dip fades the sound out and back in.
  • The timeline shows a tab on each cut; ⇧⌘T adds a dissolve at the nearest cut.

Colour. Ten looks (warm, cool, vivid, muted, faded, film, teal & orange, black & white, noir), plus exposure, contrast, saturation, warmth and tint. "Use on every clip" applies one grade to the whole movie.

Speed. 0.1× to 16×, playing backwards, and freeze frame (⌥F).

  • A sped-up clip gets shorter and later clips on its track move up to match. Speed changes land on whole frames.
  • Sound keeps its pitch, in preview as well as export.
  • Reversed clips are reversed in pieces before the export runs, so memory stays flat: a 2-minute 1080p clip peaks at 0.75 GB instead of 11.9 GB.

Keyframes. Position, size and opacity, each with five eases. The ◆ buttons, slider changes and stage drags all key at the playhead, and the inspector steps from one keyframe to the next.

Bug fixed along the way: moving pictures smeared their edge pixels across the canvas in export. ffmpeg's perspective filter fills everything outside the picture with its edges; a 2 px clear border fixes it. This affected zoom-out, slide and pop since #6.

For Claude: new splice ctl commands transition, speed, freeze and keyframe, plus look --grade/--exposure/… [--all]. The skill and README are updated.

Adversarial review: fixed every finding (1 P0, 5 P1, 8 P2):

  • reverse export memory
  • held frames past a picture's end
  • reversed picture drifting from its sound when a file's audio runs longer
  • dissolve pop into clips that don't fill the frame
  • dips from nothing covering the whole frame
  • freeze placement after a speed change
  • wipe seam
  • reversed preview one frame late
  • the per-frame opacity command line growing with clip length
  • ctl look on keyframed values, and grading titles
  • keyframe buttons when the playhead is outside the clip
  • the transition length shown after trims
  • sound under transitions

Tests: five new ffmpeg render tests drive real movies through the plans. They measure frames and loudness for:

  • speed, reverse and freeze
  • all 12 transitions, plus a mid-push frame, a dip at the cut and a dissolve
  • stills and range exports inside transitions
  • keyframed opacity and scale
  • black and white
  • files whose sound outlasts their picture
  • covers and picture-in-picture dips
  • sound crossfades

🤖 Generated with Claude Code

calvin-archastro and others added 2 commits October 22, 2026 12:32
Tier one of effects, each shared by the viewer and export:

- Transitions at cuts: dissolve, dip to black or white, wipes and pushes
  four ways, and zoom, centred on the cut with frames held past either
  clip's ends. Sound crossfades across them (dips fade out and in).
- Colour: ready-made looks plus exposure, contrast, saturation, warmth and
  tint, run as decoder filters so preview and export match.
- Speed: 0.1x to 16x, backwards, and freeze frames. Speed keeps the stretch
  of source and ripples the track; sound keeps its pitch. Reversed clips
  export in pieces made beforehand, so memory stays flat.
- Keyframes for position, size and opacity with five eases; the stage and
  sliders key at the playhead.

compose.rs works out what is drawn when; export and the stage both read it.
Also fixes moving pictures smearing their edges across the canvas in
export (perspective fills outside the picture with edge pixels).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@calvin-archastro
calvin-archastro merged commit 5498cec into main Oct 22, 2026
6 checks passed
@calvin-archastro
calvin-archastro deleted the tier-one branch October 22, 2026 20:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant