research-and-capture
Skill3 starsChanged 3 months agoMITView on GitHub
Research a topic, capture real evidence (web screenshots) and stock B-roll, then build the media blocks for a video script, for an agent built with content-agent-kit. Use when the user says "tìm tư liệu cho video", "research rồi làm video", "chụp màn hình trang này đưa vào video", "thêm B-roll", or a video needs footage instead of text-only slides. Produces a script.json whose scenes carry `media` blocks.
In this repository16 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ads-reportSkill
- audit-and-fixSkill
- bootstrap-content-agentSkill
- crawl-and-queueSkill
- create-videoSkill
- daily-runSkill
- daily-topic-videoSkill
- design-campaignSkill
- geo-optimizeSkill
- motion-craftSkill
- new-templateSkill
- repurposeSkill
- review-gateSkill
- topic-radarSkill
- video-and-postSkill
The file
Files
Research and capture
Turn a topic into evidence on screen: the real announcement page, and footage that shows what the narration is describing. Without this a video is text slides read aloud.
Antigravity / Gemini: same steps, run the commands directly.
1. Research the topic first
WebSearch for the primary source, then WebFetch it. Prefer the announcement, the paper,
the changelog — not a blog summarising them. Pull out concrete, quotable facts: dates,
figures, prices, names. Those become the script; everything else is filler.
For deep academic or technical topics:
- Pair with
academic-deep-researchto explore scientific literature, verify methodology, and extract empirical datasets without hallucinations. - Pair with
academic-writing-flowto run evidence verification contracts, cross-checking every claim against peer-reviewed citations before scripting.
Note the 2–4 URLs worth showing. A page is worth showing when the narration makes a claim a viewer might doubt.
2. Capture the evidence
node scripts/media/screenshot.mjs \
--url "https://www.example.com/announcement" \
--out brain/<slug>/shots/announce.png --width 1280 --height 860 --wait 8000You don't need to run this by hand for a scene — a media block with
kind: "screenshot" makes the render step do it. Run it manually when you want to look
at the result first, which is worth doing for any page you haven't captured before.
Screenshots are evidence, not decoration. Capture the page being talked about, at the moment it's talked about. A generic homepage adds nothing.
Known limitation: a cookie/consent wall will appear in the image if the site shows one —
Chrome offers no way to suppress it. Raise --wait, choose a different page, or capture
that one by hand.
3. Choose B-roll
node scripts/media/stock-search.mjs --query "data center servers" --limit 6The output tells you what each clip actually shows. Read it before pinning an id.
Stock relevance is loose: a query for breaking news screen will happily return a cup of
coffee, and that is exactly how off-topic footage ends up in a finished video.
Rules that decide whether B-roll helps or hurts:
- Describe the picture, not the concept.
"data center servers"→ usable."artificial intelligence"→ generic blue swirls. - Never put B-roll behind a number. A statistic needs
frame-pentagram-statorframe-vignelli— footage makes it unreadable. - Alternate. B-roll on every scene turns a news video into a perfume advert. Two or three footage scenes in a twelve-scene piece is plenty.
- Pin the id, don't ship a query.
"id": "28709421"is reproducible. A barequeryis resolved once and written tomedia-lock.json— fine, but commit that file.
4. Write the media blocks
{ "id": "hook", "templateId": "frame-broll",
"media": { "kind": "video", "source": "pexels", "id": "28709421" },
"inputs": { "chip": "🔥 Tin nóng", "kicker": "…", "headline": "…", "subheadline": "…" } }
{ "id": "body-4", "templateId": "frame-screenshot",
"media": { "kind": "screenshot", "url": "https://…", "width": 1280, "height": 860 },
"inputs": { "kicker": "Nguồn gốc", "headline": "Công bố chính thức",
"url": "example.com/announcement", "caption": "…", "source": "example.com" } }
{ "id": "body-11", "templateId": "frame-media-inset",
"media": { "kind": "video", "source": "pexels", "id": "5495899" },
"inputs": { "kicker": "Kết luận", "headline": "…", "caption": "…" } }Which template:
| The footage… | Template |
| is the scene, one line over it | frame-broll |
| illustrates a point the words carry | frame-media-inset |
| is a web page you're citing | frame-screenshot |
Sites with no public API (Mixkit, Videezy, Videvo, Coverr) go through source: "manual" —
list the clip in stock-sources.yaml first. See docs/15-media-sources.md.
5. Validate and render
node scripts/video/validate-script.mjs brain/<slug>/script.json --strict
node scripts/video/render.mjs brain/<slug>/script.jsonThe render resolves each media block, caches it in media-lock.json, and reuses it on
every later run. Changing an id re-resolves that scene by itself; --refresh-media
re-resolves everything.
Editing a scene's inputs does NOT re-render its clip — delete
clips/scene-<id>.mp4 first. (Narration is different: it re-generates by itself when the
text or voice changes.)
6. Check what you made
Extract a frame from each media scene and look at it:
ffmpeg -y -ss 3 -i video.mp4 -frames:v 1 -vf scale=405:720 check.pngNobody previewed that footage, and a clip whose description sounded right can still be wrong. This step is what catches it.
Notes
- Pexels and Pixabay allow commercial use with no attribution required.
media-lock.jsonkeeps source, author and licence on file anyway — commit it. - More visual variety:
node scripts/video/add-template.mjs --preset newspulls transitions, animated captions and broadcast furniture from the upstream registry. Seedocs/16-template-registry.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

