@generativereality/content-studio 0.0.0-stage → 0.1.0

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.
@@ -0,0 +1,201 @@
1
+ # Copy and story: what to say first, and how it holds attention
2
+
3
+ This file covers how words and stories are built for any piece people read, watch or hear. Read
4
+ `voice.md` beside it: this file decides what to say, and that one decides how the sentences sound.
5
+
6
+ Sources: *Made to Stick* (Heath & Heath), *Breakthrough Advertising* (Schwartz), Ogilvy, Copyhackers
7
+ (Wiebe), *Everybody Writes* (Handley), *Building a StoryBrand* (Miller), *$100M Offers* and *$100M
8
+ Leads* (Hormozi), *The Wizard of Ads* (Williams), *Influence* (Cialdini), and about 120 advice videos
9
+ from working creators and ad buyers, transcribed and read frame by frame (Nov 2026). The creators'
10
+ numbers are their own, often from people selling courses: use them as a creator's benchmark, never as a
11
+ fact in a claim. Where a book and a video disagree on tone, follow the book.
12
+
13
+ ## The failure this file exists to prevent
14
+
15
+ A piece built from what the writer can cite instead of what the reader cares about: the product
16
+ introduced, then counts, then features. Every line is true and a stranger stops after the first one.
17
+ That is the *curse of knowledge*: once you know a thing, you can't see it as someone who doesn't.
18
+ **Evidence backs the copy. It isn't the copy.**
19
+
20
+ ## 1. The one idea
21
+
22
+ Before a line of copy, write the core as one sentence that still holds when everything else is cut.
23
+ Then make it stick:
24
+
25
+ - **Simple:** one core, short and deep. Not a list of everything.
26
+ - **Unexpected:** break the reader's pattern, open a gap in what they know, then fill it. The surprise
27
+ serves the core or it is a gimmick.
28
+ - **Concrete:** something a person does or sees. *"It found the three people who already recommend you"*,
29
+ not *"relationship intelligence"*.
30
+ - **Credible:** proof the reader can test: a demo, a free try, a real output.
31
+ - **Emotional:** one person beats a statistic. In the book's study, a letter about one named child
32
+ raised more than twice what a letter of statistics did, and adding the statistics lowered it.
33
+ - **A story:** a short sequence of what happened to someone, which the reader can run in their head.
34
+
35
+ Write three to five angles for the idea, pick the one a stranger in that channel would stop for, and
36
+ say in one line why it beat the others.
37
+
38
+ ## 2. Study what already works {#study}
39
+
40
+ In the niche and the channel, find the pieces that did **3 to 5 times** better than their own
41
+ author's normal (by views, saves or upvotes against that author's median). Copy their hook **form**
42
+ and structure, never their content. Then fill the form with what only this person can say: *what have
43
+ they earned the right to explain?* Keep a bank of the audience's problems in their exact words, from
44
+ comments, threads and reviews of the alternatives. Their phrases make the best headlines. Never
45
+ invent a channel, a link or a number while studying. Write *"not verified"*.
46
+
47
+ ## 3. Hooks
48
+
49
+ **The first one or two sentences (or seconds) decide everything, and clarity beats cleverness.** Say
50
+ what this is about and why it matters to this reader, in short plain words. A great hook isn't
51
+ catchy; it is a trap the reader walks into because it is about them.
52
+
53
+ Formulas, one per piece:
54
+
55
+ - **Context, pull, turn:** line one says exactly what this is; then a pull (something hidden that is
56
+ happening to them, a contradiction, or proof shown); then the opposite of what they expect.
57
+ - **Context, challenge, transition:** *"…so today is day one of… But let me start from the
58
+ beginning."* It opens a series.
59
+ - **Connect to what they already want:** *"a dinner that gets you a third date"*, not *"knife skills"*.
60
+ - **Audience qualifier:** *"If you sell anything, you need to hear this."*
61
+ - **I built X because Y**, and **the problem, then what I did about it**. These are the commonest
62
+ shape of top maker posts.
63
+ - **Confession:** a true, specific thing that went wrong.
64
+ - **Receipts first:** a real, small, verifiable number in the first line or first second. Only true
65
+ ones.
66
+ - **Newsjack:** this week's change, ruling or announcement.
67
+ - **Attention triggers:** an extreme size or speed, a specific large number, a person the reader
68
+ wants to become, a big result from no experience, a line going up and to the right.
69
+
70
+ **Visual hooks** (the first one or two seconds of a video are a picture): a slow reveal of the result,
71
+ before and after, a list that unblurs item by item, a tier board, a split screen, a prop, a walk-in, a
72
+ pinned title bar with the claim, a counter that climbs. A kept imperfection (a dog walking through)
73
+ works as a pattern interrupt. The first visual must match the first words.
74
+
75
+ **Text hooks:** LinkedIn rewards a hook that gets to its purpose at once; X rewards a plain contrarian
76
+ line or a prediction. *"Press release energy"* fails everywhere. Never open on the product's name for a
77
+ reader who hasn't heard of it.
78
+
79
+ ## 4. Scripts and structure
80
+
81
+ - **Stories are loops:** stakes, an open question, an unexpected turn, a re-hook, then again. Answering
82
+ one question opens the next. Every loop closes; pay the promise before 80% of the runtime; never
83
+ summarise at the end.
84
+ - **Name the framework early.** A video that took 22 seconds to say what it was about flopped.
85
+ - **Entertain the many, teach the interested, sell to the committed.** If it looks like an ad, people
86
+ scroll.
87
+ - **Tell the story while doing something visually interesting** (cooking, walking, building).
88
+ - **Show, don't list.** Lists with no opinion stopped working. Showing the expertise (a case study, a
89
+ worked hypothetical, a live build, the product doing the thing) is where the room is.
90
+ - **Structures that work:** man in a hole (fine, worse, better); big goal, challenge, breakthrough;
91
+ before, bridge, after. Use one per piece, filled with the customer's words and invisible to the reader.
92
+ - **For a 30 to 60 s ad or a song-led piece:** shock and an open loop; personal stakes; failed fixes and
93
+ a low point; a guide and a new explanation; doubt and a demonstration; progress you can follow; the
94
+ payoff and who they are now; the reveal; one invitation that calls back to the start. The test is
95
+ whether a first-time viewer could retell what changed.
96
+ - **Carousels and list posts:** each item carries its proof and an opinion; a list that overflows the
97
+ screen gets saved.
98
+ - **Long video:** a counterintuitive opening, a promise of value, then deliver it at once.
99
+ - **Newsletters:** frameworks and breakdowns, no filler. It is the highest-intent channel there is.
100
+
101
+ ## 5. Copy rules
102
+
103
+ - **The headline does most of the work.** It promises something the reader wants, and is specific.
104
+ - **Feel first, then ask.** Let the reader see their own situation in concrete words before any ask.
105
+ - **Specifics over adjectives:** swap every adjective for a fact, a named situation or a visible
106
+ result. A slogan and vague adjectives insult the reader.
107
+ - **The reader's own words** (§2) write the headline and set the order.
108
+ - **Write to one person.** Draft fast, then cut everything that is there for the writer.
109
+ - **The reader is the hero; the product or person is the guide** with a plan and one next step.
110
+ - **Value is outcome × likelihood ÷ (time × effort).** Showing how soon the first result comes and how
111
+ little it asks usually beats a bigger promise, which lowers belief with sceptical readers.
112
+ - **Proof, honestly:** social proof works best from people like the reader, and only when true and
113
+ specific (named only with consent). Give first: the piece itself should be useful. Use scarcity and
114
+ authority only when they are real.
115
+ - **Plan what the reader sees with what they read.** For an article, page, guide or launch, plan the
116
+ picture in the brief (the real screen, a diagram, the chart of the number that matters, a before and
117
+ after) and write around it. One visual per idea it explains, with a caption saying what to notice.
118
+ - **A landing page is one promise and one button,** and the visitor feels the win in under a minute.
119
+ For a launch that has to explain *why*: the insight (what changed, or what the reader gets wrong), the
120
+ alternatives and their cost, the better way, then the product, its proof, and one ask. Most pages
121
+ are one sentence too long.
122
+ - **The call to action** says what to do, why, when, how easy it is and what happens next. It can be
123
+ the lesson itself. Never ask for upvotes, shares or support, and always say in the first line that
124
+ you made the thing.
125
+
126
+ ## 6. What people share
127
+
128
+ One specific relationship, one small concrete moment, a reveal or a line that lands at the end, and an
129
+ implicit *"send this to…"*. Content made to be sent to one person is what gets passed on. People trust
130
+ "people like me" over the best success story, and a moment they can picture over a number (*"close the
131
+ laptop at five"*, not *"save five hours a week"*). Raw beats produced: smooth AI transitions and
132
+ sharpening push a piece toward looking like an ad. Less production often performs better:
133
+ platform-native, phone-shot, talking video beats a polished studio piece.
134
+
135
+ ## 7. Formats and series
136
+
137
+ - **A series beats one-offs.** A named recurring format (*"day 1 of…"*, *"one teardown a week"*) makes
138
+ the audience a participant. A **default piece** that is easy to make every week keeps the cadence.
139
+ - **Kinds to rotate:** teaching, story, authority (the "if I started again today" case study), series,
140
+ and doubling down on a hit by turning it into a format.
141
+ - **Pieces every profile needs:** the origin story, how it works, how it was made, a day in the life,
142
+ the before and after (the maker's and a customer's), the mission, a hypothetical.
143
+ - **Formats that work as ads and as posts:** prototype to product, blind test, stress test, notes-app
144
+ screenshot, "don't buy this if…", teardown, reply to a real comment, day 1 to day 30, price
145
+ breakdown, screen recording, founder demo, raw review.
146
+ - **One core piece, cut for each channel** (post, short clip, carousel, newsletter section, a reply in
147
+ the thread where someone asked exactly that). Use one home platform for the original work and treat
148
+ the rest as distribution, in the same voice.
149
+ - **Own a category, a word and a visual,** and repeat them past the point of boredom.
150
+ - **Old drafts and archived posts are material.** Refresh and republish what still holds before
151
+ inventing a new topic, and mine the person's voice notes for ideas (a memo saying "idea for a post"
152
+ is a brief waiting to be written).
153
+
154
+ ## 8. Ads
155
+
156
+ Distinct creative is the targeting now. Ad delivery systems reward distinct concepts and count
157
+ near-duplicates as one. Test many hooks against a few bodies and a few calls to action, change one
158
+ variable per test, and write a hypothesis for each test. A lead magnet solves one narrow problem
159
+ completely, in a way that reveals the next problem the offer solves.
160
+
161
+ ## 9. The check {#check}
162
+
163
+ Read the piece cold, as the brief's reader meeting it in that channel. Each must hold:
164
+
165
+ 1. **Hook:** would they stop for the first line or first second? Does it open on their situation, not
166
+ the product's name or the writer's numbers?
167
+ 2. **Reader:** is it about them, at their stage of awareness? Internal numbers dressed up as the story
168
+ always fail.
169
+ 3. **Specificity:** a concrete scene, example or number that makes the point; where the form carries
170
+ pictures, the planned one is there.
171
+ 4. **One idea:** could they repeat it to a friend in a sentence?
172
+ 5. **Voice:** a person talking, none of the tells (`voice.md`).
173
+ 6. **Channel fit:** the form, length and rules of that place (`channels.md`), and nothing a moderator
174
+ would remove.
175
+
176
+ The floor under all six: every claim has its source; nothing is invented; nothing promised that isn't
177
+ true. A self-score does not predict quality. Pieces that scored well on every point have been judged
178
+ bad on sight. The person's reaction and the result are what count, so treat this as a gate against
179
+ obvious faults, not as proof the piece is good.
180
+
181
+ ## 10. After it goes out {#after} {#ceilings}
182
+
183
+ - **Before posting, predict** the piece's result as a multiple of the person's normal at 6, 24 and 72
184
+ hours, and compare afterwards.
185
+ - **Read start, stay, signal:** nobody stopped means the hook failed; they started and left means the
186
+ payoff came too late; they watched and did nothing means it entertained but wasn't memorable. Write
187
+ three notes per piece: why they started, where they left, which line got a reaction.
188
+ - **View ceilings** (one creator's diagnostic): stuck under 1,000 views, the hook is unclear (fix
189
+ subject, stakes, simple, short); under 10,000, the topic doesn't touch a pain or desire, or the first
190
+ visual doesn't match the first words; under 100,000, the angle is obvious. Past that it takes
191
+ controversy, which is usually wrong for a brand. A business can be built without ever passing 100,000.
192
+ - **Benchmarks** (creators', unverified): Instagram share rate around 4% is excellent; watch-through
193
+ above 50% (60% on 15 s); X reply rate 1 to 3%; LinkedIn engagement 4%+; newsletter opens 30% normal,
194
+ 40% great; YouTube click-through 2 to 10% for most channels (YouTube's own range).
195
+ - Write the winning **formula** into the house style, not the piece.
196
+
197
+ ## Never
198
+
199
+ - Invent a number, quote, testimonial, user or result, or present a hypothetical as a real case.
200
+ - Borrow the *comment a keyword and I'll DM you* call to action at scale. Platforms ban automated DMs.
201
+ - Use a revenue screenshot, a "study shows" number without its caveats, or anyone's content as your own.
@@ -0,0 +1,75 @@
1
+ # Costs, licences, disk, local or hosted, Windows
2
+
3
+ ## Budget and the spend log
4
+
5
+ - Work inside a budget the person set, in money and time. When you reach it, stop and say so. Running
6
+ past it "because it was nearly done" is still over budget.
7
+ - Log every paid call (`scripts/spend.mjs add …`) with the model, settings, cost, wall time and output
8
+ file, and report the total per piece (`scripts/spend.mjs total`). Show the person what each sample
9
+ cost and how long it took. Some tool skills say never to tell the person prices: this skill
10
+ overrides that.
11
+ - Typical spends (Nov 2026): a full round of image, video and voice experiments for one area cost $1 to $2.
12
+ A 30 s product clip with three generated shots cost $1 to $8 depending on the model. Generation was
13
+ about $20 against about $300 of agent tokens in one production, so the agent's own time is usually the
14
+ bigger cost.
15
+ - **Budget attempts, not length.** A discarded take costs the same as a kept one; the keep rate in one
16
+ production was 3 of 7.
17
+ - Video per second of output (Replicate, read 25 Aug 2026, 1080p unless noted; re-read before boarding):
18
+ Seedance 1.5 Pro $0.026 (720p, silent), Kling 2.5 Turbo Pro $0.07, Veo 3.1 lite $0.08 ($0.05 at
19
+ 720p), Runway Gen-4.5 $0.12, Veo 3.1 fast $0.15 ($0.10 at 720p), Kling v3 pro $0.224 ($0.336 with
20
+ audio), Seedance 2.5 $0.23 (720p), Veo 3.1 $0.40. **The spread for the same shot is about 15×, and
21
+ that spread is the budget.**
22
+ - Local electricity is small (about €0.0003 an image, €0.01 a local video clip at €0.20/kWh); what
23
+ local costs is wall time and disk.
24
+ - Never create an account, start a trial, accept a licence or buy anything on the person's behalf.
25
+
26
+ ## Local or hosted
27
+
28
+ Local and free by default **where the quality is as good**. Otherwise use the best tool within the
29
+ budget. In Nov 2026 on an Apple Silicon Mac with 32 GB or more, these run well locally: FLUX 3 Klein and
30
+ Z-Image (images), ACE-Step (music), Qwen3-TTS and Kokoro (voice), and whisper (transcription). Local
31
+ video is impractical (10 minutes to over an hour a clip, 70+ GB weights). Hosted wins on video, on
32
+ Nordic voices and on images that must hold a design or a cast.
33
+
34
+ - **macOS kills long GPU jobs while someone uses the screen**
35
+ (`kIOGPUCommandBufferCallbackErrorImpactingInteractivity`). Run long local generation at night, or
36
+ shrink the input.
37
+ - Hugging Face downloads stall on xet transfer: `HF_HUB_DISABLE_XET=1 hf download … --max-workers 1`. If
38
+ the client deadlocks, delete the model's `.locks` and `*.incomplete` files and retry. One `--exclude`
39
+ per pattern. Download one model at a time.
40
+ - mflux needs `pillow<13`.
41
+
42
+ ## Disk
43
+
44
+ Check free space before any model download, and stay inside a cap the person agrees (models run from
45
+ 2 GB to 80 GB each). Install into the project's own folder (venvs, local `node_modules`), not
46
+ system-wide. List what can be deleted when you finish. Keep generated media out of git unless the
47
+ project says otherwise.
48
+
49
+ ## Licences: what may be used for what
50
+
51
+ Read the licence on the **model card**, not the GitHub badge. A repository's code licence often
52
+ differs from its weights' licence.
53
+
54
+ | Class | Examples | Meaning |
55
+ |---|---|---|
56
+ | Apache-2.0, MIT, BSD | HyperFrames, Kokoro, Qwen3-TTS, Chatterbox, ACE-Step, Wan 2.2 weights, Real-ESRGAN, mflux, whisper, YuNet, Playwright, Z-Image Turbo | use, bundle, sell |
57
+ | MPL-2.0 | Satori, resvg | bundle; publish only changes to those files |
58
+ | Free under a revenue or size limit | FLUX 3 Klein (under US$5M), LTX-2.x (under US$10M ARR), Remotion (up to 3 employees), MiniMax Music 3 local (under US$20M, credit in the UI), Stable Audio (under US$1M) | fine while under it; plan a licence past it |
59
+ | GPL, AGPL | Piper's engine, espeak-ng, ComfyUI, OpenMontage | fine as a separate program a person runs on their own content; bundling it makes the product GPL, and AGPL also covers a network service |
60
+ | Non-commercial weights | OmniVoice, Voxtral, MusicGen, F5, XTTS, CodeFormer, Qwen-Image-2.1, FLUX.2 dev | private use only, never behind anything sold |
61
+ | Free tiers | ElevenLabs free (attribution required), Apple system voices (personal use) | not for anything published for a business |
62
+ | Regional | HunyuanVideo (licence excludes the EU, UK and South Korea) | not for companies there |
63
+
64
+ The outputs of the major hosted models are usable commercially under each provider's terms. Some
65
+ carry an invisible watermark (SynthID on Google's). Openly licensed photos, clips and music come with
66
+ their licence from the Wikimedia Commons API (CC0, public domain, CC BY, CC BY-SA, attributing BY and
67
+ BY-SA) or Openverse. **Record each asset's licence and source beside it.**
68
+
69
+ ## Windows
70
+
71
+ HyperFrames, Remotion, Playwright, ffmpeg, Kokoro (ONNX), whisper.cpp and Real-ESRGAN run the same on
72
+ Windows. MLX models (mflux, mlx-audio, mlx-whisper) are Apple-only. Local image and video models need an
73
+ NVIDIA GPU there (ComfyUI or diffusers), so a Windows machine without one uses the hosted models.
74
+ Replace Apple's Vision with an ONNX face detector plus OCR text density, and HEIC handling with libheif.
75
+ On a smaller machine, make fewer variants and use a pre-made library of music beds.
@@ -0,0 +1,192 @@
1
+ # Generated images and video
2
+
3
+ The models change monthly. **Read the live price and input schema before every batch.** Treat the
4
+ names and numbers here as the shape of the answer, dated. Swapping the hosted model is the cheapest
5
+ quality fix there is.
6
+
7
+ ## Calling a hosted model
8
+
9
+ - **POST, then poll.** Never hold a request open (`Prefer: wait`) for anything long: a dropped
10
+ connection is paid for twice, and on Replicate the output of a dropped prediction can be purged.
11
+ Submit all jobs first, then poll them all, about every 10 s.
12
+ - **Read the live schema** (`GET /v1/models/{owner}/{name}`) and grep it for every control you are
13
+ about to describe in words. A schema field such as `camera_fixed` works; the same request written as
14
+ prose in the prompt doesn't.
15
+ - **Read the live price** from the model page and check its unit (per image, per second, per 1,000
16
+ images). Replicate's API exposes no price, but each model page embeds its billing table as JSON:
17
+ fetch the page to a file and parse the `"criteria"` / `"prices"` objects (read the file in a heredoc
18
+ script; `python3 -c "…"` lost its inner quotes to bash). **Check every parsed number against its
19
+ unit:** the same parser read one model correctly at $0.04 an image and another as "$3", which was
20
+ per 1,000. A price two orders of magnitude off its neighbour is the tell. Prices are tiered by
21
+ resolution and by audio on or off, so one number per model is wrong by construction, and a rate
22
+ carried in a doc was once half the real one when a shoot was planned on it.
23
+ - **Spend is computed, not measured, on Replicate:** there is no billing endpoint, and the predictions
24
+ list 403s intermittently on paging, so a ledger built from it is silently partial. Compute from the
25
+ rate table and say so. OpenRouter returns the real cost per call in `usage.cost`.
26
+ - **Log every call:** model, settings, seed, cost, wall time, output file (`scripts/spend.mjs`).
27
+ - **Never overwrite a take.** A take that exists has usually been cut against, and re-shooting over it
28
+ pays twice and swaps the file the edit and the review point at (a queued job once landed a second take
29
+ on top of the one a scene was built from; the provider's copy of the first had not yet expired). Skip
30
+ outputs that exist; `--force` writes `<name>-2`. **A cache key must name everything the output depends
31
+ on:** cloned voice-over keyed on the line and not on the reference take kept the wrong voices.
32
+ - **Retry a 429 after the server's `retry_after`** and keep looping: low-balance accounts are throttled
33
+ but still finish. Space batch calls a few seconds apart.
34
+ - **No silent fallback to a second provider.** A fallback once returned JPEG bytes saved as `.png`;
35
+ a clean failure is better. Output may be a string or a one-item array, so handle both.
36
+ - API traps: community models need `POST /v1/predictions` with a version id; the model endpoint returns
37
+ a bare 404 for them although `GET /v1/models/{owner}/{name}` returns 200. A GET without a
38
+ `User-Agent` can be refused with a 403 that reads like a bad token (POSTs pass, curl never sees it).
39
+ The predictions list omits `output`; fetch each prediction. Prediction ids are about 26 characters, and a
40
+ truncated id gives a 404 that looks like a vanished prediction.
41
+ - Credentials come from wherever the person keeps them (a keychain entry, an environment variable).
42
+ Ask, never print them, and never paste them into files that get committed. When minting a token in a
43
+ browser, capture it by command substitution straight into the store, never by reading the page into
44
+ the transcript. On macOS a keychain read on a locked login keychain can hang on a prompt nobody can
45
+ answer ("In dark wake, no UI possible"): stop retrying, only a person at the machine fixes it.
46
+ - **Hosts:** switching models saves money, switching hosts mostly doesn't (Veo 3.1 and Kling 2.5 cost the
47
+ same on Replicate as first-party, Aug 2026). Move hosts for a model one lacks (query the API, not the
48
+ collection page, which omitted models it serves), lower cold starts (fal.ai) for interactive work, or a
49
+ consumer plan whose included generations beat per-second billing, after checking its terms for
50
+ commercial use and visible watermarks.
51
+ - **OpenRouter** (Oct 2026) serves image and video leaders Replicate lacked (MAI-Image, Muse, HeyGen
52
+ Video 1, MiniMax H3): `POST /api/v1/images` is synchronous (base64 in `data[0].b64_json`, references
53
+ as `input_references`), `POST /api/v1/videos` is async (poll, then download `/content`). List a host's
54
+ models with `GET /api/v1/models?output_modalities=image|video|audio`.
55
+
56
+ ## Images: what to reach for (as of Nov 2026)
57
+
58
+ Image leaderboard (Artificial Analysis, read 24 to 26 Oct 2026): GPT Image 2.5 (~1220 Elo), Nano Banana
59
+ 2.1 (~1180), MAI-Image 2.6, Grok Imagine 2, Muse, FLUX 3 Image (~1120), Seedream 5 Pro, Qwen-Image 3 Pro.
60
+ FLUX Kontext pro (~920, around 78th) and FLUX 1.1 pro (~870, around 90th) look dated: over-processed
61
+ "AI portrait".
62
+
63
+ | Need | Use | Price and time (Nov 2026) |
64
+ |---|---|---|
65
+ | Default hosted picture; text that must be right; one design across slides; a consistent cast | **Nano Banana 2.1** | $0.034 at 1K, $0.05 at 2K; 17 to 30 s (once 135 s under load) |
66
+ | Cheapest | Muse Image ($0.01, 17 s); GPT Image 2.5 at medium quality via OpenRouter ($0.011 to $0.016, 15 to 27 s) | |
67
+ | Designed, illustrated look | **Recraft v4** ($0.04, 11 s) | watch hands |
68
+ | Restoration, faces changed least | Nano Banana Pro ($0.15 at 2K) | |
69
+ | Nothing uploaded | **FLUX 3 Klein locally** (mflux on a Mac with 32 GB+, 2 to 4.5 min an image, 30 GB weights; free under US$5M revenue) | Mac only through MLX; Windows needs an NVIDIA GPU |
70
+ | Most photographic local | Z-Image Turbo | ignores colour constraints |
71
+
72
+ Faults to expect: Nano Banana tends toward an orange-glow "ad" look and over-even lighting, and once
73
+ added a second parent unasked. Seedream ignored a colour instruction. Ideogram drew nonsense phone
74
+ screens. MAI-Image refuses any scene with a child. Recognisable copyrighted characters were refused by
75
+ GPT Image 2.5, Nano Banana 2.1, FLUX 3 Image and Seedream, and drawn by Qwen-Image 3 Pro and FLUX 1.1
76
+ pro (Oct 2026); don't make them for anything published.
77
+
78
+ For a transparent cutout (sprites, props), run a background-remover model on the finished image.
79
+ Identity-preserving variations of one character (another outfit, another palette) come from an
80
+ editing model given the base image and an edit instruction; plain text-to-image makes a new character
81
+ each time.
82
+
83
+ ## Prompting what renders
84
+
85
+ - **Models render the ordinary well and turn the extraordinary into cliché** ("humanoid robot",
86
+ "figure made of light"). Prompt the room, the light and the action, not the concept. Flat interiors,
87
+ one deadpan figure doing something mundane, two people at a table in available light and a period
88
+ video look (grain hides artefacts) all render reliably; scale effects and invented creatures don't.
89
+ Test a look with cheap stills before paying for video.
90
+ - **A negative prompt can't enforce an absence.** Four "closed laptop" takes failed across two model
91
+ families. Remove the object, or describe physical facts instead of states.
92
+ - **Props and wardrobe don't arrive reliably; posture and movement do.** Anything that must be seen
93
+ should be an action.
94
+ - **Say the age** of any child in the scene, or the model will age them up.
95
+ - **Ask for the real number.** An invented "six tabs" was really five, and five looked better (five
96
+ different things, so the beats differed, and a counted number can't be caught out). Find the real
97
+ figure, count or label before it reaches a frame; it is usually one search away.
98
+ - **In video, screens and paper in shot come out as gibberish.** Prompt them illegible on purpose
99
+ (angled, defocused, turned away) and composite every readable word afterwards.
100
+ - For backgrounds under text, end with *"No printed matter, no writing, no labels, no logos."*
101
+
102
+ ## Consistency across images and shots
103
+
104
+ - **A cast sheet as the reference image, with the clothes named in the prompt.** Without named clothes,
105
+ local models copy the reference portraits' outfits. GPT Image 2.5, Nano Banana 2.1, FLUX 3 Image,
106
+ Seedream 5 Pro and Muse kept everyone recognisable in a bench of family scenes.
107
+ - **Chain the style:** use the first accepted still as the style reference for the next ones.
108
+ - **One room across shots is not a prompt problem, and no seed fixes it.** Four separate text-to-video
109
+ takes of "the identical room" gave four rooms, and the same seed with one clause changed gave two (a
110
+ seed reproduces one generation; it carries nothing between them). Generate several shots in one call
111
+ where the model supports it (Kling v3 `multi_prompt`, up to 6 shots; Seedance 2.5, 30 s in one call),
112
+ or chain: one still of the room, edits of that still that change only the light or time, each fed as
113
+ the clip's start image, and start plus last frame where two shots must join.
114
+ - **Repair rather than re-roll:** models that take a `reference_video` as a base (Kling omni) edit a
115
+ clip you already paid for in plain language, so a take wrong in one object is a cheap edit, not a
116
+ reject.
117
+ - **A locked-off composition holds** (one room stable over ten seconds). A static camera with no
118
+ recurring face is the cheapest reliable shot. Where the schema has `camera_fixed`, set it; the same
119
+ wish written in the prompt and negative prompt is a hope.
120
+ - **One recurring face:** use the model's `reference_images` (counts differ by model). Decide this
121
+ before boarding, because it decides the model and the price.
122
+ - An on-camera speaker commits you to a voice the video model can't reproduce: it re-rolls the voice on
123
+ every generation, and no seed or id fixes it. Generate the face once, then clone the voice from that
124
+ take (`audio.md`) only if it is a synthetic person, never a real one (`real-people.md`). Decide
125
+ whether anyone speaks on camera before boarding.
126
+
127
+ ## Video: what to reach for (as of Nov 2026)
128
+
129
+ | Model | Price | Use, and what it does wrong |
130
+ |---|---|---|
131
+ | **Seedance 1.5 Pro** (image to video) | about $0.026/s silent, $0.052/s with audio at 720p; 5 s ≈ $0.13 at 720p, $0.30 at 1080p | the liveliest and best looking. **Invents things:** an extra person in a group, drips, sprouting leaves; cut to a new shot mid-clip despite `camera_fixed`. Never on anything that must stay true without an invention check |
132
+ | **Kling 2.5 Turbo Pro** | about $0.07/s | faithful (kept the right number of people), native 1080p; slower |
133
+ | Wan 2.2 i2v fast | about $0.11 a clip | **out for anything shown: choppy, as if 10 to 15 fps** |
134
+ | Text to video leaders (read 26 Oct) | Wan 3 $0.05/s, HeyGen Video 1 $0.036/s, MiniMax H3 $0.08/s, Seedance 2.5 $0.23/s, Kling 3 Pro $0.34/s | judge by frames |
135
+ | Local (LTX-2.5, Wan 2.2 5B) | free; about 10 min for 10 s, or over an hour a clip, 70+ GB weights | not practical on a laptop |
136
+
137
+ Controls differ per model, and a model's ceiling is not the medium's (read Aug to Oct 2026; re-read the
138
+ schema before boarding, because the newer models were the ones that had grown the controls an older
139
+ shoot failed for want of):
140
+
141
+ | Model | Durations | Sound | Controls worth knowing |
142
+ |---|---|---|---|
143
+ | Veo 3.1 (and fast, lite) | 4 / 6 / 8 s | yes, with dialogue | `reference_images` 1 to 3; `image` + `last_frame` to join shots |
144
+ | Kling 2.5 Turbo Pro | 5 / 10 s | no | start and end image; no seed |
145
+ | Kling v3 | 3 to 15 s | yes | `multi_prompt`, up to 6 shots in one call |
146
+ | Kling v3 omni | 3 to 15 s | yes | `reference_images` up to 7; `reference_video` as a base to edit a clip |
147
+ | Seedance 1.5 Pro | 2 to 12 s | optional | `camera_fixed`, `seed`, first and last frame; 720p only on Replicate |
148
+ | Seedance 2.5 | up to 30 s | yes, with dialogue | `reference_images` up to 30, `reference_videos` up to 10, `seed` |
149
+
150
+ - **Spend on the expensive models only where a face or spoken dialogue has to persist.** A held static
151
+ shot with no face is the commonest thing a board asks for, and the cheapest model does it for about a
152
+ fortieth of the dearest (per-second prices in `costs-and-licences.md`). In one production a single 6 s
153
+ take on the dearest model was a third of the spend for a fourteenth of the footage.
154
+ - **One-shot to test a concept, composite to build it.** Veo will one-shot a split screen with spoken
155
+ commentary ($1.20 for 8 s on the fast tier), which answers "does this idea work" in minutes. It can't
156
+ re-roll half a frame, hold one room in both halves, set its own lettering or keep voices across shots;
157
+ compositing separate panes can.
158
+ - **Provider overload is not your prompt.** Veo's `high load` failure (`code: 8`) once failed one shot
159
+ eight times in a row while a sibling succeeded. Retry unchanged; don't rewrite the prompt.
160
+ - **Check a model is still served** before boarding on it, on the vendor's own deprecations page:
161
+ OpenAI removed Sora 2 and its Videos API on 24 Sep 2026 while a reseller still listed it, and a shot cut
162
+ from a removed model can't be re-rolled.
163
+ - **A cheap concept test:** one 8 s Seedance call with audio (about $0.42) made a three-shot ad that
164
+ spoke every scripted line correctly. Its product interface was gibberish and the voice unnatural, so
165
+ it tests an idea and never ships.
166
+ - **Budget 3 to 5 attempts a shot.** One production made 7 takes and kept 3, for $7.22. The price spread
167
+ between models for the same shot is about 15×, and that spread is the budget.
168
+ - **Board before shooting:** write the shots and get the plan approved, check the schema against every
169
+ rule, make one cheap still per setup, then video. One $7 set made before its board was approved
170
+ returned 3 usable seconds.
171
+
172
+ ## The invention check (for any generated motion near real things)
173
+
174
+ Review every clip by its frames, not by its first frame. For anything that must stay true: count faces
175
+ on about 20 frames against the source; ask a vision model narrow questions (*"any person, figure,
176
+ silhouette or animal?"*), not open ones (an open "boats: yes" turned out to mean the cabin the camera
177
+ was in); measure camera shift; map where the pixels changed. **Only animate stills whose motion is
178
+ obvious and that have no faces** (water, fire, light, sky).
179
+
180
+ ## Generating assets for a product build
181
+
182
+ When generated images or music ship inside an app or a game, generate them at build time and commit
183
+ the output as the offline content. The shipped build then holds the files, never the keys or the
184
+ generation code, and makes no network calls for them. If users later generate their own at run time,
185
+ that is a separate code path that calls the project's own server, which holds the key; never bundle a
186
+ key into a client. Keep one canonical copy of the generated files and let other targets mirror it,
187
+ never regenerate per target. Large binaries go through git LFS: commit `.gitattributes` before the
188
+ files, and after a fresh clone check the build reads real bytes, not LFS pointers. A chain of
189
+ providers (best quality first, a cheaper one, then a free on-device floor) lets a run degrade instead of
190
+ failing, chosen by which keys are present and logged per file (this is a planned chain, unlike a
191
+ silent fallback); check each level's licence (MusicGen weights are
192
+ non-commercial).
@@ -0,0 +1,108 @@
1
+ # Real people: photos, faces, voices, and personal content
2
+
3
+ This applies to anyone's real photos, videos, voice or words, and to personal pieces for family and
4
+ friends (a trip, a month, a child's year, a tribute).
5
+
6
+ ## Consent and what leaves the computer
7
+
8
+ - **A person's own media is shown as it is.** Never redraw, "enhance", animate, age or re-pose a real
9
+ person, and never generate a person into real memories. Restoration is the one exception, and only
10
+ at the owner's request, compared with the original at the faces (`stills.md`).
11
+ - **Nothing of a person's goes to a hosted model without a yes for that specific use.** Keep the pixels
12
+ local. An agent can plan a film from text alone (local captions, face boxes, times, places, transcripts),
13
+ and the quality checks can run locally too.
14
+ - **Say exactly what is local and what isn't.** Never write "nothing leaves your computer" when an AI
15
+ provider reads anything.
16
+ - **Names come only from the person's own tags or words.** Someone tagged nowhere stays unnamed.
17
+ - **Never use synthetic faces as evidence of quality.** Generated "family" photos (everyone centred,
18
+ facing the camera, in the same jacket) read as AI-made and say nothing about real material.
19
+ - **Real people in demos and posts:** blur names and faces of anyone who hasn't agreed. A customer is
20
+ named only with their consent.
21
+
22
+ ## Cloning a voice
23
+
24
+ 1. Consent from the **voice's owner**, never from whoever uploads the audio. Verify it live (they read
25
+ a random phrase shown on screen).
26
+ 2. Purpose-bound, revocable, deletable. Treat the voice as biometric data: encrypted, on the device,
27
+ never used for training.
28
+ 3. An older relative consents in their own voice while alive. After death: only with consent given in
29
+ life or the next of kin's agreement, and only to read words they actually wrote or said. **Never
30
+ invent new statements in a dead person's voice.**
31
+ 4. **No children's voices.**
32
+ 5. Label every cloned output, in the piece and in its metadata, and keep the engine's watermark. The EU
33
+ AI Act's disclosure rules (Art. 50) apply from August 2026 (check the regulation's current text).
34
+ 6. No free-text speech with a cloned voice, rate limits, and never export the voice model.
35
+ 7. The engine needs a commercial licence for anything published.
36
+
37
+ ## Get the facts right before anything creative
38
+
39
+ - **Time and place come from the metadata; what is in the picture comes from looking.** A caption
40
+ called a cabin window "a train at sunset"; the data said 07:10, at sea.
41
+ - **Compute every count and weekday.** "Three cities" was invented, and the data said five. "Saturday"
42
+ was said for a Sunday.
43
+ - **No inferences dressed as facts:** "friends" becomes the tagged names; "sunrise" becomes "at sea"
44
+ when 07:10 was before sunrise; "a new outfit" was said where she only tried one on.
45
+ - **Local time comes from the place's time zone,** not the camera's.
46
+ - A line never runs over a shot from another time or place.
47
+ - **Received photos** (forwarded in a chat) are labelled or left out. A dozen photos stamped the same
48
+ minute with no location are probably someone else's phone, so say so and ask. Generated images found
49
+ in a library stay out.
50
+
51
+ ## Read every trail before asking
52
+
53
+ Before asking the person anything, read everything available (tags, notes, messages, the calendar,
54
+ memos, the work log) and say what you read. Then look for gaps: lay out each day's photos by hour,
55
+ mark waking-hours gaps of two hours or more, and mark which are explained. **Ask one question**, about
56
+ the gap that matters most, neutrally (*"what was happening on Sunday afternoon?"*, not *"what was so
57
+ funny?"*). Fourteen questions is too many. Say which source could have answered it, had it been
58
+ connected.
59
+
60
+ ## The language follows who it is for
61
+
62
+ Dates, times (Swedish writes 14.20 and lower-case weekdays), and place names (Helsingfors for Helsinki
63
+ in Swedish) move with the language. Translated words aren't quotes, so drop the quotation marks.
64
+ Scan every visible text node for words left in the wrong language. A word the language needs but
65
+ the data lacks (Swedish distinguishes a mother's sister from a father's) is looked for in every trail,
66
+ then asked, never guessed.
67
+
68
+ ## Photos: technical faults that ruin a film
69
+
70
+ - **Orientation.** Phone HEICs carry an EXIF orientation tag. Converting while keeping the tag and also
71
+ rotating the pixels makes browsers rotate again: 58 of 120 photos came out sideways. Bake the rotation
72
+ and strip the tag (ImageIO `CreateThumbnailWithTransform` on a Mac; libheif or pillow-heif applying
73
+ `irot`/`imir` elsewhere). **ffmpeg applies a HEIC's grid rotation (`irot`) while decoding, even with
74
+ `-noautorotate`**, so a pipeline that also applies the EXIF turn rotates the photo twice. Portrait
75
+ phone photos came out sideways that way. The test: if the decoded size equals the stored size with
76
+ width and height swapped, ffmpeg has already turned it, so don't turn it again. **Check the rendered frames**, not the source files: each shot should match
77
+ its source best at 0°, and the face roll measured at full resolution should match the source's. A
78
+ film with one sideways photo isn't a candidate.
79
+ - **Edits in the photo app are lost** when you read the original file. A crop or adjustment the
80
+ person made isn't in it, so read the edited rendition where the library offers one.
81
+ - **Junk filter:** a utility classifier (receipts, screenshots, decoys) is reliable as a filter (20 of
82
+ 20, no false positives, in one test). An aesthetic score ranks posed groups highest, so never use it
83
+ to pick.
84
+ - **Live Photos** hold 1 to 3 s of real motion and sound, the authentic version of what image-to-video
85
+ fakes. A shot longer than its clip plays the clip up to the key moment, then settles on the still. A
86
+ shorter one centres on the key moment. Keep the sound, ducked. Real motion went from 34% to 85% of
87
+ a film this way.
88
+ - **Real motion first, generated motion last,** and only on stills with obvious motion and no faces,
89
+ after the invention check (`generation.md`).
90
+
91
+ ## The personal register
92
+
93
+ Personal content is the opposite of growth content, so keep its own template: slow dissolves or
94
+ honest cuts, real sound kept (wind, laughter), a serif caption, no kinetic type, no "motivational"
95
+ music. Seven rules for a 30 to 60 s memory piece:
96
+ 1. Open on the most specific moment.
97
+ 2. One throughline.
98
+ 3. A small turn near the end.
99
+ 4. Captions in the family's own words.
100
+ 5. Music chosen as "day in the life" or "emotional".
101
+ 6. Unproduced on purpose. Sharpening and smooth AI transitions push it toward an ad.
102
+ 7. End on a face, or a line addressed to the person it is for.
103
+
104
+ What people respond to: one relationship, one small moment, a line that lands, made to be sent to one
105
+ person. Useful feedback-to-change mapping: "boring, like the phone's automatic memories" → a social or
106
+ product cut opening on the most specific moment; "too fast" → longer shots, no word captions; "I wasn't
107
+ there" → an index card or a cut scene; "who's that?" → only tagged names; "make one for <child>" →
108
+ their photos first, labels in their language, no narrator, about 30 s.