Skip to content

Storyboard panels: more framings and a separate camera angle - #14219

Merged
atomantic merged 2 commits into
mainfrom
claude/project-thread-wyek2j
Oct 30, 2026
Merged

atomantic merged 2 commits into
mainfrom
claude/project-thread-wyek2j

Conversation

@atomantic

@atomantic atomantic commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

What

Follow-up to #14209.

Framings. The set skipped standard steps between wide and close and folded the insert into the extreme close-up. Adds full (head to toe), medium-wide (knees up, "cowboy"), medium-close (chest up) and insert (object detail) to SHOT_TYPES, each with a diagram. Labels: Close → Close-up, "Extreme close / insert" → Extreme close-up. Wide now draws the setting with a small figure. Aliases updated (full shot → full, mcu → medium-close, cowboy/mws → medium-wide, insert/detail → insert).

Camera angle, as its own panel field. New SHOT_ANGLES (eye-level, high, low, birds-eye, worms-eye, dutch) and a panel angle (validation, sanitizer, PANEL_FIELDS). Picked from side-view diagrams showing where the camera sits (the Dutch tilt is a tilted frame). The drawing prompt gets an Angle: … line next to Framing: … (storyboardRecipe.js), and the Video prompt names it (storyboardVideo.js).

Picker. FramingPicker/FramingDiagram become the shared ShotDiagramPicker/ShotDiagram, used for both rows in PanelDrawer. The "Not set" tile is gone; tapping the picked tile again clears it.

Compatibility

A peer on the old vocabulary would null the new values (or drop angle) on re-sanitize and LWW that back, so storyboards goes 9 → 10 and pipelineIssues 4 → 5 (the pipeline shot editor shares SHOT_TYPES).

Tests

  • ShotDiagramPicker.test.jsx: every framing and angle the server accepts has a label, hint and drawn diagram; a second tap clears.
  • make.test.js: a panel created with angle: 'low' through the route sends Angle: low angle looking up. in the drawing prompt.
  • shotGrammar.test.js: new aliases.

Server storyboards/shotGrammar/schemaVersions/musicVideo suites and client storyboards + lib suites pass; biome clean. Local pregate can't run in this container (Node 22.22.0 below the repo minimum).

The framing set skipped standard steps between wide and close, and folded
the insert into the extreme close-up. Adds Full (head to toe), Medium wide /
cowboy (knees up), Medium close-up (chest up) and Insert (an object detail),
each with its own diagram, and relabels Close as Close-up and the extreme
close-up as the face detail it now is. The picker drops its Not set tile:
tapping the picked framing again clears it.

Older peers would null the new values, so storyboards sync goes to v10 and
pipeline issues to v5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012khEkDNrF7uL9f4Vu5TBMh
@atomantic
atomantic requested a review from wrenchwren October 30, 2026 21:27
A panel's camera angle (eye level, high, low, bird's eye, worm's eye, Dutch
tilt) is now its own setting, separate from the framing, picked from side-view
diagrams that show where the camera sits. The drawing prompt gets an Angle
line and the Video prompt names the angle. The framing picker becomes the
shared ShotDiagramPicker. Storyboards sync v10 covers the new field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012khEkDNrF7uL9f4Vu5TBMh
@atomantic
atomantic force-pushed the claude/project-thread-wyek2j branch from abbfb46 to 3c4d31f Compare October 30, 2026 21:46
@atomantic atomantic changed the title Storyboard framing: add full, medium wide, medium close-up and insert Storyboard panels: more framings and a separate camera angle Oct 30, 2026
@atomantic
atomantic marked this pull request as ready for review October 30, 2026 21:55
@atomantic
atomantic merged commit 3833310 into main Oct 30, 2026
18 checks passed
@atomantic
atomantic deleted the claude/project-thread-wyek2j branch October 30, 2026 21:55
atomantic added a commit that referenced this pull request Oct 30, 2026
#14231)

## Summary
- The Framing and Angle pickers (#14219) now say how a panel is shot.
The free-text **Camera move** field worked against them. Boards imported
from a music video carried text like "a loose, natural wide shot" there,
and the drawing prompt sent it as `Camera: …` no matter which framing
was picked.
- The panel editor no longer shows the field. `textNodeValue` no longer
adds a `Camera:` line to the drawing prompt.
- The stored `camera` value is kept for the animatic and video handoff
(`toVideo`), so there is no schema change.

## Test plan
- make.test: the drawn prompt has the framing and angle lines and no
stored camera move.
- StoryboardDetail.test: the music video panel dialog has no Camera move
field.
- Pregate passed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
atomantic added a commit that referenced this pull request Oct 30, 2026
## What

Image models drift to a 3/4 view when a panel should be head-on or from
behind. A storyboard panel now has a third shot setting next to Framing
and Angle (#14209, #14219): **Subject to camera**, `facing` ∈ `front`,
`three-quarter`, `profile`, `three-quarter-back`, `back` (`SHOT_FACINGS`
in `server/lib/shotGrammar.js`).

- Picked in `PanelDrawer` with the shared `ShotDiagramPicker`;
`ShotDiagram` draws each as a top view (shoulders, head, nose) turned
away from a camera at the bottom.
- Drawing prompt (`textNodeValue` in `storyboardRecipe.js`) gets a
`Subject: …` line that names the view and what the camera does and
doesn't see, e.g. front: "front view, the subject faces the camera
head-on, body square to the lens, both shoulders and the whole face
toward the viewer, not turned to the side"; back: "…only their back and
the back of the head visible, no face". The words are visible in the
panel's sent prompt like the Framing/Angle lines.
- Video prompt (`storyboardVideo.js`) names it.
- Validation, sanitizer, `PANEL_FIELDS`; storyboards sync 10 → 11 (a v10
peer would drop the field).

Merged main after the Camera line left `textNodeValue`; the Subject line
now follows Angle.

## Tests

- `make.test.js`: a panel created through the route with `facing:
'back'` sends the `Subject: rear view …` line in the drawing prompt.
- `ShotDiagramPicker.test.jsx`: every facing has a label, hint and
diagram.

Server storyboards/shotGrammar/schemaVersions suites and client
storyboards + lib suites pass; biome clean. Local pregate can't run here
(container Node 22.22.0 below the repo minimum).

Co-authored-by: Claude <noreply@anthropic.com>
atomantic added a commit that referenced this pull request Oct 31, 2026
…4297)

## What

Follow-up to #14209 / #14219 / #14232.

- **Compact pickers.** `ShotDiagramPicker` tiles are half size:
`grid-cols-4 sm:grid-cols-6` (the responsive-grid guard rejects a frozen
six-column grid), tighter padding, 10px labels. Long labels shortened so
they fit: "Wide / establishing" → Wide, "Medium wide / cowboy" → Medium
wide (the hints keep "Establishing" and "cowboy shot").
- **Composition.** New panel field `composition` ∈ `center`,
`left-third`, `right-third`, `cut-left`, `cut-right`, `low-in-frame`
(`SHOT_COMPOSITIONS`). `ShotDiagram` draws a waist-up figure placed on a
rule-of-thirds grid. Drawing prompt (`textNodeValue`) gets a
`Composition: …` line, e.g. cut-left: "the subject at the left edge of
the frame, partly cut off by the edge, the rest of the frame open". The
Video prompt names it too. Validation, sanitizer, `PANEL_FIELDS`;
storyboards sync 12 → 13.

`ShotDiagram` looks every kind up in one table, so the vocabularies must
not share a value (a first draft's composition `low` shadowed the angle
`low`). `ShotDiagramPicker.test.jsx` now asserts they're disjoint.

## Tests

- `make.test.js`: a panel created with `composition: 'cut-left'` sends
the Composition line in the drawing prompt.
- `ShotDiagramPicker.test.jsx`: every composition has a label, hint and
diagram; vocabularies are disjoint.

Server storyboards/shotGrammar/schemaVersions and client storyboards +
lib suites pass; biome clean. Local pregate can't run here (container
Node 22.22.0 below the repo minimum).

---------

Co-authored-by: Claude <noreply@anthropic.com>
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.

2 participants