Repository navigation
Composition: layers, bakes and steps on a shot (#275) - #276
Merged
Merged
Conversation
A shot is a composition: drawing and adjustment layers with an order (below or above the footage), a range of steps and a space (frame or photo). The Studio bakes one image per step; the phone shows bakes. - vocab layers.ts: types, strict validation, layersAt, bakeHash; steps no longer reference overlays - migration 0030: layers, step_bakes, timeline_clips.step_id; copies overlays into layers, gives overlay-only shots stored steps, points clips at steps (tested on a real SQLite) - Worker: layer routes, bakes, shots embed layers and bakes, clips show a step, promotion of clip layers, extract and merge carry layers; overlay routes removed - route tests, tenancy map, API and data-model docs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Compose stage merges the old Compose and Sequence stages: the steps in the foot, the selected step composed live on the stage, the layer stack top to bottom with the footage in it, drawing on the selected layer, ranges (every step, this step, chosen steps), frame or photo anchoring, adjustment looks; sketches autosave like everything else - live composition: adjustment layers as backdrop-filter, drawing layers as SVG in photo or frame space; strips and cards show a step's bake, with a mark while it is stale - the bakery bakes stale steps in the background from the shell - timeline: clips show a step (its layers) plus their own layers, edited inline with the same layer editor; Make a sequence keeps the steps it can and moves clip layers onto the new steps Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A step with layers shows its fresh bake (the offline copy first), else the photo with a "Layers not baked yet" tag. Offline days and projects download the fresh bakes; the compose strip and viewer keep sketches only (the layers travel in the bakes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #275
What changed
A shot is now a composition: steps (a photo plus an optional framing) and a stack of layers over and under the footage.
layers(drawing or adjustment, position relative to the footage, a range of stored steps or every step, frame or photo space) andstep_bakes. Timeline clips point at a step (step_id). Overlays are copied into layers; theoverlaystable stays, unread.layersandbakes, timelines embed their clips' own layers. Merge, extract, promote and the bin carry layers along.docs/features/composition.md(replacessequences.md), compose, timeline, api, data model and known issues updated.Decisions
As posted on #275: frame-space layers stretch to each step's frame; per-shape masks only; old overlay renders are not reused as bakes; clips can't hide shot layers. One PR with a commit per phase, since phase PRs couldn't each pass CI.
Checked
make checkgreen (lint, typecheck, vocab, route and tenancy tests, a unit test running 0030 on SQLite, build dry runs).Not clicked through
🤖 Generated with Claude Code