storyforge 0.4.2 → 0.4.4
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.
- package/dist/index.js +123 -36
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -96,9 +96,31 @@ TOPIC: "${args.topic}"
|
|
|
96
96
|
STYLE: ${args.style} \u2014 ${args.styleGuide}
|
|
97
97
|
TARGET LENGTH: ${minMin}-${maxMin} minutes (write to the topic's natural length \u2014 pad nothing, rush nothing).
|
|
98
98
|
|
|
99
|
-
\
|
|
99
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
100
|
+
HARD WORD-COUNT CONTRACT (this is RULE ZERO \u2014 non-negotiable)
|
|
101
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
102
|
+
|
|
103
|
+
Each chunk's narrationText MUST contain at least (durationEstimate \xD7 2.5)
|
|
104
|
+
words. That's the speech rate of a polished narrator at 150 wpm.
|
|
105
|
+
|
|
106
|
+
- 120s chunk \u2192 \u2265300 words of narration
|
|
107
|
+
- 90s chunk \u2192 \u2265225 words
|
|
108
|
+
- 60s chunk \u2192 \u2265150 words
|
|
109
|
+
- 180s chunk \u2192 \u2265450 words
|
|
110
|
+
- 30s chunk \u2192 \u226575 words
|
|
111
|
+
|
|
112
|
+
Previous generations have FAILED this contract \u2014 writing 65 words for
|
|
113
|
+
a 120s chunk (claiming 120s of speech but actually delivering ~26s).
|
|
114
|
+
Do NOT repeat that mistake. If you cannot fill the duration with
|
|
115
|
+
substantive content, REDUCE the durationEstimate. Do not pad with
|
|
116
|
+
filler \u2014 but do not lie about duration either.
|
|
117
|
+
|
|
118
|
+
Count your words before submitting each chunk. Total script word
|
|
119
|
+
count should be approximately (total duration in seconds \xD7 2.5).
|
|
120
|
+
|
|
121
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
100
122
|
RETENTION PRINCIPLES (these govern every decision you make)
|
|
101
|
-
\
|
|
123
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
102
124
|
|
|
103
125
|
1. OPEN LOOP: In the first 30 seconds, plant a question or claim that
|
|
104
126
|
feels counter-intuitive, stakes-laden, or genuinely confusing. DON'T
|
|
@@ -110,16 +132,33 @@ RETENTION PRINCIPLES (these govern every decision you make)
|
|
|
110
132
|
asking is..." \u2014 a sentence that pulls the viewer back into the core
|
|
111
133
|
question. You should have 3-5 of these naturally distributed.
|
|
112
134
|
|
|
113
|
-
3. ONE DOMINANT METAPHOR
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
135
|
+
3. ONE DOMINANT METAPHOR \u2014 TEACHING, NOT DECORATION:
|
|
136
|
+
Pick ONE concrete analogy before you start writing. Thread it
|
|
137
|
+
through every section. Every time the mechanism gets technical,
|
|
138
|
+
bend back to the metaphor to scaffold understanding.
|
|
139
|
+
|
|
140
|
+
The metaphor MUST DO WORK \u2014 it must PREDICT the mechanism, not
|
|
141
|
+
merely label it.
|
|
142
|
+
|
|
143
|
+
BAD (decoration): "Like our metaphorical chef in the kitchen,
|
|
144
|
+
KV Cache speeds things up."
|
|
145
|
+
GOOD (teaching): "If our chef can grab pre-prepped ingredients
|
|
146
|
+
without looking, what happens when fifty orders
|
|
147
|
+
come in at once? Each new order needs the same
|
|
148
|
+
lookups \u2014 but the prep is already done. That is
|
|
149
|
+
exactly what KV Cache does: it computes each
|
|
150
|
+
key-value pair once, then reuses them across
|
|
151
|
+
every subsequent token."
|
|
152
|
+
|
|
153
|
+
Banned: the word "metaphorical". The word "akin to" used more
|
|
154
|
+
than once. Phrases like "back to our chef" used as filler instead
|
|
155
|
+
of as a vehicle for predicting the next mechanism.
|
|
118
156
|
|
|
119
157
|
Pick your metaphor in a pre-planning step before you write chunk 1.
|
|
120
158
|
Good metaphor tests: (a) can a non-expert picture it in 2 seconds?
|
|
121
159
|
(b) does it survive at least 3 levels of zoom-in? (c) does it map to
|
|
122
|
-
\u22655 of the mechanism's key components?
|
|
160
|
+
\u22655 of the mechanism's key components? (d) does each section USE
|
|
161
|
+
the metaphor to advance understanding, not just nod at it?
|
|
123
162
|
|
|
124
163
|
4. SPECIFICITY BEATS SCALE: One vivid example explained deeply is
|
|
125
164
|
worth five examples listed shallowly. If you're tempted to write
|
|
@@ -131,24 +170,70 @@ RETENTION PRINCIPLES (these govern every decision you make)
|
|
|
131
170
|
- A specific number with units (dollars, ms, parameters, tokens, GB)
|
|
132
171
|
- A specific year or product version
|
|
133
172
|
- A specific event (launch, paper publication, failure)
|
|
134
|
-
If a paragraph can't satisfy one, REMOVE IT. Don't write filler.
|
|
135
173
|
|
|
174
|
+
AND each chunk's narrationText overall must contain AT LEAST 3
|
|
175
|
+
specific entities (3 named things, numbers, or years collectively).
|
|
176
|
+
Vague references like "Google Research, in 2021" without naming the
|
|
177
|
+
paper or product are NOT specific enough \u2014 name the paper, name
|
|
178
|
+
the product, name the team.
|
|
179
|
+
|
|
180
|
+
If a paragraph can't satisfy one rule, REMOVE IT. If a chunk has
|
|
181
|
+
fewer than 3 specific entities total, REWRITE IT before submitting.
|
|
182
|
+
|
|
183
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
184
|
+
CURRENCY OF FACTS (April 2026 \u2014 use the web)
|
|
185
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
186
|
+
|
|
187
|
+
Your training data has a cutoff and many model/product names you
|
|
188
|
+
remember are now stale. The current month is April 2026.
|
|
189
|
+
|
|
190
|
+
If you have access to a web_search tool, USE IT for any specific
|
|
191
|
+
model name, paper title, benchmark number, or product version you
|
|
192
|
+
plan to cite. Search before writing each section that needs current
|
|
193
|
+
facts. Examples of stale defaults to avoid:
|
|
194
|
+
|
|
195
|
+
- "GPT-4" \u2014 current OpenAI flagship is GPT-5.5 (April 2026)
|
|
196
|
+
- "Claude Sonnet 3.5" \u2014 current Anthropic models include Opus 4.7
|
|
197
|
+
- "Llama 2" \u2014 current Meta open weights are Llama 4
|
|
198
|
+
- "BERT" / "GPT-3" \u2014 fine for HISTORY references, not for "current"
|
|
199
|
+
- "studies have shown" \u2014 name the paper + year, or remove the claim
|
|
200
|
+
|
|
201
|
+
If web search is unavailable AND you cannot verify a specific current
|
|
202
|
+
name, prefer a generic descriptor over a stale specific:
|
|
203
|
+
Bad: "GPT-4 uses KV Cache to speed inference."
|
|
204
|
+
Good: "The current generation of frontier LLMs \u2014 including OpenAI's
|
|
205
|
+
flagship and Anthropic's Opus tier \u2014 relies on KV Cache to
|
|
206
|
+
speed inference."
|
|
207
|
+
|
|
208
|
+
A wrong stale name is worse than a true descriptor.
|
|
209
|
+
|
|
210
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
136
211
|
6. VARIABLE PACING: Sections must have DIFFERENT lengths. Rhythm wins
|
|
137
212
|
retention. A 300s deep-dive should be followed by a 45s breath
|
|
138
213
|
(short callback chunk) before another long section. Do NOT write
|
|
139
214
|
uniform 120s body chunks.
|
|
140
215
|
|
|
141
|
-
\
|
|
142
|
-
FORBIDDEN PHRASES (zero of these)
|
|
143
|
-
\
|
|
216
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
217
|
+
FORBIDDEN PHRASES (zero of these \u2014 patterns AND exact strings)
|
|
218
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
144
219
|
${banList}
|
|
145
220
|
|
|
146
|
-
|
|
147
|
-
|
|
221
|
+
ALSO BANNED (regardless of channel DNA):
|
|
222
|
+
- "Imagine teaching a..." / "Imagine taking..." / "Imagine a..."
|
|
223
|
+
- "Step into the kitchen of..." / "Step into the world of..."
|
|
224
|
+
- "back to our metaphorical..." / "our metaphorical X"
|
|
225
|
+
- "akin to" used more than once total
|
|
226
|
+
- "Are we prepared for..." / "What if..." as section openers
|
|
227
|
+
- Section titles that are just questions without setup
|
|
228
|
+
- "the magic of...", "the power of...", "the secret to..."
|
|
229
|
+
- "memory's power is underestimated" type abstract claims
|
|
230
|
+
|
|
231
|
+
Plus: no rhetorical questions opening sections, no "let's explore",
|
|
232
|
+
no "in this video we'll look at", no generic "welcome back" openers.
|
|
148
233
|
|
|
149
|
-
\
|
|
234
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
150
235
|
STRUCTURE (choose the format that serves THIS topic \u2014 do NOT default)
|
|
151
|
-
\
|
|
236
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
152
237
|
|
|
153
238
|
You have multiple formats available. Pick the one this topic is best
|
|
154
239
|
suited to. Do NOT default to Tesla-style "history \u2192 bet \u2192 stakes".
|
|
@@ -177,17 +262,15 @@ suited to. Do NOT default to Tesla-style "history \u2192 bet \u2192 stakes".
|
|
|
177
262
|
|
|
178
263
|
Pick ONE format. Name it in the first chunk's meta.format field.
|
|
179
264
|
|
|
180
|
-
\
|
|
265
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
181
266
|
CHUNK STRUCTURE
|
|
182
|
-
\
|
|
267
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
183
268
|
|
|
184
269
|
14-22 chunks. Vary durations by purpose:
|
|
185
270
|
|
|
186
271
|
- HOOK (1 chunk, 45-90s): plant the open loop. End with a forward-pull
|
|
187
272
|
sentence. Do NOT introduce yourself here; that's the cold-open.
|
|
188
273
|
- COLD OPEN (1 chunk, 2-5s): 1-2 sentences of channel intro.
|
|
189
|
-
Usually: "Welcome to <channel>, where we <what>. Let's go."
|
|
190
|
-
OR embedded in the hook \u2014 if so, skip this chunk entirely.
|
|
191
274
|
- BODY SECTIONS (4-8 chunks, varied 45-300s each):
|
|
192
275
|
* Long sections (180-300s) build the mechanism
|
|
193
276
|
* Short sections (45-90s) are breaths, callbacks, or reveals
|
|
@@ -202,15 +285,15 @@ CHUNK STRUCTURE
|
|
|
202
285
|
a single provocative claim (re-opens a new loop for next video).
|
|
203
286
|
- END-SCREEN (1 chunk, 8-15s).
|
|
204
287
|
|
|
205
|
-
\
|
|
288
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
206
289
|
PER-CHUNK FIELDS (output JSON \u2014 no extra commentary, no markdown)
|
|
207
|
-
\
|
|
290
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
208
291
|
|
|
209
292
|
[
|
|
210
293
|
{
|
|
211
294
|
"id": "c01-hook" | "c05-mechanism-one" | "c12-payoff" (kebab-case, semantic),
|
|
212
295
|
"title": short Title-Case phrase,
|
|
213
|
-
"narrationText": narration body, multiple paragraphs split by blank lines,
|
|
296
|
+
"narrationText": narration body, multiple paragraphs split by blank lines, MUST be \u2265(durationEstimate \xD7 2.5) words,
|
|
214
297
|
"durationEstimate": integer seconds per the chunk structure above,
|
|
215
298
|
"purpose": one of: "hook" | "cold-open" | "mechanism" | "metaphor-extension" | "mid-roll-rehook" | "example" | "payoff" | "reframe" | "cta" | "teaser" | "end",
|
|
216
299
|
"metaphor": the single video-wide metaphor you chose (string, same value on every chunk),
|
|
@@ -227,34 +310,38 @@ On chunk 1 ONLY, add a meta field:
|
|
|
227
310
|
"plannedOpenLoop": the question/claim you planted in the hook
|
|
228
311
|
"plannedPayoffChunkId": id of the chunk where the loop closes
|
|
229
312
|
|
|
230
|
-
\
|
|
313
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
231
314
|
VOICE
|
|
232
|
-
\
|
|
315
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
233
316
|
|
|
234
|
-
Conversational but authoritative.
|
|
235
|
-
|
|
236
|
-
4-word sentence after a long one.
|
|
237
|
-
"Because" can start sentences.
|
|
317
|
+
Conversational but authoritative. Speak in declarative sentences.
|
|
318
|
+
Use the second person ("you") for stakes and rhetorical pivots.
|
|
319
|
+
Mix sentence lengths \u2014 drop a 4-word sentence after a long one.
|
|
320
|
+
No exclamation marks. "And" / "But" / "Because" can start sentences.
|
|
321
|
+
Every section ends with forward pull.
|
|
238
322
|
|
|
239
|
-
STYLE
|
|
323
|
+
STYLE: ${args.style.toUpperCase()}
|
|
240
324
|
${args.styleGuide}
|
|
241
325
|
${referenceBlock}
|
|
242
326
|
|
|
243
|
-
\
|
|
244
|
-
CRITICAL CHECKLIST (review before you return)
|
|
245
|
-
\
|
|
327
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
328
|
+
CRITICAL CHECKLIST (review before you return \u2014 be honest)
|
|
329
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
330
|
+
\u25A1 Each chunk's narrationText word count \u2265 (durationEstimate \xD7 2.5).
|
|
331
|
+
Total script word count \u2248 (total seconds \xD7 2.5).
|
|
246
332
|
\u25A1 ONE format chosen (not a mash-up). Named in chunk 1's meta.
|
|
247
333
|
\u25A1 ONE metaphor committed to and threaded through every section.
|
|
334
|
+
The metaphor PREDICTS the mechanism \u2014 does NOT just label it.
|
|
248
335
|
\u25A1 Open loop planted in the hook, paid off at 70-85% mark, reframed at end.
|
|
249
336
|
\u25A1 3-5 mid-roll re-hooks spaced through body sections.
|
|
250
337
|
\u25A1 Section durations VARY (not uniform). At least one 45-90s breath chunk.
|
|
251
338
|
\u25A1 Every chunk has \u22653 teaching-oriented imagePromptHints.
|
|
252
339
|
\u25A1 Every paragraph has specific evidence (name / number / year / event).
|
|
340
|
+
\u25A1 Every chunk has \u22653 specific entities total in its narration.
|
|
253
341
|
\u25A1 ZERO forbidden phrases anywhere.
|
|
254
|
-
\u25A1
|
|
255
|
-
\u25A1 Total duration: ${minMin * 60}-${maxMin * 60} seconds.
|
|
342
|
+
\u25A1 The conclusion REFRAMES \u2014 does not summarize, does not "in conclusion".
|
|
256
343
|
|
|
257
|
-
|
|
344
|
+
Now write the script.`;
|
|
258
345
|
}
|
|
259
346
|
|
|
260
347
|
// src/commands/dev.ts
|