@officexapp/vidfarm-devcli 0.21.54 → 0.21.56
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/.agents/skills/vidfarm/SKILL.md +65 -0
- package/.agents/skills/vidfarm/harnesses/README.md +26 -0
- package/.agents/skills/vidfarm/recipes/bulk-scripting-with-a-harness.md +2 -1
- package/.agents/skills/vidfarm/references/automation-and-local-dev.md +2 -2
- package/SKILL.director.md +69 -3
- package/SKILL.md +76 -4
- package/clipper.md +40 -6
- package/dist/src/cli.js +104 -11
- package/dist/src/devcli/clipper-run.js +941 -0
- package/dist/src/devcli/doctor.js +23 -1
- package/dist/src/devcli/harness.js +60 -15
- package/dist/src/devcli/marketplace-gigs.js +545 -39
- package/dist/src/devcli/skill-docs.js +2 -1
- package/dist/src/devcli/update-check.js +340 -0
- package/experimental/animated-sticker-story.md +2252 -0
- package/experimental/flash-harness.md +549 -0
- package/experimental/google-news-to-video.md +9 -0
- package/experimental/unique-product-explainers.md +8 -0
- package/marketplace.md +549 -14
- package/package.json +6 -2
- package/public/serve-shells/editor.html +27 -0
- package/public/serve-shells/library-files.html +28 -1
- package/public/serve-shells/library-raws.html +27 -0
- package/public/serve-shells/tools-clipper.html +27 -0
- package/public/serve-shells/tools-image.html +27 -0
- package/public/serve-shells/tools-video.html +27 -0
- package/update.md +12 -2
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flash-harness
|
|
3
|
+
video_type: NOT A FORMAT — the production PROCESS for a weak / small / fast model. Start from an already-decomposed /discover template, adapt it. Wraps whichever format harness applies.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Flash Harness — build from a decomposed template, not from a blank page
|
|
7
|
+
|
|
8
|
+
> Served at `https://vidfarm.cc/experimental/flash-harness.md` and, because it is the one
|
|
9
|
+
> harness you may need before you have network, at `vidfarm harness show flash-harness`.
|
|
10
|
+
|
|
11
|
+
**This is not a video format.** Every other file in `/experimental` tells you what a
|
|
12
|
+
*specific kind of video* looks like. This one tells you *how to work* when the model
|
|
13
|
+
reading it is not a frontier model. It sits **above** the format harnesses: you still read
|
|
14
|
+
the format harness, you just reach it by a different road.
|
|
15
|
+
|
|
16
|
+
**Who this is for.** Gemini Flash, DeepSeek, Kimi, GLM, MiniMax, Grok, Qwen, Llama, any
|
|
17
|
+
distilled or fast tier, any model unsure whether it is one of these. If you are on this
|
|
18
|
+
list, **stop reading `vidfarm.cc/experimental/*` as a build instruction and read it as a
|
|
19
|
+
grading rubric instead.** Those files ask you to author a format from its written
|
|
20
|
+
description. That works on Opus/Fable/GPT-5-class agents and reliably fails below them.
|
|
21
|
+
|
|
22
|
+
The road that works below that line is short: **a video that already went viral has already
|
|
23
|
+
been taken apart for you. Take the parts.**
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## THE CONTRACT
|
|
28
|
+
|
|
29
|
+
Twelve rules. Follow them in order. The reasons are in **Why these rules** at the bottom —
|
|
30
|
+
read them after, not during. A reason next to a rule is something to negotiate with.
|
|
31
|
+
|
|
32
|
+
1. **Never start from a blank composition.** Every build starts as a fork of a
|
|
33
|
+
**decomposed** template from `/discover`.
|
|
34
|
+
2. **Pick the template by the client's ANGLE, not by how the template looks.** Search
|
|
35
|
+
`vidfarm discover --query "<the client's offer, in their words>" --json`.
|
|
36
|
+
3. **A template is decomposed if its `/discover` row carries `summary`, `keywords` and
|
|
37
|
+
`promotions`.** No `summary` → not decomposed. Do not guess from the preview.
|
|
38
|
+
4. **If nothing decomposed fits, decompose one.** Paid: `vidfarm decompose <forkId>`.
|
|
39
|
+
Free tier: `vidfarm decompose <forkId> --local`. Never skip this to save a step.
|
|
40
|
+
5. **Derive the harness before you plan:** `vidfarm harness derive <forkId> --out ./HARNESS.md`.
|
|
41
|
+
That file is your plan's source of truth, not the rendered video.
|
|
42
|
+
6. **Write `STORYBOARD.md` before you open `composition.html`.** One row per beat, carrying
|
|
43
|
+
the beat's `src`, `duration`, `voiceover`, and where its asset will come from.
|
|
44
|
+
7. **Procure every asset for every beat in ONE pass, before you edit anything.** A beat with
|
|
45
|
+
no asset in hand is not planned, it is hoped for.
|
|
46
|
+
8. **Walk the asset ladder in order and stop at the first rung that answers:** client's
|
|
47
|
+
shared folder → client's website → public raws → free stock (Pixabay/Openverse) →
|
|
48
|
+
IconScout → your own subscription's generator → billed generation.
|
|
49
|
+
9. **Keep the load-bearing DNA. Replace everything else without mercy.** Load-bearing =
|
|
50
|
+
the beat count, the cut rhythm, the hook shape, the payoff position, the caption
|
|
51
|
+
identity. Every word, every image, every voice line gets replaced.
|
|
52
|
+
10. **Overfitting to this one template is CORRECT.** Do not add originality on top. The
|
|
53
|
+
template is the originality; your job is the transplant.
|
|
54
|
+
11. **Run the gate as a command, not from memory:** `vidfarm qa ./work --harness ./HARNESS.md`,
|
|
55
|
+
then `vidfarm stills ./work --sheet`, then look at the sheet.
|
|
56
|
+
12. **Print the summary line from §8 last, verbatim, filled in.** A report without it is an
|
|
57
|
+
unfinished job.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 0. Which model am I, and what does my subscription include?
|
|
62
|
+
|
|
63
|
+
Two independent questions. Answer both once, out loud, at the start of the session. Write
|
|
64
|
+
the answers into `CONTEXT.md` so the next session does not re-derive them.
|
|
65
|
+
|
|
66
|
+
### 0a. Strong or weak?
|
|
67
|
+
|
|
68
|
+
| You are | If you are | Then |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| **strong** | Claude Opus / Sonnet (4.5+), GPT-5 class, Gemini Pro (3+ thinking), Fable | Build the normal way. Read `https://vidfarm.cc/skill.md` and the format harness directly. This file is optional. |
|
|
71
|
+
| **weak** | Gemini Flash / Flash-Lite, DeepSeek, Kimi, GLM, MiniMax, Grok, Qwen, Llama, any "-mini" / "-lite" / "-turbo" / distilled tier | **Follow this file.** |
|
|
72
|
+
| **unsure** | you cannot name your own model, or you are a router that may swap tiers mid-task | **Treat yourself as weak.** |
|
|
73
|
+
|
|
74
|
+
**Unsure is not a tie — it resolves to weak.** A strong model that follows this harness
|
|
75
|
+
loses a little freedom and still ships a good video. A weak model that skips it ships
|
|
76
|
+
something the client rejects. The costs are not symmetric.
|
|
77
|
+
|
|
78
|
+
Two honest self-tests, if the label does not settle it:
|
|
79
|
+
|
|
80
|
+
- Have you, in this session, written more than ~80 lines of HTML/CSS/GSAP that rendered
|
|
81
|
+
correctly on the **first** `vidfarm render`? If no — weak.
|
|
82
|
+
- Can you hold the whole composition, the format harness, and the client brief in your head
|
|
83
|
+
at once without re-reading? If no — weak.
|
|
84
|
+
|
|
85
|
+
### 0b. Does my own subscription include media generation?
|
|
86
|
+
|
|
87
|
+
This changes what `minimize` (the $0 cost mode) is allowed to do.
|
|
88
|
+
|
|
89
|
+
| Host agent | Image | Voice / TTS | Transcribe / STT | Video |
|
|
90
|
+
|---|---|---|---|---|
|
|
91
|
+
| **Google Antigravity** (Gemini) | **Yes** | **Yes** | **Yes** | **Check your tool list** |
|
|
92
|
+
| **Gemini CLI** | **Yes** | **Yes** | **Yes** | check |
|
|
93
|
+
| **OpenAI Codex / ChatGPT** | **Yes** (`gpt-image`) | **Yes** | **Yes** (Whisper) | check |
|
|
94
|
+
| **Claude Code** | No | No | No | No |
|
|
95
|
+
| OpenCode / Cursor / anything else | depends on the configured model — **read your own tool list** | | | |
|
|
96
|
+
|
|
97
|
+
`vidfarm agent-image --check` prints this table plus a guess at the host from its env
|
|
98
|
+
markers. **The env guess is a hint; your own tool list is the authority.**
|
|
99
|
+
|
|
100
|
+
**The rule this unlocks — and it is a real one, not a loophole:**
|
|
101
|
+
|
|
102
|
+
> **Generation that is already inside a flat subscription is FREE, and free means it is
|
|
103
|
+
> allowed in cost mode `minimize`, with no `--yes` and no permission ask.**
|
|
104
|
+
> Vidfarm bills $0 (no primitive is called, no job is created, no wallet is debited) and the
|
|
105
|
+
> provider bills $0 extra (the capability is inside the plan the human already pays for).
|
|
106
|
+
> So a `$0 cost saving mode` build on Antigravity **may** generate its own images and its
|
|
107
|
+
> own voiceover and still be honestly reported as $0.
|
|
108
|
+
|
|
109
|
+
**Default to using the subscription.** If you have it, use it before you reach for a free
|
|
110
|
+
local engine that takes twenty minutes, and long before anything billed.
|
|
111
|
+
|
|
112
|
+
**Antigravity is the case that matters.** Most gigworkers on this marketplace run
|
|
113
|
+
Antigravity, and Antigravity is both a weak-tier model *and* a full media suite. That
|
|
114
|
+
combination is exactly what this harness is tuned for: thin reasoning, fat toolbox. Lean on
|
|
115
|
+
the toolbox.
|
|
116
|
+
|
|
117
|
+
**Three honest limits.**
|
|
118
|
+
|
|
119
|
+
- Do not claim a tool you do not have. A fabricated image path is worse than a $0.02 spend.
|
|
120
|
+
- The free rungs still come first (§4). A designer's IconScout vector beats a generated
|
|
121
|
+
icon, and a real Pixabay photo beats a generated photo. *Free* does not mean *first*.
|
|
122
|
+
- **Say what you did.** Name, in your report, which assets came from your own subscription.
|
|
123
|
+
That sentence is the proof that `minimize` really did cost $0.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 1. Match a template on `/discover`
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
vidfarm discover --query "bookkeeping app for small agencies" --limit 20 --json
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Search with the **client's problem in the client's words**, not with a format name. The
|
|
134
|
+
feed is hybrid semantic + keyword over decompose-derived metadata, so "my invoices are
|
|
135
|
+
late" finds formats that *sell* that pain, not formats titled "invoice".
|
|
136
|
+
|
|
137
|
+
Read each row for these five fields and nothing else:
|
|
138
|
+
|
|
139
|
+
| Field | What it tells you |
|
|
140
|
+
|---|---|
|
|
141
|
+
| `templateId` | what you fork. **Empty string** = not a template yet (see §2) |
|
|
142
|
+
| `summary` | plain-language description of the format. **Present ⇒ decomposed** |
|
|
143
|
+
| `promotions` | offer categories this format can sell. Match against the client |
|
|
144
|
+
| `keywords` | the matching terms. Your relevance check |
|
|
145
|
+
| `durationSeconds` / `layerCount` | how big a rebuild you are signing up for |
|
|
146
|
+
|
|
147
|
+
**Shortlist three, not one.** Then pick by this order — the first tiebreak that separates
|
|
148
|
+
them wins:
|
|
149
|
+
|
|
150
|
+
1. `promotions` overlaps the client's category.
|
|
151
|
+
2. `summary` describes a structure you can fill with what the client actually has (if the
|
|
152
|
+
client has no footage of a person, do not pick a talking-head format).
|
|
153
|
+
3. `durationSeconds` under 30 and `layerCount` under ~25. **Smaller is better for you.**
|
|
154
|
+
4. It is already decomposed (§2). A tie goes to the one you do not have to decompose.
|
|
155
|
+
|
|
156
|
+
Two more places to look, both free, both worth checking before you settle:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
vidfarm discover --sort wow --limit 20 # the strongest formats in the catalog
|
|
160
|
+
vidfarm discover --sort recent --limit 20 # what landed this week
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Record the winner's `template_id` in `STORYBOARD.md` under `source_template`.** You will
|
|
164
|
+
cite it in your report and, on the marketplace, in the proof's `private_note`.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 2. Make sure it is decomposed
|
|
169
|
+
|
|
170
|
+
Fork it. Forking is free.
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
vidfarm fork <template_id> # → forkId
|
|
174
|
+
vidfarm pull <forkId> --dir ./work # composition.html + .harness/ to disk
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Now check what actually came down:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
ls ./work/.harness/ # context.json present ⇒ you have the decomposition
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
| What you see | State | Do this |
|
|
184
|
+
|---|---|---|
|
|
185
|
+
| `.harness/context.json` exists, with `viral_dna` populated | **decomposed** | Go to §3. Nothing to pay, nothing to run. |
|
|
186
|
+
| the fork is one `<video>` layer and `.harness/context.json` is thin or absent | **not decomposed** | Decompose it (below) |
|
|
187
|
+
| the `/discover` row had `templateId: ""` and an `inspirationId` | **an inspiration, not a template yet** | `vidfarm inspiration-decompose <inspirationId>` mints the template, then fork that |
|
|
188
|
+
|
|
189
|
+
**Decomposing, by tier:**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# PAID plan — the cloud decompose. One call, ~30-60s, ~$0.10, the licensed method.
|
|
193
|
+
vidfarm decompose <forkId>
|
|
194
|
+
|
|
195
|
+
# FREE tier / local devcli — decompose on your OWN tokens, $0.
|
|
196
|
+
vidfarm decompose <forkId> --local --dir ./work
|
|
197
|
+
# → stages HARNESS.md (the guide), a task file, and smart-decompose.template.json
|
|
198
|
+
# → you watch the source, fill smart-decompose.json, and that is your decomposition
|
|
199
|
+
# (paid accounts can then `--sync` it back so the whole network reuses it free)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Weak models: prefer a template that is ALREADY decomposed over one you have to decompose
|
|
203
|
+
yourself.** A free-tier `--local` decompose is a second hard reasoning task stacked on top
|
|
204
|
+
of the build, and it is the step most likely to go wrong. Spend the extra minutes in §1
|
|
205
|
+
finding a decomposed match instead. Re-run `vidfarm discover` with a different phrasing of
|
|
206
|
+
the client's problem before you accept an undecomposed template.
|
|
207
|
+
|
|
208
|
+
**Never re-decompose a template that is already decomposed.** It costs money and produces a
|
|
209
|
+
worse answer than the crowdsourced one you already have.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 3. Read the DNA and write the plan
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
vidfarm harness derive <forkId> --out ./work/HARNESS.md
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
That distils the decomposition into one editable file, keyed the same way the decompose
|
|
220
|
+
JSON is. Read these two strands first; the CLI will print one at a time:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
vidfarm harness show ./work/HARNESS.md --dna viral # hook / retention / payoff / emotional_punch
|
|
224
|
+
vidfarm harness show ./work/HARNESS.md --dna visual # cut rhythm, typography, b-roll, transitions
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### What each strand decides
|
|
228
|
+
|
|
229
|
+
| Strand | Answers | You may change it? |
|
|
230
|
+
|---|---|---|
|
|
231
|
+
| **Viral DNA** — hook, retention, payoff, `emotional_punch` | *why it worked* | **The SHAPE stays. The SUBJECT changes.** Rebuild each charge for the client. Never flatten the loop into a product statement. |
|
|
232
|
+
| **Visual DNA** — cut rhythm, caption style/placement, b-roll, transitions | *how it looks and moves* | Keep. This is the cheapest thing to keep and the most expensive thing to get right yourself. |
|
|
233
|
+
| **Structural DNA** — the beats, and which are load-bearing | *the skeleton* | Keep the count and the order. Beats marked critical / `must_keep` are untouchable. |
|
|
234
|
+
| **Audio DNA** — voice, bed, comedic timing | *the delivery* | Keep the timing and the energy. **Replace every word and every track.** See the warning below. |
|
|
235
|
+
| **Build DNA** — which paintbrush per beat | *what each beat is made of* | Keep. It already tells you which beats are clips, which are HTML, which need generation. |
|
|
236
|
+
|
|
237
|
+
> ### ⚠️ The single most expensive mistake in this harness
|
|
238
|
+
>
|
|
239
|
+
> **Replace the audio.** A fork carries the source brand's voiceover and the source brand's
|
|
240
|
+
> music. It is easy to rewrite all 57 captions, render clean, pass every check — and ship a
|
|
241
|
+
> video narrating **another company's product** over your client's captions. This has
|
|
242
|
+
> happened. It passed every automated gate at the time, because the gates only looked at
|
|
243
|
+
> captions.
|
|
244
|
+
>
|
|
245
|
+
> So before you render, run this and read every row:
|
|
246
|
+
>
|
|
247
|
+
> ```bash
|
|
248
|
+
> vidfarm qa ./work --harness ./HARNESS.md
|
|
249
|
+
> grep -o 'data-src="[^"]*"' ./work/composition.html | sort -u
|
|
250
|
+
> ```
|
|
251
|
+
>
|
|
252
|
+
> **Every audio `data-src` must point at a file YOU put there.** If any audio asset still
|
|
253
|
+
> resolves to the source template's storage, you are not done. Ticking this off from memory
|
|
254
|
+
> does not count — paste the command's output into your report.
|
|
255
|
+
|
|
256
|
+
### Then write `STORYBOARD.md`
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
vidfarm storyboard ./work --init --frames "Hook,Problem,Reveal,CTA"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
One row per beat from the Structural DNA. Fill, per row:
|
|
263
|
+
|
|
264
|
+
- `scene` — what the beat shows, in the client's world
|
|
265
|
+
- `duration` — **copy the source beat's duration.** Do not re-time. The rhythm is the DNA.
|
|
266
|
+
- `voiceover` — the new line, written for the client
|
|
267
|
+
- `src` — **which rung of §4 this asset is coming from.** Leave it blank and §4 has no
|
|
268
|
+
work-list.
|
|
269
|
+
|
|
270
|
+
A plan is free to redo. A rendered beat is not.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 4. Procure every raw — one pass, before you edit
|
|
275
|
+
|
|
276
|
+
**This is the half of the job that decides whether the video is good, and it is the half
|
|
277
|
+
weak models skip.** You are not authoring pixels; you are *casting*. Casting is a search
|
|
278
|
+
problem, and search is something you are good at.
|
|
279
|
+
|
|
280
|
+
Do not open `composition.html` until every `src` cell in `STORYBOARD.md` names a file on
|
|
281
|
+
disk or a durable vidfarm URL.
|
|
282
|
+
|
|
283
|
+
### The ladder — visuals
|
|
284
|
+
|
|
285
|
+
Walk it top to bottom. **Stop at the first rung that answers the beat.** Rungs are ordered
|
|
286
|
+
by quality-per-cost, not just cost.
|
|
287
|
+
|
|
288
|
+
| # | Rung | Command | Cost |
|
|
289
|
+
|---|---|---|---|
|
|
290
|
+
| 1 | **The client's shared folder** — footage, logo, product shots they already handed you | `vidfarm shared ls "$ASSETS_LINK"` · `vidfarm shared search "$ASSETS_LINK" "founder talking head"` · `vidfarm shared get "$ASSETS_LINK" --all --out ./work` | $0 |
|
|
291
|
+
| 2 | **The client's own website** — screenshots, UI states, mascots, spot art, palette, their own words | `vidfarm capture <url>` then `vidfarm mask <image> --crop x,y,w,h` to cut one element into a transparent PNG | $0 |
|
|
292
|
+
| 3 | **The client's vidfarm library** — anything they uploaded before | `vidfarm raws search "<meaning>"` · `vidfarm files` | $0 |
|
|
293
|
+
| 4 | **Public raws** — free, cleared, pre-tagged B-roll shelves | `vidfarm public-raws --categories` first, then `--category greenscreen --limit 20` | $0 |
|
|
294
|
+
| 5 | **Free stock** — Pixabay, Openverse, Iconify | `vidfarm media image "<meaning>"` · `vidfarm media video "<meaning>"` | $0 |
|
|
295
|
+
| 6 | **IconScout** — designer icons, stickers, illustrations, 3D props, Lottie | `vidfarm iconscout "<meaning>" --free` | $0 |
|
|
296
|
+
| 7 | **Your own subscription's image generator** (§0b) | `vidfarm agent-image "<subject>" --items "a,b,c"` → generate with your tool → `vidfarm sticker-pack ./sheet.png --items "a,b,c"` | **$0 — allowed in `minimize`** |
|
|
297
|
+
| 8 | **The human's hands** (interactive mode only) | `vidfarm handoff image` / `vidfarm handoff raws` — they run a free web generator, or pick clips themselves | $0, costs minutes |
|
|
298
|
+
| 9 | **Billed generation** | `vidfarm generate image` / `vidfarm generate video` | $0.01–$0.05 image, more for video. **`minimize` refuses without `--yes`** |
|
|
299
|
+
|
|
300
|
+
Rung 2 deserves its own note: **if the client gave you a URL, that site is your first asset
|
|
301
|
+
library.** Harvest the *assets* — product screenshots, brand illustrations, mascots, icons,
|
|
302
|
+
the palette, any animated WebP/GIF, and best of all a screen recording in the JS bundle
|
|
303
|
+
(that is A-roll). Never harvest the landing-page *furniture*: no CTA capsules, no feature
|
|
304
|
+
grids, no pricing cards. A video is not a web page.
|
|
305
|
+
|
|
306
|
+
### The ladder — voiceover
|
|
307
|
+
|
|
308
|
+
| # | Rung | Command | Cost |
|
|
309
|
+
|---|---|---|---|
|
|
310
|
+
| 1 | **The client's own recording**, if the shared folder has one | `vidfarm shared get …` | $0 |
|
|
311
|
+
| 2 | **Your subscription's TTS** (Antigravity / Gemini CLI / Codex — §0b) | generate the WAV/MP3 with your own tool, then `vidfarm put-file ./vo.mp3` | **$0 — allowed in `minimize`** |
|
|
312
|
+
| 3 | **Local Kokoro** — free, keyless, on-device | `vidfarm tts "<line>" --dir ./work` | $0, but **slow on weak hardware** |
|
|
313
|
+
| 4 | **ElevenLabs** — platform key or the client's own key | `vidfarm tts "<line>" --cloud` | billed |
|
|
314
|
+
|
|
315
|
+
**On weak hardware, rung 2 beats rung 3.** Local Kokoro on a 4 GB laptop does not fail, it
|
|
316
|
+
just takes twenty minutes and loses the deadline. Both are $0; pick the fast one.
|
|
317
|
+
|
|
318
|
+
Sample voices before you commit — free on every tier: `vidfarm voices --sample`.
|
|
319
|
+
|
|
320
|
+
### The ladder — music
|
|
321
|
+
|
|
322
|
+
1. **The real trending song.** The render is a review artifact; the human re-attaches the
|
|
323
|
+
same track from the platform's in-app music library at post time, where it is licensed.
|
|
324
|
+
Pull it with `vidfarm download-audio <post-url>`, keep it on its own `<audio>` layer at
|
|
325
|
+
its own `data-volume`, and **name the track in your report.**
|
|
326
|
+
2. **Free stock BGM** — `vidfarm media bgm "<vibe>"` (Openverse CC music, keyless).
|
|
327
|
+
3. **Generated** — `vidfarm music "<same vibe, same BPM>"`. Billed; no free local engine.
|
|
328
|
+
|
|
329
|
+
The exception to rule 1 is a paid ad placement, which the platform music library does not
|
|
330
|
+
cover. Say so once and go to rung 3.
|
|
331
|
+
|
|
332
|
+
### Before you leave §4
|
|
333
|
+
|
|
334
|
+
Every `src` cell in `STORYBOARD.md` is filled. Count them. If the count of filled cells is
|
|
335
|
+
less than the count of beats, **you are not finished with §4** — going to §5 now is how a
|
|
336
|
+
$0 video turns into a $3 one, or into a beat you rewrite twice.
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 5. Adapt the composition
|
|
341
|
+
|
|
342
|
+
Now open it. Parse, edit, re-serialize the DOM — **never build composition HTML by string
|
|
343
|
+
concatenation.**
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
vidfarm serve --fork <forkId> # free local editor + render loop at localhost:3000
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### What you are doing, precisely
|
|
350
|
+
|
|
351
|
+
You are running a **transplant**, beat by beat, down `STORYBOARD.md`. For each beat:
|
|
352
|
+
|
|
353
|
+
1. Find the source layer (`vidfarm pull` printed the scene/layer keys).
|
|
354
|
+
2. Swap its `data-src` for your procured asset.
|
|
355
|
+
3. Rewrite its text for the client.
|
|
356
|
+
4. **Leave `start` and `duration` alone** unless the Structural DNA says that beat is free.
|
|
357
|
+
|
|
358
|
+
### Keep vs replace — the line
|
|
359
|
+
|
|
360
|
+
| Keep — this is the DNA | Replace — this is the dressing |
|
|
361
|
+
|---|---|
|
|
362
|
+
| beat count and beat order | every clip, every image, every sticker |
|
|
363
|
+
| each beat's `start` and `duration` | every caption word |
|
|
364
|
+
| the cut rhythm and the transitions | the palette, if the client has a brand |
|
|
365
|
+
| the caption identity — font, size, placement, background style | the voiceover, every line of it |
|
|
366
|
+
| the hook's *shape* and the payoff's *position* | the music bed |
|
|
367
|
+
| any beat marked critical / `must_keep` | the offer, the handle, the CTA |
|
|
368
|
+
|
|
369
|
+
### "It is okay to heavily alter it"
|
|
370
|
+
|
|
371
|
+
Yes. Cut a beat that the client's story does not have. Merge two. Replace a live-action
|
|
372
|
+
beat with a sticker beat because that is what you could procure. **What you may not do is
|
|
373
|
+
alter the *structure* casually** — if you drop a beat, drop it deliberately, and say in
|
|
374
|
+
your report which one and why.
|
|
375
|
+
|
|
376
|
+
### Overfitting is the goal, not the risk
|
|
377
|
+
|
|
378
|
+
You will produce something that looks a lot like one specific existing template. **That is
|
|
379
|
+
the correct outcome.** The catalog holds thousands of decomposed templates and the client
|
|
380
|
+
sees one video. The variety lives in the *catalog*, not in your improvisation — so import
|
|
381
|
+
variety by picking a different template next time, never by inventing on top of this one.
|
|
382
|
+
|
|
383
|
+
### The standards still bind
|
|
384
|
+
|
|
385
|
+
Everything in `https://vidfarm.cc/skill.md` §6 applies and overrides your defaults. The
|
|
386
|
+
four that weak models break most often:
|
|
387
|
+
|
|
388
|
+
- **The first frame is the thumbnail.** A real visual and the hook words at `start:0`. No
|
|
389
|
+
fade-up, no title card, no logo. Check it: `vidfarm stills ./work --at 0`.
|
|
390
|
+
- **No HTML slop.** Could you have made this element inside TikTok's own editor? If you
|
|
391
|
+
reached past that — a padded capsule, a border, a gradient fill, a blur panel, a card, a
|
|
392
|
+
CTA "button", a feature grid — cut it. **Nothing in a video is clickable.**
|
|
393
|
+
- **Captions: five fonts only** — TikTok Sans, Montserrat (700–900), Abel, Source Code Pro,
|
|
394
|
+
Yesteryear. Anything else falls back to a web sans at render and the video looks generic.
|
|
395
|
+
Specimens: <https://vidfarm.cc/fonts>.
|
|
396
|
+
- **Cut ruthlessly.** First assembly is 30–50% too long.
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## 6. Render, gate, look
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
vidfarm qa ./work --harness ./HARNESS.md # free, local, machine-settled checks
|
|
404
|
+
vidfarm render <forkId> --dir ./work # renders on THIS machine — $0.00
|
|
405
|
+
vidfarm stills ./work --sheet # contact sheet → read it as ONE image
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
**Run the gate as a command. Do not tick it off from memory.** A check you transcribe into
|
|
409
|
+
your report instead of running is not a check, and this is the failure mode weak models hit
|
|
410
|
+
hardest: reporting a pass on the half the CLI never judged.
|
|
411
|
+
|
|
412
|
+
Three things the CLI cannot judge, which you must answer honestly:
|
|
413
|
+
|
|
414
|
+
- **Audio provenance.** Paste the `grep` output from §3. Every audio `data-src` is yours.
|
|
415
|
+
- **The contact sheet.** One type scale, one palette, deliberate pacing, clean joins. If
|
|
416
|
+
two beats look like they came from different videos, they did — fix it.
|
|
417
|
+
- **The first three seconds.** Play only those and stop. A stranger should be able to say
|
|
418
|
+
what kind of thing this is and roughly who it is for. "Something about audio" is a fail.
|
|
419
|
+
|
|
420
|
+
If `qa` reports a defect, fix it and re-run. One fix round is normal.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## 7. Where this hands off
|
|
425
|
+
|
|
426
|
+
| You are | Go to |
|
|
427
|
+
|---|---|
|
|
428
|
+
| making a video for your own client / your own brand | `https://vidfarm.cc/skill.md` §6 for the standards, then ship |
|
|
429
|
+
| an **Agentic Clipper** earning on the marketplace | `https://vidfarm.cc/agentic-clipper.md` — the review gate, the watermarked proof, and the clean master in `private_note` |
|
|
430
|
+
| a **buyer** commissioning videos | `https://vidfarm.cc/marketplace-buyer.md` |
|
|
431
|
+
|
|
432
|
+
**If the task named a `format_harness`, that file still wins over your own judgement.** This
|
|
433
|
+
harness tells you *how to work*; the format harness tells you *what to build*. Read the
|
|
434
|
+
format harness as your **grading rubric** — its `checks:` block, its forbidden text list,
|
|
435
|
+
its safe-zone rules — and get there by the road in §1–§6 rather than by authoring it from
|
|
436
|
+
the prose.
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## 8. The summary line — print this LAST, filled in
|
|
441
|
+
|
|
442
|
+
Copy it, fill every field, and put it at the end of your report. A field you cannot fill is
|
|
443
|
+
a step you did not do.
|
|
444
|
+
|
|
445
|
+
```
|
|
446
|
+
FLASH-HARNESS RESULT
|
|
447
|
+
model_tier: weak | strong (§0a)
|
|
448
|
+
subscription_media: image=Y/N tts=Y/N stt=Y/N (§0b)
|
|
449
|
+
cost_mode: minimize | hybrid | rich-ai | pure-videogen
|
|
450
|
+
source_template: template_...
|
|
451
|
+
decomposed_by: already | cloud | local | inspiration-mint
|
|
452
|
+
format_harness: <name or "none — freestyled">
|
|
453
|
+
beats: <kept>/<source total> dropped: <which, and why>
|
|
454
|
+
assets_by_rung: shared=<n> website=<n> raws=<n> stock=<n> iconscout=<n> subscription=<n> billed=<n>
|
|
455
|
+
audio_replaced: <n>/<n> audio data-src now point at my own files
|
|
456
|
+
voiceover_source: client | subscription-tts | kokoro-local | elevenlabs
|
|
457
|
+
music_source: trending "<track name>" | stock | generated | none
|
|
458
|
+
qa: <pass count>/<total> from `vidfarm qa`
|
|
459
|
+
render: local $0.00 | cloud $<amount>
|
|
460
|
+
billed_total: $<amount>
|
|
461
|
+
i_looked_at: contact sheet Y/N first-3-seconds Y/N
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## Why these rules
|
|
467
|
+
|
|
468
|
+
Read this section **after** you have followed the contract, not while.
|
|
469
|
+
|
|
470
|
+
**Why start from a decomposed template (rules 1–5).** Four rounds of work went into making
|
|
471
|
+
small models author vidfarm formats from written descriptions. All four were rejected. The
|
|
472
|
+
finding was not that the models are bad at video — it is that a 300-line prose harness asks
|
|
473
|
+
for a kind of held-in-mind synthesis that is exactly what the small tiers gave up in
|
|
474
|
+
exchange for speed. A decomposition is that synthesis, already done, by a frontier model,
|
|
475
|
+
and paid for by someone else. Taking it is not cheating; it is the product.
|
|
476
|
+
|
|
477
|
+
**Why the decomposition is worth money.** Decomposing one video into its scene-by-scene
|
|
478
|
+
viral DNA costs $1+ in AI spend if you do it yourself. Vidfarm's library is crowdsourced and
|
|
479
|
+
already decomposed, so you pull that breakdown for $0. That is the single largest saving
|
|
480
|
+
available to you, and it compounds across every video you make.
|
|
481
|
+
|
|
482
|
+
**Why "procure before you edit" is a rule and not advice (rules 6–8).** Building to a shot
|
|
483
|
+
you assumed existed is the most expensive mistake available: you either pay to generate it
|
|
484
|
+
or you rewrite a beat you already built. Deciding to source mid-build is how a $0 video
|
|
485
|
+
turns into a $3 one.
|
|
486
|
+
|
|
487
|
+
**Why the ladder is ordered the way it is (rule 8).** It is ordered by *quality per unit
|
|
488
|
+
cost*, not by cost alone. A designer's finished transparent vector from IconScout beats a
|
|
489
|
+
generated icon on both axes. A real photo beats a generated photo. Free does not mean first
|
|
490
|
+
— *best free* means first.
|
|
491
|
+
|
|
492
|
+
**Why overfitting is fine (rules 9–10).** A weak model's improvisation has a wide variance
|
|
493
|
+
and a low mean. A decomposed template has a narrow variance and a high mean. Across a batch
|
|
494
|
+
of thirty videos the client sees, the template path wins on every percentile that matters —
|
|
495
|
+
and the diversity the client experiences comes from you picking thirty *different*
|
|
496
|
+
templates, which is a search task, not a creative one.
|
|
497
|
+
|
|
498
|
+
**Why the gate must be run, not remembered (rule 11).** Every previous attempt at this
|
|
499
|
+
produced a report whose checks were green on exactly the axis that attempt was built to
|
|
500
|
+
improve, and silent on the axis that decided the verdict. The audio warning in §3 is the
|
|
501
|
+
canonical example: five videos, 57/57 captions correctly rewritten, every gate green, all
|
|
502
|
+
five narrating another company's product. **A green gate has been weak evidence about a
|
|
503
|
+
video every single time.** Looking at the render is the review that counts.
|
|
504
|
+
|
|
505
|
+
**Why the summary line is last (rule 12).** A summary printed first gets written from
|
|
506
|
+
intention. A summary printed last gets written from what happened.
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## The commands, in one block
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
# 0 — who am I
|
|
514
|
+
vidfarm agent-image --check
|
|
515
|
+
vidfarm cost-mode # minimize | hybrid | rich-ai | pure-videogen
|
|
516
|
+
vidfarm mode # interactive | autonomous
|
|
517
|
+
|
|
518
|
+
# 1 — match
|
|
519
|
+
vidfarm discover --query "<client's problem, their words>" --limit 20 --json
|
|
520
|
+
|
|
521
|
+
# 2 — fork and make sure it is decomposed
|
|
522
|
+
vidfarm fork <template_id>
|
|
523
|
+
vidfarm pull <forkId> --dir ./work
|
|
524
|
+
vidfarm decompose <forkId> # paid, cloud, ~$0.10
|
|
525
|
+
vidfarm decompose <forkId> --local --dir ./work # free tier, your own tokens, $0
|
|
526
|
+
|
|
527
|
+
# 3 — plan
|
|
528
|
+
vidfarm harness derive <forkId> --out ./work/HARNESS.md
|
|
529
|
+
vidfarm harness show ./work/HARNESS.md --dna viral
|
|
530
|
+
vidfarm harness show ./work/HARNESS.md --dna visual
|
|
531
|
+
vidfarm storyboard ./work --init --frames "Hook,Problem,Reveal,CTA"
|
|
532
|
+
|
|
533
|
+
# 4 — procure (one pass, every beat)
|
|
534
|
+
vidfarm shared ls "$ASSETS_LINK"
|
|
535
|
+
vidfarm capture <client-url>
|
|
536
|
+
vidfarm public-raws --categories
|
|
537
|
+
vidfarm media image "<meaning>"
|
|
538
|
+
vidfarm iconscout "<meaning>" --free
|
|
539
|
+
vidfarm agent-image "<subject>" --items "a,b,c" # your own subscription, $0
|
|
540
|
+
vidfarm tts "<line>" --dir ./work # or your subscription's TTS
|
|
541
|
+
vidfarm download-audio <post-url> # the real trending song
|
|
542
|
+
|
|
543
|
+
# 5-6 — adapt, gate, look
|
|
544
|
+
vidfarm serve --fork <forkId>
|
|
545
|
+
vidfarm qa ./work --harness ./HARNESS.md
|
|
546
|
+
vidfarm render <forkId> --dir ./work
|
|
547
|
+
vidfarm stills ./work --sheet
|
|
548
|
+
vidfarm publish <forkId>
|
|
549
|
+
```
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: google-news-to-video
|
|
3
|
+
video_type: Timely newsjack — a recent real event turned into a short video. Two searches, never one: news-search finds the STORY, video/image-search finds the VISUALS
|
|
4
|
+
# No `checks:` block on purpose. This harness governs the SOURCING method, not one
|
|
5
|
+
# fixed cut, so the shape of the finished video is set by whichever format harness
|
|
6
|
+
# you build it in (short-form, wall-text-pov-ugc, …). Stack them: `--harness
|
|
7
|
+
# google-news-to-video --harness short-form`.
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# Google News to Video — reusable prompt & method
|
|
2
11
|
|
|
3
12
|
Turns **a recent real event → a timely short video**, using two searches instead of one.
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unique-product-explainers
|
|
3
|
+
video_type: Bulk product explainers — N customer URLs into N product-introduction videos that do not look like each other. Differentiation as an input, frame-level review, measured verification
|
|
4
|
+
# No `checks:` block on purpose. This harness governs a BATCH and its anti-convergence
|
|
5
|
+
# rules; the per-video shape comes from the format harness each variant is built in.
|
|
6
|
+
# Stack them: `--harness unique-product-explainers --harness product-explainer`.
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Unique Product Explainer Videos — reusable prompt & method
|
|
2
10
|
|
|
3
11
|
Turns **N customer URLs → N product-introduction videos that do not look like each other**,
|