creator-editing-studio 1.2.4 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/template/CLAUDE.md +86 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "creator-editing-studio",
3
- "version": "1.2.4",
3
+ "version": "1.2.8",
4
4
  "description": "Scaffolds a Creator Editing OS studio — components, scripts and rules for editing video from a plain-English brief.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -48,6 +48,92 @@ Everything else in `src/design/` is the system and should be left alone. If a vi
48
48
  a colour or a size that is not in tokens.ts, the answer is to add it to tokens.ts, never to
49
49
  type it into a component.
50
50
 
51
+ ## The order of work — the plan is approved before anything is cut
52
+
53
+ **Never render an edit the owner has not agreed to in writing first.** A render is the last
54
+ step, not the first. Rebuilding a rejected edit costs more than every minute the plan takes.
55
+
56
+ Every edit runs in this order. Do not skip a step, and do not collapse two into one.
57
+
58
+ **1. Watch and probe.** `npm run prep -- <name>`. Get the real duration, fps and resolution
59
+ of every clip. Never assume them.
60
+
61
+ **2. Transcribe with word-level timings.** The transcript is the truth — not the script, not
62
+ what the owner remembers saying. Every beat you place later is anchored to a word index, and
63
+ every word index comes from this file.
64
+
65
+ **3. Read the owner's style first, in this order:** `STYLE.md` §9 Rejected, then §8 Approved,
66
+ then `references/references.md` and the contact sheets in `work/refs/`. Rejected comes first
67
+ because removing options is faster than adding them. A reference beats a default wherever
68
+ they disagree.
69
+
70
+ **4. Write the plan, and hand it over.** Two things. Neither is a markdown file for them to
71
+ open — a plan only gets corrected if it is in front of them.
72
+
73
+ **The plan goes in the reply, as a table**, one row per beat:
74
+
75
+ | # | In | Out | Trigger word (frame) | What is on screen | Audio under it |
76
+ |---|---|---|---|---|---|
77
+
78
+ Followed by the total runtime, the caption script, and a short list of what you chose not to do
79
+ and why. In the reply, not attached.
80
+
81
+ **The motion sheet is a PNG of real rendered frames** — one tile per beat, numbered, each
82
+ labelled with its timecode, the words that trigger it, and the approved beat it comes from. Build
83
+ the graphics, render one still per beat with `npm run stills`, and lay them out as a contact
84
+ sheet composition. A graphic that cannot name its beat is not approved and does not go on the
85
+ sheet. Describing motion in prose does not work: they cannot see it, so they cannot correct it.
86
+ They point at a tile number and say what to change.
87
+
88
+ Then stop and ask. Say plainly: *here is the plan, change anything that is off, say go ahead
89
+ and I will cut it.* **Wait for a yes.** "Go ahead", "approved", "ship it" is a yes. Silence is
90
+ not, and neither is a reply about something else.
91
+
92
+ **5. Only then cut, render, and verify.** Verification is not optional and is not a claim —
93
+ see below.
94
+
95
+ If the owner says "just edit it" and skips the plan, write the plan anyway, in one short
96
+ message, and cut immediately after. It costs thirty seconds and it is the only record of
97
+ what was intended.
98
+
99
+ ## Verify the render before you call it done
100
+
101
+ You have not seen the video. The timeline in your head is not evidence. Before you say an
102
+ edit is finished, pull real frames out of the **rendered file** and look at them:
103
+
104
+ ```
105
+ npm run stills -- --file out/<name>.mp4 --at 2,5,8,11,14,17,20
106
+ ```
107
+
108
+ Put a still on **both sides of every cut** in the plan, and on any beat you are unsure of.
109
+ Then say what you saw. Never write "this is fixed" about something you have not looked at.
110
+
111
+ ## Faults that keep recurring — check for these every time
112
+
113
+ **Slivers of footage between graphics.** When two full-screen graphics run back to back, the
114
+ second must start on the exact frame the first ends — `out` of one *is* `in` of the next.
115
+ A gap of even one frame flashes the talking head for 30ms and reads as a broken edit, not a
116
+ cut. Assert it in code: walk the beat list and fail if any `in` is greater than the previous
117
+ `out`.
118
+
119
+ **A caption word left alone on screen.** A word-by-word caption holds until the next word
120
+ arrives. If the speaker pauses for a second mid-phrase, one word sits there alone and the
121
+ viewer reads it as a stutter or a repeat. Cap any single word's hold at about 0.5s — after
122
+ that, show the rest of the line greyed ahead, or drop the line and start the next one.
123
+
124
+ **A graphic that renders invisible.** `zIndex` on one child creates a stacking context and can
125
+ hide every sibling painted after it. Prefer paint order to `zIndex`. If a beat is in the plan
126
+ and not in the stills, it did not render — find out why before shipping.
127
+
128
+ **A nested video restarting.** Inside a `Sequence`, `useCurrentFrame()` is local. An
129
+ `OffthreadVideo` placed in one starts from its own frame 0 and plays its own audio over the
130
+ live line. Pass an explicit `startFrom`, and mute it unless its sound is wanted.
131
+
132
+ **Repetition the owner can hear but you cannot.** If the owner says a line repeats, transcribe
133
+ the rendered output over that exact window before arguing. If the audio is clean, the repeat
134
+ is visual — a held caption, a reused graphic, or a duplicated framing — and that is still a
135
+ real fault worth fixing, not a misunderstanding to explain away.
136
+
51
137
  ## Non-negotiables
52
138
 
53
139
  1. **No magic numbers.** Durations, curves, springs, staggers, blur come from `src/design/motion.ts`.