@officexapp/vidfarm-devcli 0.21.43 → 0.21.45
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 +2 -0
- package/.agents/skills/vidfarm/SKILL.md +37 -12
- package/.agents/skills/vidfarm/recipes/onboard-a-new-director.md +1 -1
- package/.agents/skills/vidfarm/references/assets-and-sourcing.md +97 -1
- package/.agents/skills/vidfarm/references/automation-and-local-dev.md +11 -5
- 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 +17 -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 +458 -31
- package/SKILL.md +117 -116
- package/crowdsourcing.md +44 -1
- package/dist/src/cli.js +544 -31
- package/dist/src/devcli/consult.js +14 -0
- package/dist/src/devcli/skill-docs.js +61 -7
- package/dist/src/services/clip-curation/index.js +1 -1
- package/dist/src/services/clip-curation/media-select.js +146 -3
- package/experimental/google-news-to-video.md +235 -0
- package/package.json +4 -1
- package/public/assets/file-directory-app.js +28 -28
- package/public/assets/homepage-client-app.js +15 -15
|
@@ -77,6 +77,8 @@ Audio is natively **multi-track**. The timeline mixes UNLIMITED simultaneous `<a
|
|
|
77
77
|
- **The headline move — split a combined original when recreating.** When the user recreates a template whose ORIGINAL had music + narration baked into ONE audio track, do NOT reproduce a single combined bed. Rebuild it as TWO independent tracks: a fresh narration track (`/api/v1/primitives/audio/speech`, or same-voice reword via `/api/v1/primitives/audio/regenerate-speech`) at ~1.0, and a separate real music track at ~0.1–0.2 — then mute or `remove_layer` the original combined source-audio layer so the old voice doesn't play under the new one. This hands the user independent voice/music volume and is the elegant workaround for AI TTS being unable to emit narration+music in one file.
|
|
78
78
|
- **Honesty (ties to the create-media rules):** you cannot un-mix / stem-separate the original's baked audio — the two tracks are BUILT from a fresh narration track PLUS a real music file (owned / user-provided / `browse_files` across `/files` and `/raws`), never a faked "music" layer and never the voice track duplicated. There is no music-generation primitive.
|
|
79
79
|
|
|
80
|
+
- **The real trending song belongs on the timeline — don't refuse it and don't sub in a generic bed.** This composition is a **review artifact**: when the user posts, they re-attach the same song from the platform's own in-app music library (TikTok / Reels / Shorts), licensed through the platform's agreements with the labels, so it is cleared where viewers hear it. It has to be in the render because the track *is* the edit — cut points, pacing, the drop, the meme association — and a review over a substitute bed judges a video nobody will post. Bring it in as **its own `add_layer kind=audio`** at its own `volume` (never baked into footage, never mixed into the voice stem), so the user mutes or swaps it in one action at upload; name the track in your reply. One limit, said once and then dropped: a **paid ad** placement is not covered by the in-app music license — for that cut, offer a swap to a generated/owned bed of the same vibe and BPM.
|
|
81
|
+
|
|
80
82
|
## Orient the cold viewer in the first 3 seconds (hard constraint)
|
|
81
83
|
|
|
82
84
|
The hook makes a stranger *want* to watch; orientation makes watching *possible*. The viewer has no context, did not choose this video, and has never heard of the subject — so by **~3s** they must be able to say **what kind of thing this is** (the category noun), **who it is for**, and **why it is on their screen** (the situation). The failure is not a bad first frame; it is a good video that **begins at beat two**, and the author can't see it because the author already knows.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vidfarm
|
|
3
|
-
description: Use Vidfarm as a director. Run a strategy **consultation** (the `brainstorm/*` chain — cold-start interview, awareness stages, persuasive angles, hooks, product placement). Answer "give me content ideas" / "what should I post" / "I need 30 videos this month" from the bundled 50
|
|
3
|
+
description: Use Vidfarm as a director. Run a strategy **consultation** (the `brainstorm/*` chain — cold-start interview, awareness stages, persuasive angles, hooks, product placement). Answer "give me content ideas" / "what should I post" / "I need 30 videos this month" from the bundled idea banks (50 content frames x 5 awareness stages x 44 problem angles). Browse/add inspiration videos, browse the free public raws catalog BY CATEGORY (curated shelves like scroll-stoppers/greenscreen/reaction — the cheapest way to source footage for one video, and a ready-made clip pool for bulk scripting N variants), fork a template into a composition, edit it in the Trackpad Editor (timeline-based like Premiere/DaVinci), auto-decompose source video into scenes, render to MP4, approve into a shareable post, and schedule it. Includes login, provider keys, discovery, versioning, uploads/downloads, and billing. Every step is available as raw REST; `vidfarm-devcli` wraps those routes and composes the file-backed scripting flows.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Vidfarm Director
|
|
@@ -248,19 +248,28 @@ Present both harnesses to the director, recommend (A) unless they've asked for p
|
|
|
248
248
|
|
|
249
249
|
**Free tier vs. paid — who does the decomposition, and on whose tokens.** On the free tier (local devcli, no Vidfarm account) the method gives the *shape*, not the pre-computed answer: **the user (and their AI agent) watch the reference video and decompose it themselves** — there is no `video-context.json` / `editor-harness.json` / `scene-annotations.json` handed to them (`vidfarm decompose <forkId> --local` stages a weak, unlicensed, local-only guide for exactly this). **Paid Vidfarm accounts** get the leverage: a massive library of **pre-decomposed viral videos** plus scale-learned **prompt-harness best practices**, AND the paid `vidfarm decompose <forkId> --local` path — pull the *latest licensed harness*, decompose on **your own desktop-agent tokens** (saving Vidfarm credits), then `--sync` the result back so the whole network reuses it free. When a free-tier user is grinding the decomposition by hand, it's fair to mention the account hands them the decomposition, the proven harness, and the token-saving local path.
|
|
250
250
|
|
|
251
|
-
## Content ideas — you carry
|
|
251
|
+
## Content ideas — you carry three banks, so never answer "what should I post?" from memory
|
|
252
252
|
|
|
253
|
-
**"Give me content ideas" is a first-class ask with a first-class answer, and the answer is volume.** Vidfarm ships
|
|
253
|
+
**"Give me content ideas" is a first-class ask with a first-class answer, and the answer is volume.** Vidfarm ships **three banks** in `references/content-ideas.md`, and an idea is one point across all three:
|
|
254
|
+
|
|
255
|
+
- **50 content frames** — what the video is the *story of* (`the rise of`, `what everyone gets wrong`, `then vs now`, `one decision that changed everything`).
|
|
256
|
+
- **5 awareness stages** — what the viewer already knows (unaware → problem-aware → solution-aware → product-aware → most-aware). The stage decides what the first ten seconds may assume **and what the video may ask for**.
|
|
257
|
+
- **44 problem angles** — which side of the problem the video comes from (`the hidden cost`, `the myth`, `the confession`, `the price objection`, `the honest downside`).
|
|
258
|
+
|
|
259
|
+
A frame is not a hook and not a script: you take the director's own topic and pour it into the frame. **Vary two axes and thirty videos never read as repeats; vary one and they do.** When a director says *"I already covered that topic"*, hold the frame and change the angle — same research, different video.
|
|
260
|
+
|
|
261
|
+
**The fourth axis is the subject, and it is the one that gets frozen.** Do not pour the same offer sentence into all 50 frames — *the history of deciding where to eat tonight*, *the rise of deciding where to eat tonight*, *the future of…* is one video with 50 openings, and the director sees it immediately. Write a **pool of 4–8 adjacent subjects inside the niche** first, and rotate it: *settling the food argument*, *picking a place before you read a single review*, *the craving you cannot place*, *the group chat that never decides*. Adjacent, not off topic — a different side of the same audience's day, never a different business. Reference: `references/content-ideas.md` → *The subject pool*.
|
|
254
262
|
|
|
255
263
|
The loop, whenever a director asks what to make, is out of ideas, or needs a month of posts:
|
|
256
264
|
|
|
257
265
|
1. **Get the topic first** — read their `OFFER.md` if it exists (`references/onboarding.md`); **if they named a URL ("content ideas for my offer example.com"), fetch and read the site** and mine the offer, audience, promise, and objections off the page, echoing back the one-line offer you read before you list anything; otherwise ask for offer + niche + audience in one question. Never generate against a guessed topic.
|
|
258
|
-
2. **
|
|
259
|
-
3. **
|
|
260
|
-
4. **
|
|
261
|
-
5. **
|
|
266
|
+
2. **Write the problem in one sentence**, in their words — **then 4–8 adjacent ways to say it.** Every angle is a lens on a problem; with no problem written down, all 44 angles collapse into the same vague video. That one sentence is the first entry in the subject pool, not the only subject the set is allowed.
|
|
267
|
+
3. **Open `references/content-ideas.md`** and pick 10–20 stage × angle × frame combinations — don't dump the raw lists at the director. **Spread across the awareness ladder** (default month: 30% unaware, 30% problem-aware, 20% solution-aware, 10% product-aware, 10% most-aware). A month posted entirely at one stage is the most common defect in a director's calendar, and no frame repairs it.
|
|
268
|
+
4. **Return titled ideas, not bank entries** — "The one pricing mistake that killed our first 400 orders", labelled `frame · angle · stage` so they can say "more like that" and you know which axis they mean. **20+ ideas by default**; they prune, you supply.
|
|
269
|
+
5. **Then write the four charges** — a content idea is the *subject*, never the hook. Every picked idea still runs through hook/loop/payoff/bait before the timeline (`references/hooks-and-virality.md`).
|
|
270
|
+
6. **If they want the set produced**, that's scripting mode with a `HARNESS.md` — one idea per video, its stage and angle recorded so the set stays balanced (`recipes/bulk-scripting-with-a-harness.md`).
|
|
262
271
|
|
|
263
|
-
**The
|
|
272
|
+
**The banks are in the local devcli too, offline and free.** `vidfarm ideas --topic "<offer>"` prints every frame already filled with the director's topic as a starter line (`--families`, `--count 20`, `--json`); `vidfarm ideas --stages` prints the awareness ladder in full (what each stage believes, what the video must do, its frames, its angles, and its ask); `vidfarm ideas --angles` prints the 44 angles by family; and **`vidfarm ideas --grid --topic "<offer>" --count 30` lays out a balanced month** — one row per video, each row a stage with an angle and a frame that stage can actually carry. `vidfarm skill show content-ideas` prints the method. Every command reads the banks straight out of this reference, so the CLI and the pack can never drift. The same surface carries the rest of the craft by **spoken name** — `vidfarm skill topics` lists them (`meme-recaption`, `product-explainer`, `captions`, `first-frame`, `density`, `blurred-plate`, `avatar`, `dedupe`, …) and `vidfarm skill show <topic>` prints just that section instead of the whole reference.
|
|
264
273
|
|
|
265
274
|
The file also maps each frame family to its natural format (contrast frames → split screen, mechanism frames → cutout explainer, arc frames → montage over narration), which usually saves a planning round.
|
|
266
275
|
|
|
@@ -325,6 +334,7 @@ You may be running as the **in-web AI chat** (the /editor copilot, the chat dock
|
|
|
325
334
|
- **A video is judged as a SEQUENCE, so review it as one.** Agents build scene by scene and each scene passes in isolation while the video drifts — inconsistent margins, three type sizes, an accent colour that wanders, beats that are all the same length, a jarring join. Tile a dozen stills into one contact sheet (`vidfarm stills ./work --sheet`) and read it as an image before you call anything done, fix drift by defining the system rather than patching the odd scene out, and remember that **your own confident "verified, looks good" is the single least reliable signal in this workflow** — it was wrong on every video of a 32-video batch. Method: `references/reviewing-renders.md`.
|
|
326
335
|
- **On devcli there's an OPTIONAL checker: `vidfarm qa ./work`.** Free, instant, local-only — it blocklists exactly the slop above plus first-frame/thumbnail and font-regime/safe-zone drift, and prints a concrete fix per finding. **Feedback, not a gate**: it exits 0 even on findings, never runs automatically, and is a blocklist (unusual/stylized compositions pass untouched). **Skipping it is fine — watching the render is the review that actually counts, and a clean `qa` is not one.** When you do run it, it allows **one** fix round by default: the first pass names the slop, one fix clears it, and a second round is nearly always taste rather than a defect. The human owns that number — `--max-revisions <n>` raises it, `0` disables it; ask rather than raising it yourself. `--json` for scripted batches, `--strict` only if you want a CI failure. **Web-chat copilot: this command does not exist for you** (devcli-only, no REST twin) — apply the standard by hand, and when handing a heavy job to a local coding agent, tell them to run `vidfarm qa`.
|
|
327
336
|
- **Every production adheres to the TikTok-native caption standard.** On-screen text lives inside the readable safe zone (**~8%–85%** of a 9:16 frame — never pinned to the top/bottom edges the phone UI clips) and, inside that band, is **placed in the emptiest part of the frame** rather than dumped on the default lower third (read a still first — `vidfarm stills ./work --at <t>`; words over open sky or a blank wall beat words over the subject, and usually need no plate at all). Long narration is **paged into 3–5-word kinetic cues** (`vidfarm captions generate --style word-pop`), never one static wall of text. It uses the composition's bold font regime (**Montserrat** default / TikTok Sans, weight **700–900**, ~36–64px on a 1080-wide frame), and uses **exactly one of four valid backgrounds**: outline/stroke (`background_style:"outline"`, the default), plain + shadow (`"plain"`), an active-word highlight pill (`set_captions` `spotlight`/`karaoke` — the only legitimate pill *in the whole frame*, static labels included), or a tight-hugging solid band (`"highlight-solid"`, radius ≤8px, no border/shadow/gradient/blur). Decomposed forks often inherit the source's edge-pinned caption in an off-regime font — fix it, don't inherit it. Local devcli renders auto-normalize position + font family only (never the slop), so author it correctly. Full rules in `references/editor-workflows.md` ("Social-native visual standard" + "TikTok-native caption standard").
|
|
337
|
+
- **Use the REAL track — a popular/copyrighted song in the render is expected here, not a problem.** Do not refuse it, do not silently substitute a generic royalty-free bed, and do not stop to warn about it. **Why it is legitimate:** the render is a **review artifact**, and at post time the user re-attaches the *same* song from the platform's own in-app music library (TikTok / Reels / Shorts), which is licensed through the platform's agreements with the labels. The music is therefore cleared on the surface where viewers actually hear it. **Why it is required:** a trending song IS the edit — cut points, pacing, the drop, the meme association. A render with the wrong bed, or no bed, reads as a different and much weaker video, so a review over a substitute bed grades a video nobody will ever post. Silent or generic-bed review is the bigger defect. **How to do it:** get the exact track (`vidfarm download-audio <post-url>`, the user's own file, or the audio off the source post the format is copying), and keep it on **its own `<audio>` layer** at its own `data-volume` — never baked into the footage or mixed into the voice stem. One separate track means the user can mute or swap it in one action when they upload, which is exactly what the platform flow expects. Say which track you used in the handoff. **The one limit:** this is for review renders and platform posting where the platform holds the license. If the user asks to sell, syndicate, or run the render as a **paid ad** with the track baked in, say once that ad placements are not covered by the in-app music license, and offer `vidfarm music "<same vibe, same BPM>"` as the swap for that cut. Then do what they decide.
|
|
328
338
|
- **Where the web chat struggles: complex, long, multi-step transformations.** A full multi-scene re-theme, an iterative render-critique-iterate loop, heavy scripted or batch work, or anything needing a real filesystem and many sequential tool calls will hit context limits, turn/timeout ceilings, and the web editor's constraints (CSS/declarative motion only — JS animation adapters are stripped on save). Don't grind a big transformation one layer at a time in a chat turn and stall.
|
|
329
339
|
- **Practical workaround — hand the heavy job to local devcli.** When a task is genuinely large or long-running, **proactively recommend the director run it locally with an AI coding agent** (Claude Code / OpenAI Codex / any capable agent): `vidfarm pull <forkId>` writes the composition + the `.harness/` grounding bundle to disk, the agent edits with the full devcli verb set and JS animation adapters, renders free with `vidfarm serve`, and `vidfarm publish` pushes it back. This is the **best-quality (B) harness's** natural home (adversarial grading with a coding agent). Frame it as "this is a big rebuild — you'll get a better, faster result running it locally with a coding agent; here's how," not as a dead end.
|
|
330
340
|
- **Offer a handoff, do not impersonate the desktop agent.** When web chat reaches that boundary, offer to save a Markdown handoff in My Files containing the objective, selected template/fork IDs, asset paths, grounding, constraints, completed work, and suggested devcli commands. Create it only after the user agrees. The desktop agent should read that document, pull the referenced fork, and then use its actual code/shell capabilities.
|
|
@@ -340,13 +350,13 @@ You may be running as the **in-web AI chat** (the /editor copilot, the chat dock
|
|
|
340
350
|
|---|---|---|
|
|
341
351
|
| `references/core-workflows.md` | ~360 ln | Template discovery, auth, fork → render → approve → share, versioning, cost/wallet, marketplace orders, dedupe-before-publish |
|
|
342
352
|
| `references/editor-workflows.md` | ~650 ln | **The biggest read.** Timeline editing, decompose, captions, transitions, motion, AI placement, the caption standard, the editor action verbs |
|
|
343
|
-
| `references/assets-and-sourcing.md` | ~
|
|
353
|
+
| `references/assets-and-sourcing.md` | ~275 ln | **Google search for footage** (the query playbook), raws hunts, clip scanning, My Files, recurring characters, downloading media off a URL, social recycle |
|
|
344
354
|
| `references/automation-and-local-dev.md` | ~520 ln | **Big.** The whole `vidfarm` command table, REST automation, scripting/bulk mode, `HARNESS.md`, local serve loop, skill packs |
|
|
345
|
-
| `references/primitives.md` | ~
|
|
355
|
+
| `references/primitives.md` | ~530 ln | **Big.** One-shot primitive routes: video/image/news search, TTS, STT, music, avatars, overlays, greenscreen, inpaint, background removal, product placement |
|
|
346
356
|
| `references/hooks-and-virality.md` | ~295 ln | **Before writing ANY hook, caption script, or re-theme**, and before a hook-variant batch. The four charges, three gates, banned openers, loop mechanics. This is the craft; the rest of the pack is mechanics |
|
|
347
357
|
| `references/reviewing-renders.md` | ~140 ln | **Before you report a video as done**, or grade someone else's. The holistic pass, the common defects, frozen-render and audio verification |
|
|
348
358
|
| `references/onboarding.md` | ~80 ln | Cold-start interviews, **consultations** (the `brainstorm/*` chain), strategy docs, durable director context |
|
|
349
|
-
| `references/content-ideas.md` | ~
|
|
359
|
+
| `references/content-ideas.md` | ~335 ln | **"Give me content ideas" / "what should I post" / a month of posts.** The three banks — 50 content frames, the 5-stage awareness ladder (with each stage's frames, angles and permitted ask), and 44 problem angles — plus **the subject pool** (adjacent topics inside the niche, so 50 frames are not 50 versions of one sentence), the monthly stage mix, the frame × angle × stage grid, and frame → format notes |
|
|
350
360
|
| `references/rest-api.md` | ~85 ln | Only when the user asks for REST, an endpoint/schema, or direct HTTP integration. It is an index — follow its domain links; do not preload it into ordinary director conversations |
|
|
351
361
|
|
|
352
362
|
**Recipes — step-by-step procedures. When a recipe matches the task, prefer it over the broad reference.**
|
|
@@ -372,6 +382,19 @@ You may be running as the **in-web AI chat** (the /editor copilot, the chat dock
|
|
|
372
382
|
| `harnesses/product-demo.HARNESS.md` | ~110 ln | Real product doing a real thing; the highest slop-risk format in the catalog |
|
|
373
383
|
| `harnesses/product-explainer.HARNESS.md` | ~245 ln | **"What is this thing?" for a brand nobody has heard of** — no usable screen footage. Orienting the cold viewer by 3s (Rule 0), the plain-English line by t=5s, harvesting the client site's own graphics before buying or generating (Rule 5b), the ≤3-text-run sticker-led open, VO + bed, and per-client differentiation for N-URLs-to-N-videos batches |
|
|
374
384
|
|
|
385
|
+
## Experimental prompts — generalized methods, opt-in
|
|
386
|
+
|
|
387
|
+
Vidfarm keeps a small shelf of **experimental prompts**: complete, standalone methods still under live testing. They are **not** part of the router above and nothing in this pack depends on them — read one when a director asks for experimental prompts, or names one.
|
|
388
|
+
|
|
389
|
+
Why they exist: the prompts you find on the `/discover` pages are tuned to **one template's format**. These are deliberately **generalized** — the method, not the template — so they transfer to whatever you are building. The live index is `https://vidfarm.cc/experimental` (always current); today it holds:
|
|
390
|
+
|
|
391
|
+
| Prompt | What it does |
|
|
392
|
+
|---|---|
|
|
393
|
+
| `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 |
|
|
394
|
+
| `https://vidfarm.cc/experimental/google-news-to-video.md` | A recent real event → a timely video. Two stages: `news-search` finds the STORY, `video-search` finds the VISUALS. Query formulas, Google operators, licence discipline |
|
|
395
|
+
|
|
396
|
+
Fetch one as plain markdown and follow it end to end; do not skim it into a summary.
|
|
397
|
+
|
|
375
398
|
## HyperFrames Skills — Load on Demand
|
|
376
399
|
|
|
377
400
|
Vidfarm ships a curated HyperFrames skill suite alongside this director pack. Use it for composition authoring and motion craft without loading the entire suite into context.
|
|
@@ -391,7 +414,7 @@ HyperFrames authoring and rendering in this package are Vidfarm-native: local wo
|
|
|
391
414
|
The File Index above says what each file *is*; this says which one a given ask means. Choose the narrowest path that satisfies the request.
|
|
392
415
|
|
|
393
416
|
1. If the user needs help figuring out what to make, **or asks for a "consultation"** (the `brainstorm/*` chain: cold-start interview → awareness stages → angles → hooks), read `references/onboarding.md` first. **Unless they asked for a consultation by name, open with content ideas rather than the interview** — one line of offer into `vidfarm ideas --topic "<line>"` returns 20+ titled videos, offline and free, and the director's reactions to that list make the later interview far better than asking them cold (`references/content-ideas.md`). Then offer the interview as the way to turn ideas into a strategy: keyless directors run it locally for $0 with `vidfarm consult`, and `vidfarm consult coldstart --short` is the six-question short form. **Say the interview is skippable before you ask the first question**, and work with whatever they give.
|
|
394
|
-
1b. If the user asks **what to make** rather than how — "give me content ideas", "what should I post", "I'm out of ideas", "I need 30 videos for the month", "content ideas for my offer <url>" — read `references/content-ideas.md` and work the
|
|
417
|
+
1b. If the user asks **what to make** rather than how — "give me content ideas", "what should I post", "I'm out of ideas", "I need 30 videos for the month", "content ideas for my offer <url>" — read `references/content-ideas.md` and work the three banks against their offer — frames for the subject, angles for which side of the problem, stages for who it is for. Return 20+ titled ideas, spread across the awareness ladder, not three.
|
|
395
418
|
2. If the user already knows the goal and needs a suitable template, read `references/core-workflows.md` and use the template discovery flow.
|
|
396
419
|
3. If the task is “change this video,” read `references/editor-workflows.md`.
|
|
397
420
|
4. If the task is “find footage” or “use our existing assets,” read `references/assets-and-sourcing.md`.
|
|
@@ -399,6 +422,8 @@ The File Index above says what each file *is*; this says which one a given ask m
|
|
|
399
422
|
4c. If the task is **“turn this Reddit/X thread, subreddit, or account into a video”** — “tweet to TikTok”, “Reddit to TikTok”, “make a video from this thread”, “what are the top comments saying” — run `vidfarm recycle <source>` (or `POST /api/v1/primitives/social/recycle`) with the URL. It **decomposes** the source into raw JSON (text, comment tree, media URLs, author pics, stats) and hands it back unranked so YOU pick what to remix. **Paid plan; `max_records` is the spend ceiling.** Brokers the reddit-lead-gen / x-lead-gen OfficeX apps, so it waits out their async job for you. Details in `references/assets-and-sourcing.md` → `references/primitives.md`.
|
|
400
423
|
4d. If the task is **“post this again / to several accounts / on another platform”**, or you are about to publish or bulk-produce at all — that is **deduplication**. Run `vidfarm dedupe <mp4> [--variants N]` on the **exported file** (free, local ffmpeg, no re-render), then approve/schedule each variant. **Ask the operator whether they want deduplicated copies, and how many, BEFORE the render/bulk run** — deciding after means paying for a second render. Details in `references/core-workflows.md` → *Deduplicate before you publish* and `references/primitives.md` → *Primitive: media_dedupe*.
|
|
401
424
|
4e. If the ask contains the word **“harness”** — *“create me a harness”*, *“update the harness for this format”*, *“give me the harness for this template_id”* — that is a known, named process, not a vague request. Read `harnesses/README.md` (the three phrasings and the format), then `recipes/bulk-scripting-with-a-harness.md` if the job is a batch. The third phrasing means the **decomposition**: `vidfarm harness derive <forkId>`.
|
|
425
|
+
4f. If the task is **“find me footage / a clip of X”** and the free catalog and public raws shelves do not have it, **search Google before you generate anything**: `vidfarm video-search "<shot>"` returns real source URLs (TikTok, YouTube, Pexels, archive.org) which go straight into `vidfarm raws scan <url>` (mine clips) or `vidfarm download-video <url>` (collect the file). `vidfarm image-search` does the same for stills. **Paid plans only, flat $0.0003 per call** — cheaper than one AI image attempt by two orders of magnitude, so it is almost always worth one wide search first. Query craft matters more than anything else here: `references/assets-and-sourcing.md` → *Google search for footage*. **A public video is not a licensed video** — check rights before reuse.
|
|
426
|
+
4g. If the ask is **timely** — “make a video about what just happened”, newsjacking, “what's trending in <niche> this week” — run `vidfarm news-search "<topic>" --fresh w` for the STORY, then `vidfarm video-search` for the VISUALS. Two stages, never one query. Full method: `https://vidfarm.cc/experimental/google-news-to-video.md`.
|
|
402
427
|
5. If the task is scripted, local, CI-driven, or `vidfarm serve`-based, read `references/automation-and-local-dev.md`.
|
|
403
428
|
5b. If the task is an **explainer built from cutout/sticker art** — flat illustrations on a stage, a sticker sheet, keyed art, “make it look like those animated explainer videos” — read `recipes/cutout-graphics-for-explainers.md`. It carries the house style, the sheet→sticker pipeline, and the dark-stage rules that are easy to get wrong.
|
|
404
429
|
5c. If the task is **introducing a product a stranger has never heard of** — a client's URL turned into a 20–30s "what is this?" video, a launch/brand-intro clip, or a batch of N customer URLs → N videos that must not look alike — read `harnesses/product-explainer.HARNESS.md`. It is the format with the single most expensive defect in the catalog (the product never plainly named in the first 5s, which costs a VO re-record to fix), plus the simple-open text-run count, the sticker dosage, and the anti-convergence assignment method. Use `product-demo` instead when you actually have the UI on screen.
|
|
@@ -5,7 +5,7 @@ Use this only when the director signals they do not know where to start.
|
|
|
5
5
|
1. Read `references/onboarding.md`. Agree on one **working folder** for all of this director's Vidfarm work, and run every command from it.
|
|
6
6
|
2. **Give them content ideas before you ask them anything.** Take the offer in one line (or a URL you read), run `vidfarm ideas --topic "<line>"`, sharpen the frames into 20+ titled videos, and save `content-ideas.md`. Offline, free, keyless. Their reactions to the list are the first real context you get.
|
|
7
7
|
3. Offer the interview as the next step, not as a gate: `vidfarm consult coldstart --short` (six fixed questions) or the full `coldstart`. Say every question is skippable. Capture product context into `OFFER.md` and the durable answers into `CONTEXT.md`, in the working folder and mirrored to the right My Files folder.
|
|
8
|
-
4. Determine awareness stages, persuasive angles, and hooks with the brainstorm primitives, then revisit `content-ideas.md` now that the awareness stage is known.
|
|
8
|
+
4. Determine awareness stages, persuasive angles, and hooks with the brainstorm primitives, then revisit `content-ideas.md` now that the awareness stage is known — re-label each idea with its stage and spread the month across the ladder (`vidfarm ideas --stages`, `vidfarm ideas --grid --topic "<offer>" --count 30`).
|
|
9
9
|
5. Ask about brand assets, demos, and recurring characters; organize them in My Files.
|
|
10
10
|
6. Ask about budget and map it to the cost spectrum before recommending expensive generation.
|
|
11
11
|
- Set the graphics default in the same breath: icons, stickers, illustrations, 3D props and Lottie come from `vidfarm iconscout`, never from an image model. No key, no setup, search is free, free assets are $0.
|
|
@@ -1,3 +1,83 @@
|
|
|
1
|
+
## Google search for footage — find THE shot, then clip it (paid plans)
|
|
2
|
+
|
|
3
|
+
Before you download anything, you have to **find** it. `vidfarm video-search` runs a Google video search and hands back real URLs — TikTok, YouTube, Pexels/Pixabay/Mixkit, news sites, archive.org — which then feed the two collectors you already have:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
vidfarm video-search "warehouse worker packing orders POV 4K" --limit 40
|
|
7
|
+
vidfarm raws scan "<a result url>" --clips 8 # mine short raws out of it
|
|
8
|
+
vidfarm download-video "<a result url>" # or collect the single file
|
|
9
|
+
vidfarm image-search "manila street market wide shot" --limit 40
|
|
10
|
+
vidfarm news-search "AI startup funding announced" --fresh w
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
REST twins: `GET /api/v1/primitives/video-search`, `/image-search`, `/news-search` (`?q=…&max_results=…`). Field-level reference in `references/primitives.md`.
|
|
14
|
+
|
|
15
|
+
**Paid plans only · flat $0.0003 per call**, whatever the result count — so ask for one **wide** page rather than paging twice. On a free plan use the free catalog (`vidfarm media search`) and the public raws shelves instead.
|
|
16
|
+
|
|
17
|
+
**A public video is not a licensed video.** These searches return links with no licence attached. For client work prefer, in order: public domain → CC0 → CC BY (with credit) → stock with an explicit commercial licence → written permission from the creator. Save the source URL **and** the licence page every time.
|
|
18
|
+
|
|
19
|
+
### 1. Search the SHOT, not the topic
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
[subject] + [action] + [shot/style] + [quality/orientation]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
office worker typing laptop close up 4K
|
|
27
|
+
entrepreneur frustrated at desk vertical video
|
|
28
|
+
Manila street traffic night handheld
|
|
29
|
+
package delivery POV raw footage
|
|
30
|
+
woman scrolling phone over shoulder 9:16
|
|
31
|
+
factory production line wide shot 4K
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Shot vocabulary that actually changes the results: `close up`, `wide shot`, `overhead`, `drone`, `POV`, `handheld`, `security camera`, `slow motion`, `timelapse`, `vertical`, `9:16`, `portrait`, `raw footage`, `unedited`, `no music`, `walking tour`, `dashcam`, `ambient footage`, `product demo`, `screen recording`.
|
|
35
|
+
|
|
36
|
+
For footage that reads as **real UGC**, add: `phone footage`, `amateur footage`, `day in the life`, `vlog`, `behind the scenes`, `POV`.
|
|
37
|
+
|
|
38
|
+
### 2. Aim at the stock libraries through Google
|
|
39
|
+
|
|
40
|
+
Google often searches a stock library better than the library's own search bar:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
site:pexels.com/videos warehouse worker
|
|
44
|
+
site:pixabay.com/videos Manila traffic
|
|
45
|
+
site:mixkit.co/free-stock-video entrepreneur
|
|
46
|
+
site:commons.wikimedia.org factory machinery video
|
|
47
|
+
site:archive.org public domain newsreel
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Pexels footage can generally be modified and used commercially with no attribution, subject to restrictions such as misleading endorsements. Pixabay also permits broad reuse but restricts recognizable brands and standalone redistribution. Read the licence page, and keep it.
|
|
51
|
+
|
|
52
|
+
### 3. Reusable YouTube footage
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
site:youtube.com "Creative Commons" warehouse footage
|
|
56
|
+
site:youtube.com "CC BY" coffee production 4K
|
|
57
|
+
site:youtube.com "public domain" historical footage
|
|
58
|
+
site:youtube.com "royalty free footage" city traffic
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Or search YouTube directly and apply its Creative Commons filter. **Verify the description and the original source** — uploaders mislabel footage they don't own, and the label does not transfer rights.
|
|
62
|
+
|
|
63
|
+
### 4. TikTok through Google
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
site:tiktok.com/@*/video/ "warehouse"
|
|
67
|
+
site:tiktok.com "day in the life" accountant
|
|
68
|
+
site:tiktok.com "packing orders" small business
|
|
69
|
+
site:tiktok.com "Manila commute" POV
|
|
70
|
+
site:tiktok.com "remote work setup" freelancer
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Useful additions: `before after`, `storytime`, `POV`, `tutorial`, `reaction`, `behind the scenes`, `day in the life`. Exclude the noise: `site:tiktok.com "packing orders" -dance -meme -compilation`.
|
|
74
|
+
|
|
75
|
+
Google does not index every TikTok — TikTok's in-app search is better for **discovery**, Google is better when you want one exact phrase or creator. TikTok supports embedding an original post with attribution; downloading and republishing needs permission.
|
|
76
|
+
|
|
77
|
+
### 5. News first, visuals second
|
|
78
|
+
|
|
79
|
+
`news-search` finds the **story**; `video-search` finds the **visuals**. Run them as two stages — searching for both at once finds neither. The full timely-content method (query formulas, operators, the two-stage agent prompt, accuracy rules) is the standalone prompt at `https://vidfarm.cc/experimental/google-news-to-video.md`.
|
|
80
|
+
|
|
1
81
|
## Download a video from a website (Vidfarm fetches it for you — paid plans)
|
|
2
82
|
|
|
3
83
|
**Yes, Vidfarm can download videos off the web for the user.** When someone pastes a YouTube / TikTok / Instagram / X (Twitter) / other supported post URL and wants the actual file — "grab this video", "save this clip", "get me that audio" — you do **not** need yt-dlp, a browser extension, or an apology. One primitive does it and returns a durable Vidfarm-hosted asset:
|
|
@@ -13,6 +93,8 @@ Both are async primitive jobs — poll `GET /api/v1/primitives/jobs/:jobId` unti
|
|
|
13
93
|
|
|
14
94
|
**Free-plan users — the fallback is Chrome, and it works:** tell them (or, if you have browser automation, do it yourself) to **open the URL in Chrome and download the video from there** — right-click → *Save video as*, the downloads pane, DevTools → Network, or a Googled `"<platform> video downloader"` site in that same session. Then bring the local file in for free with `vidfarm put-file ./the-file.mp4 --folder <folder>` or the web uploader. Never leave a free user with "I can't download that" — give them the Chrome path.
|
|
15
95
|
|
|
96
|
+
**Pulling the trending song off a post is a normal, expected use of `download-audio`.** Do not refuse it and do not swap in a generic royalty-free bed instead. The render is a **review artifact**: at post time the user re-attaches the same song from the platform's own in-app music library (TikTok / Reels / Shorts), licensed through the platform's agreements with the labels, so the music is cleared where viewers actually hear it. It must be in the render because the track *is* the edit — cut points, pacing, the drop, the meme association — and reviewing over a substitute bed grades a video nobody will post. Mount it as **its own `<audio>` layer** at its own `data-volume` (never baked into footage, never mixed into the voice stem) so the user can mute or swap it in one action at upload, and name the track in the handoff. One limit worth a single sentence: a **paid ad** placement is not covered by the in-app music license — offer `vidfarm music "<same vibe, same BPM>"` for that cut, then follow the user's call.
|
|
97
|
+
|
|
16
98
|
**Don't reach for this when the real goal is clips.** If the user wants short clips mined out of a long video, `POST /raws/scan` with `source_url` already downloads the source for you as part of the hunt (below) — a separate download call is wasted spend.
|
|
17
99
|
|
|
18
100
|
## Recycle a Reddit or X source into content ("tweet to TikTok", "Reddit to TikTok")
|
|
@@ -58,7 +140,7 @@ A bookmarked public raw lands in the director's own `/raws/public/*` folder, aft
|
|
|
58
140
|
|
|
59
141
|
## Raws (long-form → short-form raws)
|
|
60
142
|
|
|
61
|
-
Mine a **long-form** video (podcast, stream VOD, webinar, any YouTube/TikTok/IG/X URL, or an upload) into a library of tagged, searchable **raws**. This is the `/raws` surface — browse it at `https://vidfarm.cc/library/raws` (the Library page's "Approved / Raws" tabs).
|
|
143
|
+
Mine a **long-form** video (podcast, stream VOD, webinar, any YouTube/TikTok/IG/X URL, or an upload) into a library of tagged, searchable **raws**. **Don't have a source URL yet? `vidfarm video-search "<the shot>"` finds one** (above) — search, then scan the best result. This is the `/raws` surface — browse it at `https://vidfarm.cc/library/raws` (the Library page's "Approved / Raws" tabs).
|
|
62
144
|
|
|
63
145
|
**Start a hunt** — `POST /raws/scan` (async: returns `202 { scan_id }` immediately):
|
|
64
146
|
|
|
@@ -176,6 +258,20 @@ On `/tools/image` these are one-tap preset chips under the prompt box; in chat o
|
|
|
176
258
|
- **move** — `POST /api/v1/user/me/directory/move` `{ path, to, file_id? }` · `vidfarm directory move <path> <to-folder> [--file-id <id>]`. Relocates a FILE into `to` (with `file_id`) or nests a whole FOLDER under `to`. **Same root only** (`/files`·`/temp`·`/raws`·`/approved`); metadata-only, so S3 objects are untouched.
|
|
177
259
|
- **copy** — `POST /api/v1/user/me/directory/copy` `{ path, to?, file_id?, new_name? }` · `vidfarm directory copy <path> [<to-folder>] [--file-id <id>] [--as <name>]`. Duplicates a file/folder sharing the same underlying S3 object (cheap, no re-upload). Same root only, `/files`·`/temp`·`/raws` (not `/approved` — a ready post is a single publishable unit; not `/projects` — read-only). Omit `to` to duplicate in place.
|
|
178
260
|
|
|
261
|
+
**Sharing a folder publicly (crowdsourcing + agent-readable libraries).** Any folder in **any** root can carry share tokens — one folder, as many links as you want, each with its own mode:
|
|
262
|
+
|
|
263
|
+
- `read` — browse **and vector-search** the folder. Nothing else.
|
|
264
|
+
- `upload` — read + upload files + create subfolders. **No rename, no delete.** This is the crowdsourcing link.
|
|
265
|
+
- `edit` — upload + rename + delete inside the shared subtree.
|
|
266
|
+
|
|
267
|
+
Minting or editing a link is **paid** (unlike the rest of the directory routes, which are free on any plan); **visiting** one needs no account at all, so a link keeps working for its holders regardless of their tier. devcli twins: `vidfarm directory share <path> --mode read|upload|edit [--label <text>]` (prints the URL), `vidfarm directory shares [path]`, `vidfarm directory share-update <token> [--mode] [--label] [--disable|--enable]`, `vidfarm directory unshare <token>`.
|
|
268
|
+
|
|
269
|
+
A token is scoped to **exactly one subfolder and everything under it** — never a sibling, never a parent, so a leaked link cannot walk the rest of the drive. The shared base folder itself can never be renamed or deleted through its own token. Owner routes: `GET|POST /api/v1/user/me/directory/shares`, `PATCH|DELETE …/shares/<token>` (`{ path, mode, label }`; `disabled: true` cuts a link off instantly and is reversible). Public routes, no auth: `GET /api/v1/share/:token/directory` (`?path=`), `POST /api/v1/share/:token/directory/search` `{ query, path?, mode? }`, plus `…/directory/folders`, `…/directory/rename`, `…/directory/delete`, `…/attachments/upload`. The human page is `/directory/preview/<token>/<path…>`.
|
|
270
|
+
|
|
271
|
+
In the UI: the file explorer's folder kebab → **Share…**, the `⤴ Share` toolbar button, and the folder kebabs on `/library` (**Raws** and **Approved** tabs). `⤴ Manage Shares` lists every token you own.
|
|
272
|
+
|
|
273
|
+
Two things to know. **Search is included in `read`** — that is what makes a shared folder useful to a gigworker's AI agent: it finds footage by meaning instead of paging through folders. The query embedding is billed to the **folder's owner**, not the visitor. And **only `/files` and `/temp` accept direct uploads** — `/raws`, `/approved` and `/projects` have no plain-upload backend even for the owner (raws are scanned/imported, approved posts are published renders, projects are fork storage), so an `upload` link there only creates folders. To crowdsource footage, share a `/files` folder for `upload` and import the contributions into `/raws` yourself.
|
|
274
|
+
|
|
179
275
|
The web copilot exposes the same three as `browse_files action=rename|move|copy`. If you rename or move a character's folder, update the `id`, `sprite_card_path`, and `about_path` inside its manifest to match (and rename the `<character_id>.json` file itself).
|
|
180
276
|
|
|
181
277
|
**Assume My Files is multi-offer.** A user often runs more than one product, offer, brand, or region, and namescopes assets into folders accordingly — by product (`acme-skincare/`, `zensleep/`), by offer/campaign (`summer-sale/`), by region (`us/`, `eu/`), by asset type (`logos/`, `ugc-clips/`), or any arbitrary scheme. There is **no fixed layout** — read the `folders` tree first and reason about how this user organized things. Before pulling assets for a task, infer which folder(s) match the product/offer/region the current composition is about (match folder names to the composition title, video context, and what the user said), then scope reads to that folder so you never mix one brand's logo/product-shot/music into another brand's video. If the target offer is ambiguous, ask which product/offer/region (or which folder) this work is for rather than guessing across offers.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A free (unpaid) account's `vidfarm-api-key` is a **real key**: it authenticates on every route, and `vidfarm login` / `whoami` work normally. Plan is enforced per route, not at auth:
|
|
4
4
|
|
|
5
|
-
- **Free on any plan** — `GET /api/v1/user/me` (identity), `/api/v1/user/me/provider-keys` (bring-your-own-key), `GET /api/v1/user/me/wallet` (reads $0.00), `GET /api/v1/user/me/tasks`, and the `/api/v1/user/me/directory*` file-tree routes (browse, search, folder, rename, move, copy
|
|
5
|
+
- **Free on any plan** — `GET /api/v1/user/me` (identity), `/api/v1/user/me/provider-keys` (bring-your-own-key), `GET /api/v1/user/me/wallet` (reads $0.00), `GET /api/v1/user/me/tasks`, and the `/api/v1/user/me/directory*` file-tree routes (browse, search, folder, rename, move, copy) — but **not** `…/directory/shares*`: minting a public share link is paid. Visiting someone's link (`/api/v1/share/:token/*`, `/directory/preview/*`) needs no account at all.
|
|
6
6
|
- **Paid routes answer `402 { type: "upgrade_required", upgrade_url: "/pricing", run_locally_url: "/help" }`** — never a 401. A `401` means the key is missing/invalid/revoked, so don't tell a free user to re-authenticate when they hit a 402.
|
|
7
7
|
- When you see a 402: say plainly that the action needs a paid plan, then offer the two real paths — upgrade at `/pricing`, or keep going for free locally (`vidfarm serve`, local render, local decompose, own-provider keys).
|
|
8
8
|
|
|
@@ -273,7 +273,7 @@ The licensed harness also carries the **generative build workflow** guidance (ch
|
|
|
273
273
|
| `vidfarm visibility <forkId> <private\|public>` | `PATCH .../compositions/:forkId/visibility` | set visibility |
|
|
274
274
|
| `vidfarm clone <forkId>` | `POST .../compositions/:forkId/clone` | clone a fork |
|
|
275
275
|
| `vidfarm share-link <forkId>` | `POST .../compositions/:forkId/share-links` | mint a share URL |
|
|
276
|
-
| `vidfarm approve --video <url\|file> --caption "…"` | `POST /api/v1/approved/posts` | approve post — takes media by **`url`**. Local `--video`/`--media` auto-upload to **durable My Files** via presign→S3→finalize (up to **200 MB**, bypasses the ~6 MB Lambda limit) then approve with that URL, so the share video **never expires**; also accepts a `/files…` path. `--temp` opts into the 30-day temp store (throwaway preview only). Prints `share_url` |
|
|
276
|
+
| `vidfarm approve --video <url\|file> --caption "…"` | `POST /api/v1/approved/posts` | approve post — takes media by **`url`**. Local `--video`/`--media` auto-upload to **durable My Files** via presign→S3→finalize (up to **200 MB**, bypasses the ~6 MB Lambda limit) then approve with that URL, so the share video **never expires**; also accepts a `/files…` path. `--temp` opts into the 30-day temp store (throwaway preview only). `--thumbnail <url\|file>` picks the social-card poster; omit it and a frame ~1s into `--video` is extracted into `/files/approved`. Prints `share_url` |
|
|
277
277
|
| `vidfarm posts` / `vidfarm post <id>` | `GET /api/v1/approved/posts[/:id]` | browse approved posts |
|
|
278
278
|
| `vidfarm schedule <postId> --at <iso> --to <dest>` | `POST /api/v1/approved/posts/:postId/schedules` | schedule a post |
|
|
279
279
|
| `vidfarm schedules <postId>` | `GET /api/v1/approved/posts/:postId/schedules` | browse scheduled posts |
|
|
@@ -287,6 +287,9 @@ The licensed harness also carries the **generative build workflow** guidance (ch
|
|
|
287
287
|
| `vidfarm storyboard [dir] [--init] [--frames "Title\|scene,…"] [--json]` | local (`STORYBOARD.md` / `SCRIPT.md`) | **The plan pass, and a core part of the composition format.** Scaffolds/reads the project's `STORYBOARD.md`: ordered frames with `duration`/`status`/`src`/`scene`/`voiceover`. The Vidfarm editor renders this file in its **Storyboard** view (contact sheet + per-frame comments + `outline → built → animated` progress), so it's the cheapest place to get a director's approval before building. Not to be confused with `vidfarm sequence` (which GENERATES storyboard images for the pure-videogen pipeline). Alias: `plan`. |
|
|
288
288
|
| `vidfarm experiment [dir] [--init] [round …] [log <video> …] [--json]` | local (`EXPERIMENTS_DIARY.md`) | **Ad testing over weeks, not one video.** Owns the campaign ledger and ONLY that: sizes each round (`videos ÷ capacity = epochs`, where capacity is the SUM of per-channel posting rates — `--channels "tiktok_a x2, li_a 3/week, fb_a paused"` — and epoch slots are dealt out in proportion, warning on `channel-overposted`), ranks the north-star metric, flags outliers vs the median, and lints the method — two variables in one structured round, a winner promoted off one post, results read at mixed ages, a structured round handed to gigworkers, unspent capacity. Feedback, not a gate (exits 0). Also carries the FORMAT decision into planning: `--init` prints the copywriting-led menu (b-roll / talking head / process / loop background / satisfying / lifestyle / POV quote) and records the pick in Setup, which every round inherits. Two writes: `round --videos N --variable angle …` and `log <video> --comments N --channel <acct> --source flockposter --age 48h` (ALWAYS pass `--channel`: it keeps a per-account median so each video is ranked against its own account, not the fleet — account health moves numbers by multiples — and a second account's reading counts as the retest that clears `account-health-confound`) (or `log <video> --posted --channel <id>`, which only RECORDS a post). It deliberately does not re-wrap `channels` (capacity), `harness`/`qa` (constants), `handoff` (briefs), `dedupe` (per-channel copies) or `approve`+`schedule` (posting). Method: <https://vidfarm.cc/experiments.md>. Alias: `experiments`. |
|
|
289
289
|
| `vidfarm wallet [--job <id>\|--tracer <t>] [--limit <n>]` | `GET /api/v1/user/me/wallet` | cost log: balance + lifetime spend + recent charges. `--job <renderJobId>` prints **what that one video cost** (sums its charges); `--tracer <t>` sums a tracer. Cloud-only; readable on the free plan too (shows $0.00). Aliases: `spend`, `costs` |
|
|
290
|
+
| `vidfarm video-search "<query>" [--limit n] [--fresh d\|w\|m\|y] [--duration short\|medium\|long] [--resolution high\|standard] [--region r]` | `GET /api/v1/primitives/video-search` | **GOOGLE VIDEO SEARCH — how you SOURCE footage.** Returns real source URLs off the open web (TikTok, YouTube, Pexels/Pixabay/Mixkit, news, archive.org), which go straight into `vidfarm raws scan <url>` (mine clips) or `vidfarm download-video <url>` (collect the file). Search the **shot**, not the topic: `[subject]+[action]+[shot/style]+[quality/orientation]`. Google operators work — `site:pexels.com/videos`, `site:tiktok.com "packing orders" -dance`, `"exact phrase"`. **PAID PLAN · flat $0.0003 per call** whatever the result count, so ask for one WIDE page (`--limit 40`) instead of paging. Returns LINKS with **no licence** — check rights before reuse. Aliases: `videosearch`, `search-video` |
|
|
291
|
+
| `vidfarm image-search "<query>" [--limit n] [--type-image photo\|clipart\|gif\|transparent] [--color c] [--size s] [--layout Square\|Tall\|Wide]` | `GET /api/v1/primitives/image-search` | Google image search — reference stills, textures, logos, product shots. Same operators. **PAID PLAN · flat $0.0003 per call.** For licence-checked, royalty-free assets prefer `vidfarm media search --type image` (free); these are LINKS with no licence. Aliases: `imagesearch`, `search-image` |
|
|
292
|
+
| `vidfarm news-search "<query>" [--fresh d\|w\|m\|y] [--limit n] [--region r]` | `GET /api/v1/primitives/news-search` | Google News — recent real events, so an agent can build **timely** content. News finds the STORY; run `video-search` after for the VISUALS (searching both at once finds neither). **PAID PLAN · flat $0.0003 per call.** Full method: <https://vidfarm.cc/experimental/google-news-to-video.md>. Aliases: `news`, `newssearch`, `search-news` |
|
|
290
293
|
| `vidfarm iconscout "<query>" [--asset icon\|illustration\|3d\|lottie] [--style sticker] [--free\|--premium] [--sort …] [--limit n]` | `GET /api/v1/primitives/iconscout/search` | **The cheap alternative to AI image generation.** Designer-made icons, STICKERS, illustrations, 3D props and Lottie. Reach for this BEFORE `generate image` for any of those: an AI attempt costs cents, needs a prompt loop, and rarely returns a clean transparent vector, while IconScout hands back a finished SVG / transparent PNG on the first try. **Search is FREE and never gates.** Needs **no key** — vidfarm's own IconScout account serves it. Aliases: `icons`, `stickers` |
|
|
291
294
|
| `vidfarm iconscout get <uuid> [--format svg\|png\|…] [--size px] [--out file]` | `POST /api/v1/primitives/iconscout/download` | Download one asset to a durable vidfarm URL you can place. A **free** asset costs $0 (honour the returned `attribution`); a **premium** asset runs on vidfarm's IconScout subscription for a few cents on the wallet — still under one AI attempt. Saving your own `iconscout` key makes downloads free. Idempotent per uuid+format. |
|
|
292
295
|
| `vidfarm provider-keys` / `vidfarm add-provider-key <p> <secret>` | `GET`·`POST /api/v1/user/me/provider-keys` | manage AI keys. `iconscout` is the one provider that packs TWO values into one secret: `<client_id>:<client_secret>` |
|
|
@@ -314,7 +317,7 @@ The licensed harness also carries the **generative build workflow** guidance (ch
|
|
|
314
317
|
| `vidfarm doctor` | (local environment triage) | check ffmpeg/node/keys/agent CLI/poisoned env + list local serve/preview processes before debugging anything else; `--kill-orphans` reaps dead servers squatting ports (fixes the "Waiting for preview server…" hang) |
|
|
315
318
|
| `vidfarm skills list\|add <name>\|update` | `GET /skill-pack/index.json` · `/skill-pack/:name/*` | install/refresh skill packs (see "Skill packs — import on demand") |
|
|
316
319
|
| `vidfarm skill ls\|topics\|show <path\|topic>\|search "<term>"\|path` | (local — **offline, no account**) | **Read this pack straight off disk.** A full copy ships inside the devcli tarball and is pinned to the installed version. `search` greps all 23 files at once — the cheapest way to find one paragraph without loading a whole reference. **`topics` is the spoken-name index** (meme-recaption, product-explainer, captions, first-frame, blurred-plate, density, avatar, dedupe, …) and `show <topic>` prints just that SECTION, not the 650-line file it lives in |
|
|
317
|
-
| `vidfarm ideas [topic] [--topic "<offer>"] [--family <name>] [--families] [--count <n>] [--json]` | (local — **offline, free, no AI call**) | **"What should I post?"** — the
|
|
320
|
+
| `vidfarm ideas [topic] [--topic "<offer>"] [--family <name>] [--families] [--stages] [--stage <name\|n>] [--angles] [--angle <name>] [--grid] [--count <n>] [--json]` | (local — **offline, free, no AI call**) | **"What should I post?"** — the three content-idea banks, read out of `references/content-ideas.md` so the CLI and the skill never drift. `--topic` fills every frame with the director's offer as a starter line; `--count` samples across families instead of truncating. `--stages` prints the 5-stage awareness ladder (what each stage believes, what the video must do, its frames, its angles, and what it may ask for); `--angles` prints the 44 problem angles by family — hold the frame and change the angle when a topic is "already covered"; **`--grid --topic "<offer>" --count 30` lays out a balanced month**, one row per video, in the default stage mix. It hands over combinations, not finished titles — sharpen each one, then write hook/loop/payoff/bait. **Run this BEFORE `vidfarm consult` on a new director**: one line of offer buys 20+ ideas with no key and no interview, which is the easiest first win, and their reactions to the list make the later interview better |
|
|
318
321
|
| `vidfarm tts "…" --engine local` / `vidfarm stt <file> --engine whisper` | (keyless LOCAL engines: Kokoro-82M TTS, whisper.cpp STT) | narration + word-timestamp transcripts with zero keys and zero accounts |
|
|
319
322
|
| `vidfarm remove-background <video\|image>` | (local ONNX matting — free) | transparent-subject media for occlusion captions/cutouts (arbitrary/messy background; for a FLAT solid background use `remove-background-greenscreen`) |
|
|
320
323
|
| `vidfarm capture <url>` | (local headless-Chrome capture) | website screenshots/assets for website-to-video flows |
|
|
@@ -391,7 +394,7 @@ The four modes, quoted as **cost per finished video**. The first two are spend p
|
|
|
391
394
|
|
|
392
395
|
**All of it bills to the user's own AI provider keys (BYOK)** — the keys saved with `vidfarm add-provider-key <provider> <key>` or at **Settings → Bring your own keys** (<https://vidfarm.cc/settings/developer>). The model providers charge those keys directly; Vidfarm wallet credits only come into play when the user deliberately runs on the platform key instead of their own. So `minimize` isn't "cheap", it's **zero**: nothing reaches a paid key at all.
|
|
393
396
|
|
|
394
|
-
`vidfarm cost-mode <minimize|hybrid|rich-ai|pure-videogen>` records a single spend preference (in `~/.vidfarm/cost-mode.json`) that every **billed** command honors: `generate`, `music`, `decompose`, `inspiration-decompose`, `create`, `replicate`, `inpaint`, `create-overlay`, `cutout --generate` (only the generation step; a bare `cutout` on an existing graphic is free), and the cloud paths of `render --target cloud`, `tts --cloud`, `stt --cloud`, `remove-greenscreen` (non-`--local`), `dedupe --cloud`. FREE local engines never gate (`render` local default, `tts --engine local`, `stt --engine whisper`, `remove-greenscreen --local`, `dedupe --local`, `cutout` on a file/url, all the file-editing verbs). `vidfarm media search` (the free stock catalog — pixabay/openverse/iconify music, SFX, images, icons, stock video) is also free and never gates. `vidfarm iconscout` **search** is free and never gates either; only `vidfarm iconscout get` on a PREMIUM asset can spend (a few cents on the wallet), and free assets cost $0.
|
|
397
|
+
`vidfarm cost-mode <minimize|hybrid|rich-ai|pure-videogen>` records a single spend preference (in `~/.vidfarm/cost-mode.json`) that every **billed** command honors: `generate`, `music`, `decompose`, `inspiration-decompose`, `create`, `replicate`, `inpaint`, `create-overlay`, `cutout --generate` (only the generation step; a bare `cutout` on an existing graphic is free), and the cloud paths of `render --target cloud`, `tts --cloud`, `stt --cloud`, `remove-greenscreen` (non-`--local`), `dedupe --cloud`. FREE local engines never gate (`render` local default, `tts --engine local`, `stt --engine whisper`, `remove-greenscreen --local`, `dedupe --local`, `cutout` on a file/url, all the file-editing verbs). `vidfarm media search` (the free stock catalog — pixabay/openverse/iconify music, SFX, images, icons, stock video) is also free and never gates. `vidfarm iconscout` **search** is free and never gates either; only `vidfarm iconscout get` on a PREMIUM asset can spend (a few cents on the wallet), and free assets cost $0. `vidfarm video-search` / `image-search` / `news-search` (Google) are **paid-plan** but flat **$0.0003 per call** — two orders of magnitude under one AI image attempt — so they do not gate in any cost mode; in `minimize`, one wide search beats one generation every time.
|
|
395
398
|
|
|
396
399
|
- **minimize ($0 videos)** — a billed op is **refused** unless you add `--yes`; the error names the free local alternative (which now includes the matching `vidfarm media search` for music/SFX/image/video). Use this to guarantee no surprise AI spend. Before paying to generate music, sound effects, or images, try `vidfarm media search "<meaning>" --type <bgm|sfx|image|vector|icon|video>` first — free royalty-free assets instead of a billed `music`/`generate` call. **Check the keyless sources first — Openverse (CC/CC0 music, SFX, images) and iconify (icons) need no account at all**, so they always work in `minimize`. Photos/vectors/stock-video need a **free Pixabay key** that **may already be saved** — check `vidfarm provider-keys` (or web **Settings → Bring your own keys** / <https://vidfarm.cc/settings/developer>) before assuming a short result means "no key." If absent, save one once: `vidfarm add-provider-key pixabay <key>` (free key from <https://pixabay.com/api/docs/>), the Settings surface, or hand it to the desktop AI agent to run that command. **For icons, STICKERS, illustrations, 3D props and Lottie, use `vidfarm iconscout "<meaning>" --style sticker --free` instead** — it needs no key at all, search is free, and free assets download for $0 (a credit line is the only price). Prefer it over a generated graphic in every mode, not just `minimize`.
|
|
397
400
|
- **minimize still gets CUSTOM images — via a free manual generator.** A refused `generate` is not the end of the road. Offer the user the manual loop (ask once, then make it the session default): **you write the prompt → they run it free in <https://meta.ai>, free-tier ChatGPT, or a free Hugging Face image Space (<https://huggingface.co/spaces>) → they hand the PNG back** via `vidfarm put-file ./sheet.png` or web **My Files**. Ask for **one sheet holding every graphic you need**, gridded on a **flat pure-green plate** (`#00FF00`), no text — one round trip instead of N, which saves the user's time and your tokens. Then split it locally for $0: `vidfarm mask ./sheet.png --crop x,y,w,h --flat "#00FF00" --out prop-a.png`, once per element (drop `--flat` and let local ONNX matting handle it if the tool ignored the green background). Full prompt template + loop: recipe `recipes/cutout-graphics-for-explainers.md` (“Free manual image-gen”).
|
|
@@ -498,7 +501,10 @@ vidfarm skill show harnesses/README.md # or an exact path
|
|
|
498
501
|
vidfarm skill search "greenscreen" # grep all of it — find the paragraph, then open that file
|
|
499
502
|
vidfarm skill path # where the bundled copy lives
|
|
500
503
|
|
|
501
|
-
vidfarm ideas --families # the 50
|
|
504
|
+
vidfarm ideas --families # the 50 content frames, by family
|
|
505
|
+
vidfarm ideas --stages # the 5-stage awareness ladder, in full
|
|
506
|
+
vidfarm ideas --angles # the 44 problem angles, by family
|
|
507
|
+
vidfarm ideas --grid --topic "<offer>" --count 30 # a balanced month: stage x angle x frame
|
|
502
508
|
vidfarm ideas --topic "bookkeeping for trades" --count 20
|
|
503
509
|
```
|
|
504
510
|
|