@officexapp/vidfarm-devcli 0.21.43 → 0.21.46
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/editor-capabilities/SKILL.md +4 -0
- package/.agents/skills/vidfarm/SKILL.md +95 -17
- package/.agents/skills/vidfarm/harnesses/explainer.HARNESS.md +1 -1
- package/.agents/skills/vidfarm/harnesses/product-demo.HARNESS.md +2 -0
- package/.agents/skills/vidfarm/harnesses/short-form.HARNESS.md +1 -0
- package/.agents/skills/vidfarm/recipes/local-edit-render-approve.md +1 -1
- package/.agents/skills/vidfarm/recipes/onboard-a-new-director.md +1 -1
- package/.agents/skills/vidfarm/references/agent-included-imagegen.md +75 -0
- package/.agents/skills/vidfarm/references/assets-and-sourcing.md +152 -2
- package/.agents/skills/vidfarm/references/automation-and-local-dev.md +22 -9
- package/.agents/skills/vidfarm/references/browser-harness.md +93 -0
- package/.agents/skills/vidfarm/references/content-ideas.md +232 -10
- package/.agents/skills/vidfarm/references/core-workflows.md +11 -1
- package/.agents/skills/vidfarm/references/editor-workflows.md +39 -0
- package/.agents/skills/vidfarm/references/onboarding.md +1 -1
- package/.agents/skills/vidfarm/references/primitives.md +51 -0
- package/.agents/skills/vidfarm-media/SKILL.md +2 -0
- package/SKILL.director.md +775 -42
- package/SKILL.md +157 -115
- package/crowdsourcing.md +417 -3
- package/dist/src/cli.js +750 -34
- package/dist/src/devcli/agent-imagegen.js +181 -0
- package/dist/src/devcli/browser-harness.js +384 -0
- package/dist/src/devcli/clip-store.js +41 -3
- package/dist/src/devcli/consult.js +14 -0
- package/dist/src/devcli/cost-mode.js +23 -3
- package/dist/src/devcli/doctor.js +52 -3
- package/dist/src/devcli/hyperframes-cli.js +11 -1
- package/dist/src/devcli/local-render.js +4 -7
- package/dist/src/devcli/marketplace-gigs.js +623 -0
- package/dist/src/devcli/qa-check.js +89 -1
- package/dist/src/devcli/shared-folder.js +387 -0
- package/dist/src/devcli/skill-docs.js +61 -7
- package/dist/src/devcli/stills.js +4 -8
- package/dist/src/lib/ffprobe-path.js +64 -0
- package/dist/src/lib/render-media-prep.js +2 -11
- package/dist/src/services/clip-curation/ffmpeg.js +4 -15
- package/dist/src/services/clip-curation/index.js +1 -1
- package/dist/src/services/clip-curation/local-agent.js +6 -2
- package/dist/src/services/clip-curation/media-select.js +146 -3
- package/experimental/google-news-to-video.md +235 -0
- package/package.json +8 -150
- package/public/assets/file-directory-app.js +35 -35
- package/public/assets/homepage-client-app.js +15 -15
- package/public/serve-shells/library-files.html +5 -1
- package/public/serve-shells/library-raws.html +10 -1
- package/public/serve-shells/tools-clipper.html +5 -1
- package/public/serve-shells/tools-image.html +5 -1
- package/public/serve-shells/tools-video.html +5 -1
package/SKILL.md
CHANGED
|
@@ -1,152 +1,194 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vidfarm
|
|
3
|
-
description:
|
|
3
|
+
description: Entry point for making, editing, and rendering short-form video with Vidfarm. Use when the task is to create a video, ad, explainer, or social clip; to edit or re-theme an existing composition; to source footage or audio; or to run a batch of video variants. Routes to the full director skill and the `vidfarm` CLI.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Vidfarm —
|
|
6
|
+
# Vidfarm — agent entry point
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Vidfarm builds video from HTML. You fork a published template, edit it on a timeline, render to MP4, and share. Because the source is a DOM, every edit is deterministic, diffable, re-themeable, and scriptable.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This page is the router. It holds the setup, one worked example, the standards, and the file index. It does **not** hold the workflows — fetch those from the index at the bottom when a task needs them.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
1. **Install the `vidfarm` devcli** — `npm i -g @officexapp/vidfarm-devcli`. It wraps every REST route, runs a free local editor + render loop, and is by far the smoothest way to drive Vidfarm.
|
|
14
|
-
2. **Log in** — `vidfarm login <email>` (one-time email code), or if you already hold a key: `vidfarm login --api-key <key>` / set `VIDFARM_API_KEY` and run `vidfarm login`. This persists the credential so every later command and `vidfarm serve` just work.
|
|
12
|
+
## 1. Setup
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
```bash
|
|
15
|
+
npm i -g @officexapp/vidfarm-devcli # `vidfarm` — wraps every REST route
|
|
16
|
+
npm i -g hyperframes # Vidfarm's own render engine (whitelabel; reach it via `vidfarm hf`)
|
|
17
|
+
vidfarm login <email> # one-time email code; or --api-key <key>, or VIDFARM_API_KEY
|
|
18
|
+
vidfarm doctor # verifies vidfarm + ffmpeg + hyperframes + Chrome
|
|
19
|
+
vidfarm skills add vidfarm # install the full director skill on disk — do this
|
|
20
|
+
vidfarm serve # free local editor + render loop at localhost:3000
|
|
21
|
+
vidfarm browser setup # optional: drive the user's own Chrome — FREE footage sourcing
|
|
22
|
+
```
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
**Image generation you already pay for is free — check before you spend or go without.** If the agent driving this terminal includes image generation in its own subscription (Google Antigravity / Gemini CLI, OpenAI Codex / ChatGPT — **Claude Code does not**, Anthropic ships no image model), generating a graphic bills Vidfarm $0 and the provider $0 extra. That makes it legal in cost mode `minimize`, with no `--yes`. `vidfarm agent-image --check` answers "do I have it here?"; `vidfarm agent-image "<subject>" --items "a,b,c"` prints the prompt, the key-plate rules and the cut + import commands. Free stock and IconScout still come first. Full page: `references/agent-included-imagegen.md`.
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
**`vidfarm browser setup` is the one optional install worth offering unprompted.** It installs [browser-harness](https://github.com/browser-use/browser-harness), which attaches you to the user's running Chrome over CDP. That makes `vidfarm browse videos|images|news|page "<query>"` a **$0 substitute for the paid `video-search` / `image-search` / `news-search` / `download-video` primitives** — the routes a free-plan user otherwise hits a 402 on. Offer it to every free-plan user and everyone in cost mode `minimize`, ask before installing (it drives their personal browser), and read `references/browser-harness.md` before the first browse.
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
**Do not install ffmpeg first.** The devcli bundles `ffmpeg-static` and a per-platform
|
|
29
|
+
ffprobe, so ffmpeg is already there on macOS, Linux, and Windows x64. Run `vidfarm doctor`
|
|
30
|
+
and install a system ffmpeg **only if it reports ffmpeg missing** (`brew install ffmpeg`,
|
|
31
|
+
`apt install ffmpeg`, `winget install Gyan.FFmpeg`).
|
|
25
32
|
|
|
26
|
-
|
|
33
|
+
**Windows** — the two things worth knowing before the first install:
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
- Use **PowerShell**, not Git Bash or cmd. Node >= 22 is required (`winget install OpenJS.NodeJS.LTS`).
|
|
36
|
+
- If the install is slow, exclude the npm folders from Defender's real-time scan. It scans
|
|
37
|
+
every extracted file, which dominates first-run setup time:
|
|
38
|
+
```powershell
|
|
39
|
+
Add-MpPreference -ExclusionPath "$env:APPDATA\npm", "$env:APPDATA\npm-cache", "$env:LOCALAPPDATA\npm-cache"
|
|
40
|
+
```
|
|
41
|
+
- `better-sqlite3` is an **optional** native module. If it fails to build, that is not a broken
|
|
42
|
+
install — only `vidfarm clips` (the local clip library) is unavailable. Everything else,
|
|
43
|
+
including local render, works. To enable it, install "Desktop development with C++" from
|
|
44
|
+
the Visual Studio Installer and reinstall.
|
|
45
|
+
- Windows on ARM has no prebuilt ffmpeg/ffprobe. Install a system ffmpeg and put it on PATH.
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
Work in **one folder per brand or offer** (`~/vidfarm/<brand>/`). Run every command from it, or pass `--dir`. Strategy documents, `STORYBOARD.md`, `brand-assets/`, `raws/` and `renders/` all land there, so a session weeks later reads the history back instead of re-interviewing the user.
|
|
31
48
|
|
|
32
|
-
|
|
33
|
-
|---|---|---|
|
|
34
|
-
| **minimize** | **$0 — explicitly free** | free local compute + free stock media; no AI spend at all |
|
|
35
|
-
| **hybrid** *(recommended)* | **~$0.01–$1** | free where free, pay AI only where it clearly wins |
|
|
36
|
-
| **rich-ai** | **$1+** | AI video gen buys **reusable greenscreen raws** — keyed once, animated/remixed in hyperframes HTML/CSS, then **saved to the library** so later videos reuse them for ~$0 |
|
|
37
|
-
| **pure-videogen** | **$5+** | every shot is generated: text script → image storyboard → frame-by-frame scene generation. No reuse, no HTML motion |
|
|
49
|
+
**If that folder already exists, read `CONTEXT.md` and `OFFER.md` before you ask the user anything.**
|
|
38
50
|
|
|
39
|
-
|
|
51
|
+
No CLI? The REST API covers the same surface. Auth header is `vidfarm-api-key`. Loop is fork → `PUT composition.html` → `render` → poll. Map: `references/rest-api.md`.
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
## 2. The core model: three paintbrushes
|
|
42
54
|
|
|
43
|
-
|
|
55
|
+
Every visual on the timeline comes from one of three sources. Try them in this order — it is cheaper and usually better.
|
|
44
56
|
|
|
45
|
-
|
|
57
|
+
1. **Raw clips** — cut and remix existing footage. Cheapest, and the workhorse. Check `vidfarm public-raws --categories` (free pre-tagged shelves) before hunting or generating anything.
|
|
58
|
+
2. **HTML/JS hyperframes** — motion from CSS/GSAP/anime.js, animated text, image elements, data-viz. Cheap, deterministic, infinitely re-skinnable.
|
|
59
|
+
3. **AI generation** — image, video, voice, music. Most expensive, AI *video* especially. Use only where the first two genuinely cannot cover the beat.
|
|
46
60
|
|
|
47
|
-
|
|
61
|
+
A capable agent can replicate a template entirely on brush 1 and 2, on the free tier, with no wallet.
|
|
48
62
|
|
|
49
|
-
|
|
63
|
+
## 3. Worked example — one video, end to end
|
|
50
64
|
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
```bash
|
|
66
|
+
vidfarm ideas --topic "cold email tool for agencies" # free, offline → content-ideas.md
|
|
67
|
+
vidfarm storyboard ./work --init --frames "Hook,Problem,Reveal,CTA" # plan first — free to redo
|
|
68
|
+
vidfarm templates search "ugc testimonial" # find a published template
|
|
69
|
+
vidfarm fork <templateId> # → forkId
|
|
70
|
+
vidfarm pull <forkId> --dir ./work # composition.html + .harness/ to disk
|
|
71
|
+
vidfarm public-raws --category greenscreen --limit 20 # source footage, $0
|
|
72
|
+
# edit ./work/composition.html — parse, edit, re-serialize the DOM; never string-concat
|
|
73
|
+
vidfarm tts "Your cold emails are landing in spam." --dir ./work # free local voice
|
|
74
|
+
vidfarm qa ./work # optional free local slop check
|
|
75
|
+
vidfarm render <forkId> --dir ./work # renders on THIS machine — $0.00
|
|
76
|
+
vidfarm stills ./work --sheet # contact sheet → review as one image
|
|
77
|
+
vidfarm publish <forkId> # push edits back to the cloud
|
|
78
|
+
```
|
|
53
79
|
|
|
54
|
-
**
|
|
80
|
+
**Plan before you build.** `STORYBOARD.md` is part of the composition format, not a scratch file: ordered frames with `duration`, `status`, `src`, `scene`, `voiceover`. The Vidfarm editor renders it as a Storyboard view with a contact sheet and per-frame comments, so it is the cheapest place to get approval. A plan is free to redo; a rendered scene is not.
|
|
55
81
|
|
|
56
|
-
`
|
|
82
|
+
`vidfarm render <forkId> --target cloud` is the explicit billed cloud render (~$0.01–$0.10). Everything above without `--target cloud` runs locally and free.
|
|
57
83
|
|
|
58
|
-
|
|
84
|
+
## 4. Router
|
|
59
85
|
|
|
60
|
-
|
|
86
|
+
| The user asks for | Do | Read |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| "Help me figure out what to make" | `vidfarm ideas --grid --topic "<offer>" --count 30` first — the list beats an interview | `references/onboarding.md` |
|
|
89
|
+
| "Give me a consultation" | the `brainstorm/*` chain: cold-start → awareness stages → angles → hooks. No AI key: `vidfarm consult` prints the prompt for **you** to answer, $0 | `references/onboarding.md` |
|
|
90
|
+
| "Find a template and start" | `vidfarm templates search` → `fork` → `pull` | `references/core-workflows.md`, `recipes/find-and-fork-template.md` |
|
|
91
|
+
| "Change / re-theme this video" | timeline edits, decompose, captions | `references/editor-workflows.md`, `recipes/retheme-template.md` |
|
|
92
|
+
| "Find footage / a clip of X" | public raws → own library → `vidfarm browse videos "<the shot>"` (free, your Chrome) or `vidfarm video-search` (paid, $0.0003/call) → generate last | `references/assets-and-sourcing.md` |
|
|
93
|
+
| "Make a graphic / sticker / illustration" in cost mode `minimize` | free stock → IconScout → `vidfarm mask` → **generate it with YOUR OWN image tool if this subscription includes one** (Antigravity / Gemini CLI, Codex / ChatGPT — Claude Code has none): `vidfarm agent-image "<subject>"`. $0, and no `--yes` needed | `references/agent-included-imagegen.md` |
|
|
94
|
+
| A free plan / a 402 / cost mode `minimize` on any search or download | `vidfarm browser setup`, then `vidfarm browse videos\|images\|news\|page "<q>"`. Never answer a sourcing ask with "that needs a paid plan." | `references/browser-harness.md` |
|
|
95
|
+
| "Make a video about what just happened" | two stages: `vidfarm news-search "<topic>" --fresh w` for the STORY, then `video-search` for the VISUALS | `vidfarm.cc/experimental/google-news-to-video.md` |
|
|
96
|
+
| "Download this video from `<url>`" | `vidfarm download-video <url>` (paid). Free plan gets a 402 — `vidfarm browse page "<url>"` and save it from their Chrome yourself, else have them download it, then `vidfarm put-file`. Never answer "I can't." | `references/browser-harness.md` |
|
|
97
|
+
| "Turn this thread / subreddit / profile into a video" | `vidfarm recycle <source>` — returns the raw decomposition, unranked; you pick the hook (paid) | `references/assets-and-sourcing.md` |
|
|
98
|
+
| "Create an avatar / spokesperson / talking head" | `vidfarm avatar "<who>" --say "<line>"` — a greenscreen talking-head video, keyed in the same job | `references/primitives.md` |
|
|
99
|
+
| "TTS / music / captions / background removal" | the primitive catalog | `references/primitives.md` |
|
|
100
|
+
| "Sticker pack" / cutout-art explainer | one greenscreen sheet holding every item, then split it: `vidfarm sticker-pack --generate "<theme>" --items "a,b,c"`. Never generate items one at a time. | `recipes/cutout-graphics-for-explainers.md` |
|
|
101
|
+
| "Post this again / to several accounts" | `vidfarm dedupe <mp4> --variants N` on the **exported file** — free, local, no re-render | `references/core-workflows.md` |
|
|
102
|
+
| Anything with the word "harness" | a named process, not a metaphor. `vidfarm harness derive <forkId>` for "the harness for this template_id" | `harnesses/README.md` |
|
|
103
|
+
| "Script / batch / 50 variants" | scripting mode: a pinned base fork, a loop varying ONE thing, plus a `HARNESS.md` | `references/automation-and-local-dev.md`, `recipes/bulk-scripting-with-a-harness.md` |
|
|
104
|
+
| "Which ad wins?" / "test these angles" | capacity → epochs/rounds → creative vs structured → `EXPERIMENTS_DIARY.md`. Do not improvise a testing plan. | `vidfarm.cc/experiments.md` |
|
|
105
|
+
| "Update / upgrade vidfarm" — or any 404 on a documented route | update the skill pack and the devcli **together** | `vidfarm.cc/update.md` |
|
|
106
|
+
|
|
107
|
+
## 5. Two questions to ask before you spend
|
|
108
|
+
|
|
109
|
+
Ask both once, early, then persist them. They are independent axes.
|
|
110
|
+
|
|
111
|
+
**Cost mode** — `vidfarm cost-mode <choice>`. Billed commands respect it; `minimize` refuses billed operations without `--yes`.
|
|
112
|
+
|
|
113
|
+
| Mode | Per video | Method |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| `minimize` | $0 | free local compute + free stock media only |
|
|
116
|
+
| `hybrid` *(default)* | ~$0.01–$1 | free where free, pay AI only where it clearly wins |
|
|
117
|
+
| `rich-ai` | $1+ | generate reusable greenscreen assets, key them, animate in HTML, save to the library for later reuse |
|
|
118
|
+
| `pure-videogen` | $5+ | script → storyboard stills → scene-by-scene generation. No reuse |
|
|
61
119
|
|
|
62
|
-
|
|
120
|
+
AI charges go to the user's own provider keys (`vidfarm add-provider-key`), not to Vidfarm credits, unless they deliberately run on the platform key.
|
|
63
121
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
122
|
+
**Hands mode** — `vidfarm mode interactive|autonomous`.
|
|
123
|
+
|
|
124
|
+
- `interactive` — at checkpoints you hand over a copy-paste brief and they hand a file back: an image prompt they run in a free web generator, or a keyword list for footage. Mint them with `vidfarm handoff image` / `vidfarm handoff raws`. Costs minutes, usually beats what an API budget buys.
|
|
125
|
+
- `autonomous` — you finish end to end with zero steps from them.
|
|
126
|
+
|
|
127
|
+
Two consequences worth stating out loud: `minimize + interactive` still gets custom art, for $0. `minimize + autonomous` gets none. Voice samples (`vidfarm voices --sample`, `--free --sample`) are free on both tiers — offer them either way.
|
|
128
|
+
|
|
129
|
+
## 5b. Production has phases — plan, collect, build
|
|
130
|
+
|
|
131
|
+
**Do not open the timeline before you know what footage you have.** Building to a shot you assumed existed is the most expensive mistake available: you either pay to generate it or rewrite a beat you already built. Four phases, in order — plan the shot list (`vidfarm storyboard --init`), collect assets for **every** beat in one pass, build, then review and cut.
|
|
132
|
+
|
|
133
|
+
The collection phase is where the cost mode actually bites:
|
|
134
|
+
|
|
135
|
+
- **`minimize`** — collection *is* the job, and being cheap is not being worse. Work the ladder: `public-raws --categories` → `media search` / `iconscout --free` → `raws search` (what they already own) → **browser control** (`vidfarm browse videos "<the shot>"`, $0) → mine it with `raws scan` / `clipper`. One long source cut eight ways beats one generated clip.
|
|
136
|
+
- **`minimize` + `interactive`** — buy quality with the user's hands, not their wallet. Direct them like an editor: hand over the shot list and let them pick clips themselves (`vidfarm handoff raws`), and hand over ONE prompt for a free web image generator to get a whole sticker sheet back (`vidfarm handoff image` → `vidfarm sticker-pack`). Both beat anything autonomous, at $0.
|
|
137
|
+
- **`hybrid`** — collect free first, then spend on the gaps only. AI image generation for the hero graphic, `vidfarm avatar` for a presenter; keep AI *video* for beats nothing static can carry.
|
|
138
|
+
- **`rich-ai` / `pure-videogen`** — collection becomes generation, and moves earlier. `rich-ai` mints reusable greenscreen raws that get keyed once and saved to the library; `pure-videogen` runs script → storyboard stills → scene-by-scene (`vidfarm sequence`). Even here, search what already exists before generating it.
|
|
139
|
+
|
|
140
|
+
Say the phase out loud when you switch. Deciding to source mid-build is how a $0 video turns into a $3 one.
|
|
141
|
+
|
|
142
|
+
## 6. Standards — these override your defaults
|
|
143
|
+
|
|
144
|
+
The standards themselves are not optional. `vidfarm qa <dir>` is — it is a free local checker for most of them, feedback rather than a gate. Nothing calls it, skipping it is fine, and it allows one fix round by default. **Watching the render is the review that counts.** Full reasoning: `references/hooks-and-virality.md` and `references/reviewing-renders.md`.
|
|
73
145
|
|
|
74
|
-
**
|
|
146
|
+
- **Write the four charges before the timeline.** Hook: first line is a complete clause naming a situation, on screen at `start:0`. Loop: one open question by 0:10, closing inside this video. Payoff: shown, not summarized. Bait: one ask, final beat. Banned openers — throat-clearing, a logo, a title card, a fade from black.
|
|
147
|
+
- **No HTML slop.** Test: could you have made this element inside TikTok's own editor? If you reached past that — a padded capsule, border, gradient fill, blur panel, card, CTA "button", benefit chips, feature grid — cut it. Nothing in a video is clickable. Emphasize with size, weight, caps, an accent colour, or a drawn mark.
|
|
148
|
+
- **No layout templates — judge the whole frame.** The stack is the tell, not the box: headline + subheadline + CTA centred in a well is a landing page even with every border, fill and capsule stripped off. Banned at frame level — a modal/dialog floating over a dimmed or blurred backdrop, a full-frame wash used to stage a floating block, nav/hero/feature-row sections, a blurred website screenshot as the background plate, document margins. Unstack it into time: hook at t=0, support line on the next cut, CTA spoken or a bare caption. Are you arranging words relative to each other, or relative to the picture? Two text runs at once is the ceiling.
|
|
149
|
+
- **Captions**: imported display font (Montserrat 700–900 default), ~36–64px on a 1080 frame, inside the 8%–85% safe zone, and within that band placed in the **emptiest part of the frame**. Long narration pages into 3–5-word cues. Exactly one of four backgrounds: `outline`, `plain`, active-word `spotlight`/`karaoke`, or a tight `highlight-solid` band.
|
|
150
|
+
- **The first frame is the thumbnail.** A real visual and the hook words at `start:0`. No fade-up, no entrance transition on the first clip. Check with `vidfarm stills <dir> --at 0`.
|
|
151
|
+
- **Cut ruthlessly.** First assembly is 30–50% too long. Delete every beat that the video survives without, then ripple the hole closed. Length is an output, not a target.
|
|
152
|
+
- **Review the whole video, never one frame.** Tile ~12 stills with `vidfarm stills <dir> --sheet` and read it as an image — one type scale, one palette, deliberate pacing, clean joins. Verify audio by measurement (~12–15 dB speech-over-bed, peak <0 dBFS). Report what you measured separately from what you judged. Your own "looks good" is the least reliable signal here.
|
|
153
|
+
- **Use the real trending song.** The render is a review artifact; the user re-attaches the same track from the platform's in-app music library at post time, where it is licensed. Pull it with `vidfarm download-audio <post-url>`, keep it on its own `<audio>` layer at its own `data-volume`, and name the track in your report. Exception: a paid ad placement is not covered — say so once and offer `vidfarm music "<same vibe, same BPM>"`.
|
|
154
|
+
- **Ask about deduplication before the render, not after.** "Is this going out more than once?" Answering early keeps it at render once → dedupe N.
|
|
75
155
|
|
|
76
|
-
|
|
156
|
+
## 7. Hard constraints
|
|
77
157
|
|
|
78
|
-
|
|
158
|
+
- Auth header is `vidfarm-api-key`. Not `Authorization: Bearer`.
|
|
159
|
+
- Never build composition HTML by string concatenation. Parse, edit, re-serialize the DOM.
|
|
160
|
+
- Render only through `POST /api/v1/compositions/:forkId/render`. Never call the renderer directly.
|
|
161
|
+
- Submissions are **not** idempotent. Every render and primitive POST charges again — check status before retrying.
|
|
162
|
+
- In the web editor, CSS/declarative motion only; JS animation adapters are stripped on save. Locally via `vidfarm serve`, the full adapters work.
|
|
163
|
+
- Treat `forkId` as an unguessable bearer token. Never put provider secrets in composition HTML or JSON.
|
|
79
164
|
|
|
80
|
-
##
|
|
165
|
+
## 8. Deeper knowledge — fetch on demand
|
|
81
166
|
|
|
82
|
-
|
|
167
|
+
If the devcli is installed, the whole pack is already on disk, pinned to that CLI version — no network, no account:
|
|
83
168
|
|
|
84
169
|
```bash
|
|
85
|
-
vidfarm skill ls
|
|
86
|
-
vidfarm skill search "greenscreen"
|
|
87
|
-
vidfarm skill show primitives
|
|
170
|
+
vidfarm skill ls # every file with sizes
|
|
171
|
+
vidfarm skill search "greenscreen" # grep it all, then open the file it names
|
|
172
|
+
vidfarm skill show primitives # shorthand or exact path
|
|
88
173
|
```
|
|
89
174
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- **Experimental prompts (index):** `https://vidfarm.cc/experimental` — methods under live testing. They are **not** part of the router and nothing above depends on them: read one only when the user asks for experimental prompts, or names one. Current list:
|
|
111
|
-
- **Unique Product Explainer Videos** — `https://vidfarm.cc/experimental/unique-product-explainers.md` — N customer URLs → N product-introduction videos that do not look like each other. Differentiation as an input, frame-level review, measured verification.
|
|
112
|
-
- **Skill pack index (what else is installable):** `https://vidfarm.cc/skill-pack/index.json`
|
|
113
|
-
- **Platform architecture (how it all fits together):** `https://vidfarm.cc/skill/vidfarm-platform`
|
|
114
|
-
|
|
115
|
-
For composition *authoring* craft (motion, keyframes, scene design), Vidfarm ships the **HyperFrames** suite — route broad "make me a video" requests through `https://vidfarm.cc/skill/hyperframes` first, then load only the workflow skill it selects.
|
|
116
|
-
|
|
117
|
-
## Router — where to go from the user's ask
|
|
118
|
-
|
|
119
|
-
1. "Help me figure out what to make" **or "give me a consultation"** → `references/onboarding.md`. **Lead with content ideas, not the interview**, unless they said "consultation": ask for their offer in one line, run `vidfarm ideas --topic "<line>"`, and hand back 20+ titled videos saved as `content-ideas.md` — offline, free, keyless, about a minute. It is the easiest first win, and what they say about the list is better interview material than an interview. A consultation *is* the `brainstorm/*` chain: cold-start interview → awareness stages → angles → hooks. Run the primitives; don't improvise the strategy in chat. **On devcli with no AI key or no credits, run it keyless: `vidfarm consult` prints the same prompt for YOU to answer, for $0** — never tell a keyless director the consultation is unavailable. Offer `vidfarm consult coldstart --short` (six fixed questions) to anyone who just wants a video today, tell them any question is skippable before you ask the first one, and keep every answer in `CONTEXT.md` in their working folder so the next session starts warm.
|
|
120
|
-
2. "Find a template and start" → `references/core-workflows.md`
|
|
121
|
-
3. "Change / re-theme this video" → `references/editor-workflows.md`
|
|
122
|
-
4. "Find footage / use our assets" → `references/assets-and-sourcing.md`
|
|
123
|
-
4b. **"Download this video/audio from <a website URL>"** → Vidfarm fetches it for you on a **paid plan**: `POST /api/v1/primitives/videos/download` (or `/audio/download`); devcli `vidfarm download-video <url>` / `vidfarm download-audio <url>`. Works on YouTube, TikTok, Instagram, X, and other supported posts; returns a durable Vidfarm file (photo/carousel posts → an ordered slideshow). **Free plan gets a 402 — don't call it. Tell the user (or, with browser automation, do it yourself) to open the URL in Chrome and download it from the page, then `vidfarm put-file ./the-file.mp4` to bring it in for $0.** Never answer "I can't download that." Details: `references/assets-and-sourcing.md`.
|
|
124
|
-
4b-ii. **"Tweet to TikTok" / "Reddit to TikTok" / "make a video out of this thread / subreddit / account"** → `vidfarm recycle <source>` (devcli), or `POST /api/v1/primitives/social/recycle` with `{ tracer, payload: { source_url, max_records } }`. It **decomposes** a Reddit thread (post + comments), a subreddit (its threads), an X thread (tweet + replies), or an X profile (their posts) into raw JSON — text, comment tree, media URLs, author avatar, engagement stats — and hands it back **unranked and unsummarized** so you pick the hook, the punchline comment, the stat. Auto-paginates via `nextCursor`; `max_records` is the spend ceiling. Brokers the reddit-lead-gen / x-lead-gen OfficeX apps and waits out their async job for you. **Paid plan.** Details: `references/assets-and-sourcing.md`.
|
|
125
|
-
4c. **"Create an avatar"** (spokesperson / presenter / host / UGC creator / talking head) → always a **talking-head VIDEO with spoken audio**, generated on an exact-key-color **greenscreen** plate and keyed off it in the same job → a **transparent presenter** you layer over any background. `vidfarm avatar "<who they are>" --say "<their line>" [--ref headshot.png]` / `POST /api/v1/primitives/videos/create-avatar`. Details: `references/primitives.md` → "Primitive: talking_avatar".
|
|
126
|
-
4d. **"Post this again / to several accounts / on another platform"** → **deduplication**. Platforms fingerprint uploads; the second copy of the same render gets suppressed as duplicate/reused content. `vidfarm dedupe <mp4> [--variants N]` runs on the **exported file** — free, local ffmpeg, **no re-render** — nudging skew/zoom/rotate/speed/saturation/grain a couple of percent and stripping container metadata, invisibly to a viewer. `--variants N` mints N copies distinct from the original *and from each other*, one per account/slot. Cloud twin: `POST /api/v1/primitives/media/dedupe`. Details: `references/core-workflows.md` → *Deduplicate before you publish*.
|
|
127
|
-
4e. **Anything with the word "harness"** — "create me a harness", "update the harness for this format", "give me the harness for this template_id" → a known, named process. `harnesses/README.md` for the three phrasings and the format; `recipes/bulk-scripting-with-a-harness.md` if it's a batch. The third phrasing means the **decomposition**: `vidfarm harness derive <forkId>`.
|
|
128
|
-
5. "Script / batch / render loop" → `references/automation-and-local-dev.md`
|
|
129
|
-
5b. **"Explainer with cutout/sticker art"** (flat illustrations on a stage, sticker sheets, "like those animated explainer videos") → `recipes/cutout-graphics-for-explainers.md`
|
|
130
|
-
6. "I need TTS / music / captions / background removal" → `references/primitives.md`
|
|
131
|
-
6b. **"Which ad wins?" / "test these angles" / "we post every day and want results"** → fetch <https://vidfarm.cc/experiments.md> and run the experimentation method (capacity → epochs/rounds → creative vs structured → `EXPERIMENTS_DIARY.md`). Do not improvise a testing plan; a round with two variables teaches nothing. To produce a bulk batch with gigworkers, pair it with <https://vidfarm.cc/crowdsourcing.md>.
|
|
132
|
-
7. **"Update / upgrade vidfarm"** (or anything that smells like a stale install — a missing command, a 404 on a documented route, a version mismatch) → fetch <https://vidfarm.cc/update.md> and follow it. Update the skill pack and the devcli **together**; updating one alone is the usual cause of "the skill says to do X but it fails."
|
|
133
|
-
|
|
134
|
-
## Non-negotiables
|
|
135
|
-
|
|
136
|
-
- Auth header is `vidfarm-api-key` — **not** `Authorization: Bearer`.
|
|
137
|
-
- Never build composition HTML by string concatenation — parse, edit, re-serialize the DOM.
|
|
138
|
-
- Render only through `POST /api/v1/compositions/:forkId/render`; never call the renderer directly.
|
|
139
|
-
- Submissions are **not idempotent** — every render/primitive POST charges again. Check status before retrying.
|
|
140
|
-
- **No HTML slop.** Compositions are HTML, but a video is not a web page. The test: *could you have made this element with the tools inside TikTok's own editor* (font, color, stroke, shadow, tight text box, rotation, animation presets, stickers, emoji, drawn marks)? If you reached past that — a padded capsule, a border, a gradient fill, a blur panel, a card — cut it. So: no CTA "buttons", no benefit chip/badge rows, **no single pill around a static stat or label** (`( 10 hrs / week )`, `( STEP 2 )` — the only legitimate capsule is the active-word `spotlight`/`karaoke` highlight), no frosted/bordered cards holding a headline + URL, no gradient text, feature grids, or bullet lists. Nothing in a video is clickable. Say it as timed text on the footage; emphasize with size, weight, ALL-CAPS, an accent color, or a drawn circle. Arrows, scribble/underline marks, italics, color pops, emoji, cut-out stickers, and mock social UI are fine.
|
|
141
|
-
- **Structure before polish — the four charges, written before the timeline.** 🪝 **Hook**: the first line is a complete clause naming a *situation*, not a label; on screen at `start:0` (chunk 1 is read before any audio). 🔄 **Loop**: one open question by 0:10, stated on screen, **closing inside this video**, with an answer the viewer can't guess. 😍 **Payoff**: shown, not summarized, before the final beat. 🎣 **Bait**: one ask, final beat + post caption. Banned openers: throat-clearing, a logo, a title card, a fade from black. Full harness: `references/hooks-and-virality.md`; checkable form: `vidfarm harness show hooks`.
|
|
142
|
-
- **Then cut ruthlessly — every second is precious.** First assembly is ~30–50% too long. **Deletion test** on every beat (delete it; if the video survives, it stays deleted); what's left must serve a charge. Cut intros, the wind-up before the claim, restatement, >0.35s silences, real-time process, establishing shots, and any tail after the last word — then **ripple the hole closed** or fluff becomes dead air. Not speed: keep the comedic beat, the payoff, and readable cue time. Length is an output. `vidfarm qa` flags `dead-air` / `dead-tail` / `slow-scene`.
|
|
143
|
-
- **The first frame is the thumbnail.** Frame 0 is one frame of ~30 in the first second, but it's the poster every feed and share link freezes on — so it's seen by more people than the video is. Never open on black, an empty frame, or a fade-up: a real visual at `start:0`, the hook words already up, and no *entrance* transition on the first clip (junction transitions between later clips are fine). Check it with `vidfarm stills <dir> --at 0`.
|
|
144
|
-
- **On devcli, `vidfarm qa <dir>` before every render.** Free, instant, local-only blocklist for the slop above + the first frame + the font regime. Feedback, not a gate (exits 0, never automatic). No REST/web equivalent. **It stops after 2 revisions of the same composition** — at the limit it withholds the finding list and tells you to ship or ask the human, because qa→fix→qa has no natural base case and some findings are deliberate style you will never "clear". Re-running qa without editing costs nothing; `--max-revisions <n>` (0 disables) and `--reset-revisions` are the escape hatches.
|
|
145
|
-
- **Review the finished video as a WHOLE, and never by one frame.** Agents build scene by scene, so every scene passes alone while the video drifts as a sequence — shifting margins, three type sizes, a wandering accent colour, N identically-long beats, a jarring join, a dead band under top-anchored content. Tile ~12 stills into one contact sheet — one command, `vidfarm stills <dir> --sheet` — and **read it as an image**: balance, spacing, one type scale, one palette, deliberate pacing, clean joins — then fix the *system*, not the one odd scene. Compare frames from two different scenes (a frozen render passes duration, frame-count and audio-hash checks), verify audio by measurement (~12–15 dB speech-over-bed, peak <0 dBFS) rather than "sounds fine", and report what you measured separately from what you judged. Your own "verified, looks good" is the least reliable signal here — it was wrong on every video of a 32-video batch. Method: `references/reviewing-renders.md`.
|
|
146
|
-
- **Ask about deduplication before you publish or bulk-produce.** "Is this going out more than once — several accounts, another platform, a re-post later? How many copies?" Ask *before* the render or the batch, not after: dedupe is a post-render ffmpeg pass, so answering early keeps it at **render once → dedupe N** instead of paying for a second render per slot. Then post each variant to a **different** account — two accounts posting the same variant defeats the point.
|
|
147
|
-
- **Ask one-time vs bulk before you build.** Volume = **scripting mode**: a pinned base fork, a loop varying ONE thing, and a **`HARNESS.md`** — the director's own written standard, because a fifty-video loop has no human watching every frame. `vidfarm harness init short-form --out ./work/HARNESS.md` (bases: `short-form`, `hooks`, `ugc-testimonial`, `explainer`, `product-demo`), then `vidfarm qa ./work --harness <name|path>` — stackable, any user file valid, auto-discovered from the work dir. Its `checks:` are machine-settled; its `- [ ]` items come back for **you** to answer honestly.
|
|
148
|
-
- **Caption regime is mandatory**: an imported display font (Montserrat default / TikTok Sans), weight 700–900, ~36–64px on a 1080-wide frame, inside the 8%–85% safe zone — and **inside that band, placed in the emptiest part of the frame** (look at a still; text over open sky beats a lower third over the subject, and usually needs no plate at all). Long narration is paged into 3–5-word kinetic cues, never one static wall of text. Exactly one of four backgrounds — `outline`, `plain`, an active-word `spotlight`/`karaoke` pill, or a tight-hugging `highlight-solid` band (radius ≤8px, no border/shadow/gradient/blur).
|
|
149
|
-
- In the web editor, CSS/declarative motion only (JS animation adapters are stripped on save); locally via `vidfarm serve` the full JS adapters work.
|
|
150
|
-
- Treat `forkId` as an unguessable bearer token. Never put provider secrets in composition HTML/JSON.
|
|
151
|
-
|
|
152
|
-
**Next step:** fetch `https://vidfarm.cc/skill/vidfarm`, then act — prefer a concrete first move (fork a template, hunt a clip, open the local editor) over more explanation.
|
|
175
|
+
Otherwise fetch `https://vidfarm.cc/skill-pack/vidfarm/files/<path>`. Load one file, not the set. The full rollup is `https://vidfarm.cc/skill/vidfarm`.
|
|
176
|
+
|
|
177
|
+
| Path | Read it when |
|
|
178
|
+
|---|---|
|
|
179
|
+
| `references/core-workflows.md` | discovery, auth, fork/publish/share, cost spectrum, dedupe |
|
|
180
|
+
| `references/editor-workflows.md` | timeline editing, decompose, captions, the replication harnesses *(largest file)* |
|
|
181
|
+
| `references/assets-and-sourcing.md` | Google search for footage, raws hunts, My Files, recurring characters, downloads |
|
|
182
|
+
| `references/agent-included-imagegen.md` | free custom art — image generation the AGENT's own subscription already includes, and why cost mode `minimize` allows it |
|
|
183
|
+
| `references/browser-harness.md` | free-plan sourcing and cost mode `minimize` — driving the user's Chrome as the $0 substitute for the paid search/download primitives |
|
|
184
|
+
| `references/automation-and-local-dev.md` | REST + devcli command table, scripting mode, the local serve loop |
|
|
185
|
+
| `references/hooks-and-virality.md` | before writing any hook, caption script, or re-theme |
|
|
186
|
+
| `references/reviewing-renders.md` | before reporting a video as done |
|
|
187
|
+
| `references/onboarding.md` | "help me figure out what to make", and the consultation flow |
|
|
188
|
+
| `references/content-ideas.md` | the idea banks — 50 frames × 5 awareness stages × 44 angles |
|
|
189
|
+
| `references/primitives.md` | video/image/news search, TTS, STT, music, avatars, overlays, background removal |
|
|
190
|
+
| `references/rest-api.md` | direct HTTP integration only |
|
|
191
|
+
| `recipes/*.md` | `find-and-fork-template` · `retheme-template` · `local-edit-render-approve` · `onboard-a-new-director` · `bulk-scripting-with-a-harness` · `cutout-graphics-for-explainers` |
|
|
192
|
+
| `harnesses/README.md` | anything harness-shaped — start here. Bases: `short-form` · `hooks` · `ugc-testimonial` · `explainer` · `product-demo` · `product-explainer` |
|
|
193
|
+
|
|
194
|
+
Also served at `vidfarm.cc`: `/experiments.md` (ad testing), `/crowdsourcing.md` (producing a batch with gigworkers), `/update.md` (upgrade runbook), `/experimental` (methods under live testing), `/skill/vidfarm-platform` (architecture), `/skill/hyperframes` (composition-authoring craft — route broad "make me a video" asks here first).
|