← Files PicsartARCHIVED FILE

skills/film-scenes/references/SEAMS.md

19.2 KB · Oct 10, 2026 · 18:02 UTC

↓ Download file

See the change to this file →

# Seams — cuts inside a video, and the join between two videos

Every boundary in the cut list is one of two things. An **internal cut** sits
inside one video (`../SKILL.md`, *The unit of generation is the run*): one
generation makes both halves, so the cut is written into two consecutive shot
blocks of one prompt and the model — measured, 2026-09-03 — honours it. A
**video edge** is where two generations meet: nothing the model did on one
side knows about the other. Since 2026-09-09 the edge is joined the handbook's
way — **the camera changes, the action carries** — and the story decides where
scenes change; the edge no longer does. A film that fits one video has no
edges at all.

**For existing clips, diagnose before applying this planning recipe.** Read
`../../film-edit/references/JOIN-REPAIR.md` when the user asks to improve a join.
It governs repair choice and focused comparisons: a missing arrival or reaction
is a story gap, not something an angle change alone necessarily fixes.

## Internal cuts — the grammar goes in the shot blocks

**A cut rule is never a statement about one shot.** It says how shot A's last
second meets shot B's first second, and both halves are written into the two
shot blocks as a pair: the end of A's action, the start of B's. In live action
the matching frames exist because both shots came off one set; here they exist
because one generation made both, and the pair of blocks is what tells it to.

| Rule | Shot A's last second | Shot B's first second |
|---|---|---|
| **Match on action** | ends **mid-movement**, never at rest — "he starts turning his head" | "his head is **already** turning", picked up a beat *earlier* than A stopped. The overlap is the rule: B resuming from the identical pose reads as a skip |
| **Eyeline** | "looks off frame-**right**, out of frame" | the thing is on frame-**left**. Opposite sides, always — look right and place it right and it reads as being behind him. Eyeline height carries too: looking down means it is lower |
| **Screen direction** | "walks left to right, exits **right**" | "enters from the **left**, still moving right". A reversal reads as having turned around; when a reversal is real, put a shot moving toward or away from camera between |
| **Motivation** | ends on the **cause** — a knock, a name spoken, someone entering frame | opens on the **answer** — the door, the face that heard it |

**Three silent checks, read off the shot list before anything generates.**
Nothing is written into a block for them and nothing is recorded; a failure is
fixed on the card.

- **Two shots of the same subject in a row are two shot sizes apart** — WS→MS
  yes, MS→MCU no — or the cut reads as a stutter. (The classical form is ≥30°
  of camera movement around the subject; the card records no horizontal angle,
  so the size step is the half that can be checked.)
- **Eyelines agree** wherever a look answers a thing: opposite sides of frame.
- **Screen direction holds** inside the scene, shot to shot.

**Continuity is supported, not guaranteed.** Inside a video, one generation
authors both sides; still check the delivered frames. Across an edge use
**the same numbered reference images in
both calls**, in the same order, plus the geography line wherever a place
recurs. Do not restate it per boundary.

**Across a line of dialogue, glue the exchange — inside a video only.** The
block after a line opens with that line's *tail* on the right lips, so the
actor answers the right thing in the right tone; emotion does not switch off at
a cut, so after a heavy beat the next block starts with the residue — breath
still uneven, hands not yet steady. Do not split a generated line across separate
generations. At the edit, intact recorded speech may lead or trail the picture
as a J/L cut when lip-sync, speaker visibility and story meaning permit.

**Three habits make the internal cuts invisible:**

1. **The scene picture opens the video.** The first shot opens on the approved
   scene picture (`../SKILL.md` step 3), labelled `START FRAME` in
   `imageUrls` — the `startFrame` *field* would lock the references out; the
   role in words does not (user-verified 2026-09-03). The model photographs who
   stands where and holds it through every cut.
2. **One geography line, identical in every prompt of the scene**: who is
   left, who is right, what is behind them, and the side of the room the
   camera never crosses. The model does not carry the previous cut's geometry
   unless told, even inside one generation.
3. **Silence after every spoken line** — the handbook's sentence, pasted by
   the compiler after each block's dialogue. The cut ends on a quiet beat,
   never on the word; without it the model fills the cut's end with invented
   sound.

Hard cut is the only join inside a video. A dissolve or a whip between coverage
smears what the blocks paid for.

## The video edge — the handbook's join (2026-09-09)

**Where the edge falls.** *"Seedance 2.5 can now generate up to 30 seconds, so
only split the scene when it actually makes sense."* The story is written as a
story; the videos are its 30-second pieces, and the edge falls where the
ceiling falls. It is moved to the nearest moment where something is *moving* —
a turn, a step, a reach — never to a rest, and never dragged to a scene change:
a scene change at every edge was the rule until 2026-09-08 and it made films
jump between places for no story reason. Two adjacent videos that fit as one
are one.

**Three things help conceal the seam** — not a guarantee; the handbook's words, and all three
go into the two shot blocks either side of the edge:

1. **Different angle.** *"Never medium shot into the same medium shot."* *"If
   the previous generation ended on a wide shot, do not open the next one on a
   wide shot. Open on a close up, side angle, over-the-shoulder, high angle, or
   extreme close up."* *"It does not matter which angle you choose, as long as
   it is clearly different from the one before it."*
2. **A distractor at the seam.** *"An extreme close up or a detail shot breaks
   the eye, so any small difference between the two generations does not
   register."* The next video's first shot is a hand, an object, a face filling
   the frame.
3. **Continuous action.** *"The previous clip ends mid-movement, the next clip
   picks that same movement up from the new angle. The motion carries, the
   framing distracts."*

**The angle change is a new framing, not a travelling move across the join
(2026-09-09).** "Different angle" means video B *starts* somewhere else — a
close-up, an OTS, a low angle — with its own move once it is there. It does not
mean one continuous camera move that begins in A and lands in B: the only direct
attempt at that in the course reading was a **negative** result, *"having that
camera movement up or around is seemingly really difficult"*, several
generations spent, and what finally worked was a much simpler prompt. Ask for a
new place to stand, not a move that spans two generations.

So the last shot block of video A ends with one line — *ends in the middle of
the movement* — and the first shot block of video B carries one line — *picks
that movement up from this new angle*. That is the whole record of the join;
nothing else is filed — the video plan (`../../film-development/SKILL.md`, Stage 1
step 5) named it in one sentence, and the two blocks carry it. Nothing about
the join is written into video B's prompt as history: the model never sees
video A, so the prompt says what is in B's first frame now, never "continuing
from" (`PROMPT-BLOCKS.md`, *Language laws*, first law).

**Both videos get the same pictures — but not the same OPENING picture.** The
same faces and the same scene pictures, in the same order. What differs is which
anything is labelled `START FRAME`: video A opens on the scene picture, and
video B carries **no `START FRAME` at all** — its opening angle comes from its
own block's words, against the same identity views, wide and map. A reference image is a
contract about framing, not just about content — course evidence, 2026-09-09:
handed a whole scene image, the model came back with *"pretty much the exact
same shot. It feels like I'm watching the same shot"*, and in an interpolation
the end frame reproduced the start frame until the prompt forced the angle apart.
So handing video B the still video A opened on asks for the angle change in
words while the pixels ask for A's framing, and the pixels win. No frame is
copied from one video into the next, so every video of the film dispatches
together. This is a deviation from the
handbook's *"Use the best frame from a previous generation as the next Start
Frame"* as a routine habit, chosen 2026-09-09: a copied frame makes the next
video wait for the one before it, and the angle change hides the seam without
it.

**The angle change is not a preference, it is the order of precedence
(2026-09-09, after a sequential run took a frame it did not need).** Before any
video that follows another, the two paths are tried in this order and the first
one that works is the one used:

1. **Change the angle.** Can video B open on a clearly different angle or shot
   size than A ended on? For everything but the two cases below the answer is
   yes, and that is the join — both videos dispatch together, carrying the same
   pictures.
2. **Carry a frame.** Only when step 1 is genuinely impossible, by one of the two
   tests below.

**A frame is taken only when a sentence can be said out loud, before dispatch,
naming what is in A's pixels and in none of the approved pictures.** *"The room
is wrecked and dust is on her face; no approved picture shows either."* If that
sentence names nothing — if it comes out as *"it continues the action"* or *"it
is the next video in the scene"* — **there is no exception**: continuing the
action is what the carried movement and the angle change already do, and every
video that follows another continues something. The two tests, and there are no
others:

- **The place or the people changed inside video A** (the paragraph below).
- **The scene is written as one unbroken shot**, so there is no cut to hide and
  the angle cannot change (the paragraph after it).

Say the sentence to the user with the trade-off in the same breath: video B now
waits for A, regenerating A stales the frame, and the frame carries only the
people visible in it — everyone else needs their own pictures beside it.

**What a carried frame does NOT carry, measured by someone else and worth
believing (course evidence, 2026-09-09).** On this exact technique — a frame
screenshotted off the end of a Seedance clip, the continuation generated from
it — the geometry joined perfectly and *the light did not*: **"it turns to night
for some reason."** A frame is pixels of one moment, not a lighting rig, so the
continuation re-decides the light. Two more, from the same reading: the lighting
on a person carried into a new shot has to be re-stated in words (*"change the
lighting on the character's clothing to match the scene rather than just plonk
him straight in the shot"*), and anything outside the frame is invented fresh
(*"I didn't promise what I want his costume to be like because you don't see
it"*). There is also a straight cost to using one at all: **"if you leave more
up to the model, sometimes you get a more realistic generation in movement,
background, et cetera, than if you upload an image."**

So when the exception does apply, video B's prompt carries the light and the
time of day explicitly — the same words video A had — because the frame will not
carry them, and the first thing to check on the take is whether the light
matches, not whether the action lines up.

**The first test — the earlier video changed the place or the people.**
*"When a generation changes the scene, the screenshot from that generation
becomes the base image of the next one."* A wrecked room, dust on a face, torn
clothes exist only in that video's frames, and the approved scene pictures now
*"fight the screenshot"*. Then, and only then, video B waits for video A's
accepted take, and its pictures of that place are frames from video A
(`../SKILL.md` step 6): *"One frame is one camera angle. It carries the state
of the scene, not the geography of the room."* — so one frame for every angle
video B will show; *"if any angle has no screenshot, either hold the previous
generation on that angle for a beat so a usable frame exists, or you are not
ready to continue."* *"The screenshots replace the original stills. Do not
attach both."* Say out loud that regenerating video A stales those frames.
The frames travel in `imageUrls` — the one video B opens on as picture 1,
`START FRAME` — and the identity and wardrobe views of everyone in video B
ride beside them: a frame shows only who is in it, and the `startFrame` field would
shut the rest out (rule 7, `../../film/SKILL.md`).

**A candidate that is not doctrine yet: pass the last half-second of VIDEO, not a
frame (2026-09-09).** `seedance-2.5` declares `videoUrls` beside `imageUrls`, and
reference media fields are exclusive only with `startFrame`/`endFrame`, never with
each other — so a short tail clip of video A can ride *with* everyone's identity
views. Two independent sources point at it: the vendor documents
reference-to-video's `video_urls` as *"used for motion style, editing, and
extension"*, and practitioners report that *"a single frame can't show what motion
was happening in the previous video … feed it the last half second of video and it
will continue much more seamlessly."* It is the one configuration that answers the
dead stop, the colour re-decide and the missing-people problem at once. **Nobody
here has run it.** Preflight accepts and prices it; until one take exists, it is an
experiment to offer the user, not a path to take silently
(`../../../../../research/seams/ANALYSIS.md`).

**The second test — a scene written as one unbroken shot.** *"In a continuous
shot you cannot change the angle at the seam, because the angle change is the
cut. There you hide the seam by matching the movement instead."* Then video B
opens on the frame exported from video A's last beat, and waits for it. That
frame is picture 1 in `imageUrls`, labelled `START FRAME`, beside the faces —
never the `startFrame` field.

**First+last frame will not bridge a real angle change.** Kling's own
documentation, which is the clearest vendor statement anyone has on this: *"Choose
two similar images with the same theme for smoother transitions … Large differences
may trigger a shot switch"*, and *"significant differences may cause a lens
switch."* Two dissimilar endpoints make the model insert **its own cut** somewhere
in the middle, which is neither the join that was designed nor a join anyone can
place. Interpolation is for a move inside one shot, not for an edge.

**A bridge clip needs a story purpose and two checked boundaries.** Offer one
when inspection shows missing connective action or a reaction that existing
coverage cannot supply, not as a generic seam softener. It may be a new insert,
not necessarily an extension or a re-roll of either accepted clip. Follow
`../../film-edit/references/JOIN-REPAIR.md` for agreement, reference selection,
credit approval and A → insert → B review. The normal identity and voice rules
apply; the 2026-09-08 bridge added wardrobe jumps on both joins.

**An extend bridge that sees both sides uses excerpts, not whole runs
(2026-09-12).** Read the extend sibling's live params, then follow the input
gate in `../SKILL.md`, *Extend input gate — probe before preflight*. On the
measured Seedance 2.5 r2v path, each reference video must be at least 1.8s and
their combined duration must not exceed 30.2s; preflight currently misses both
provider checks. Probe first. Feed the outgoing take (or its shortest accepted
motion-bearing tail) plus a deterministic 2.0s opening excerpt of the incoming
take. The prompt identifies the first as the footage to continue and the second
as the target for identity, geography and motion. End the bridge while the
incoming action is still moving, then trim the bridge and incoming head on the
review board to one hard cut. Do not duplicate a static target frame and do not
crossfade it.

**The join is finished on the timeline, not in the prompt (2026-09-09).** Expect
to trim **both** sides of every edge: the outgoing video's tail and the incoming
video's head. This is not a defect being patched — it is how the join is made,
and it is what the per-film `handles` switch (`../SKILL.md`, the shot's `sec`
plus a handle at each end) exists to pay for. Course evidence: on a tool whose
extend is *designed* to be seamless, the honest report was still *"there's a
slight overlap … so if I go back to here, and I drag that to there. Now if I
play this, now it's continuous"*, and the working habit throughout is *"I won't
use that last bit of the shot … just up to before he turns his head."* A seam
that needs a trim is normal; a seam that needs a regeneration is the exception,
and the review board is where the difference is decided. Show full-cut context
or a focused join comparison under `JOIN-REPAIR.md`, never the new bridge alone.

**No crossfade and no fade to black** at an edge. A film does not go dark every
thirty seconds; a black frame at the end of a take is a defect, trimmed on the
review board.

**Audio at an edge.** Each video is mastered on its own, so level, EQ and room
tone step at the edge. The finishing bed hides it, and the edit may J-cut the
incoming ambience under the outgoing tail silence. A video ends inside a
line's tail silence or on a held movement — never mid-word.

## No two adjacent cuts open on the same still

**A frame image outranks the words.** An identical still labelled as the frame
of two consecutive cuts — or as the `START FRAME` of two consecutive videos —
makes the second open back on that still's composition, whatever its block says
about where the action has moved since: the pixels are a contract and the prose
is a request. The result reads as a glitch: the film appears to jump back to a
frame it already played.

Before anything generates, check that no two adjacent cuts carry the same
still. Where two do, the second takes **no frame at all** — the numbered
identity references plus the block's blocking line, which still works. A still
is never authored just to fill that slot (2026-09-17); the only frame that can
legitimately land there is one exported from an already-approved run
(`../SKILL.md` step 6).

Reusing one still across two *non-adjacent* cuts is fine and often right — a
returning angle is a returning angle. The failure is only at a boundary.

## Special cases

- **Complex action opens mid-action.** A block that must break the door starts
  "ALREADY mid-swing, the door ALREADY cracking" — the approach to the door is
  its own block. Action buried mid-timing is where clips stall and shuffle.
- **A shot that needs more footage** is not chained by hand: it is an extend
  call on the model's extend sibling (`../SKILL.md` step 5), which continues
  the clip itself.

## What we cannot check

The 30° form of the angle rule needs to know which *side* of the subject the
camera is on, and the shot card records size and height but no horizontal
angle — so nothing can measure it. The size-step check catches the ugly cases
without it. The field is a request to the board's owners, filed in
`../../../docs/PLATFORM-ASKS.md`.

SHA-256: a8fd6305c1f2993ee0bb918f029e1facf305950a66c24babdac470b20a47026e