English · ภาษาไทย ↓
The complete, repeatable workflow for short Thai documentary/explainer videos — from a topic to a finished MP4, in whatever format you ship.
HearYourVOICE is an agent skill + a 16-strong subagent team — a SKILL.md, its references/ and scripts/, and the hyv-* specialists that do the work. Drop a topic in, and it walks the whole loop: research → script → an adversarial agent debate over the hook/punchline → ElevenLabs voiceover → gather visuals (self-shot, found Creative-Commons, or generative) → lay timecoded inserts on an editor timeline → validate → package one clean delivery/<slug>/ folder.
Stop asking "which LLM is smarter." It's the wrong question.
You are the one in command. You define the format, the process, the standard — and the model follows it. An LLM is just a brain you can swap out: Claude today, something else tomorrow. What stays is the harness — the skill, the scripts, the guardrails that reliably do the work you guide them to do.
A good AI agent isn't the one that wins a chat-window argument about which model is best. It's the one with a harness complete enough to pick up a real task and finish it. If your AI ability ends at chatting and ranking models, you're about two years behind where this is already going.
HearYourVOICE is that harness for video. SKILL.md is production know-how made executable — and any brain in the world can run it.
Run the phases yourself, or hand them to the team that ships with the skill. hyv-producer is the director: it delegates to the specialists, holds the gates, and is the only one that talks to you about them.
hyv-producer ← the director: delegates, holds gates, never decides taste
├─ hyv-researcher phase 0 · real WebSearch, every claim ≥2 sources
├─ hyv-scriptwriter phase 1 · script + TTS-ready narration
├─ hyv-script-reviewer phase 1 · strict pass/fail against the brief
├─ hyv-storyboard phase 1 · shot-by-shot, at the config's aspect
├─ debate panel phase 1 · hook-maximalist vs skeptic-editor vs target-viewer
│ └─ hyv-judge synthesizes · RECOMMENDS, never rules
├─ hyv-shotlister phase 1 · the 5-sheet shotlist.xlsx backbone
├─ hyv-voiceover phase 2 · ElevenLabs + ffprobe = the master clock
│
│ ⟨ phase 3 · filming your own shots — no agent here. That part is you. ⟩
│
├─ hyv-cc-scout phase 4 · finds CC footage, verifies the license itself
├─ hyv-veo-prompt-smith phase 4 · prompts for the gaps · spends nothing
├─ hyv-veo-runner phase 4 · renders generative clips · costs money
└─ hyv-assembler phase 5–6 · timeline → editor → delivery/
(Phase 3 has no agent on purpose — an AI can't hold your camera. Shoot, cut exact-timestamp selects, drop them in the pool, and hyv-assembler picks them up like any other clip.)
Two rules the team never breaks. Creative authority is human: hyv-judge recommends and flags a split, but you pick the hook and punchline. And every gate stops for you — output spec, topic lock, split debate, and any spend (voiceover or generative credits).
Fan them out to scale: one hyv-researcher per topic in parallel, then one hyv-producer per video — each in its own src/<slug>/, no collisions. Full roster + decision chain: references/subagents.md.
Aspect, resolution, fps, and editor live in src/<slug>/project.config.json — confirmed with you before anything is produced. 9:16 is the default, not a law: 16:9, 1:1, 4:5, and custom work the same way, and every script takes --aspect/--width/--height/--fps.
Your editor is a config value too. Phase 5 exports one universal timeline — ep*-timeline.json (frames + SMPTE timecode) and ep*-timeline.csv (one row per clip) — and hyv-assembler reads editor to take the right path:
editor |
What happens |
|---|---|
capcut · premiere · davinci |
You get the CSV/JSON and drop each clip at its start_tc in the NLE you already know. Nothing to install. |
remotion |
The code path. new-project.mjs --remotion scaffolds a starter composition and config; the timeline JSON drives it directly, and remotion-best-practices loads for the render. Pick this when you want the cut to be reproducible from source, or when you're generating many videos from one template. |
The recipe is identical wherever you take it: voiceover on one audio track (the master clock), every clip muted at its start timecode, at the config's aspect and fps. Full recipe: references/assembly-and-validation.md.
0 Research → 1 Script + punchline debate → ══ you lock the hook ══
│
┌───────────┴───────────┐ CC + graphics never touch the
▼ ▼ audio — start them together
2 Voiceover 3 Mock shots (optional)
master clock 4 Footage: find CC · graphics
│ │
└───────────┬───────────┘
▼
4' Generative shots (optional) — waits: the prompt
has to state its exact seconds
│
▼ join: measured clock + clip pool
5 Inserts onto TC → 6 Validate + package
→ delivery/<slug>/ (manifest.json: status ready)
└─→ back to 0 for the next topic
Each phase has one job, one owner, and one artifact it must hand the next. That contract is the whole trick — it's what lets you stop anywhere, hand off, or fan out without the thing falling apart.
The numbers are a data order, not a queue. Finding CC footage and building graphics never need the audio, so they start with the voiceover, not after it — one is a slow API call, the other slow web search, and doing them back to back just pays for both. Two things genuinely wait: generative shots (a Veo prompt must say "exactly N seconds", and N comes from the measured audio) and phase 5 (the timeline joins the clock to the clips). Across topics nothing is shared at all: three topics means three producers at once, not three in a row.
| Phase | What happens | Hands over | Runs in |
|---|---|---|---|
| 0 · Research | Pick one topic and build a factual brief: thesis, the one surprising insight, key facts with sources — every claim verified against ≥2 independent sources. Locks the subject so later prompts and visuals never drift onto a look-alike. | research.md + a slug |
any tier |
| 1 · Script + punchline debate | Draft the script, then the part that gives this skill its name: agents argue over the hook and punchline. Hook Maximalist pushes for stopping power, Skeptic/Editor attacks clickbait the body can't pay off, Target Viewer asks "do I care?". hyv-judge synthesizes and flags a split — it recommends, it never rules. You pick. Then rewrite into TTS-ready narration. |
voiceover-v1.md (locked hook) |
any tier |
| 1e · Shotlist | The planning backbone: one row per unique shot, how to capture or source it, the licence, which episodes reuse it, and a live status column. Build it here and phases 3–5 get easy. |
shotlist.xlsx |
Production — needs Python |
| 2 · Voiceover | Generate the narration, then measure it with ffprobe. This is the master clock. |
ep*.mp3 + voiceover-durations.json |
Production |
| 3 · Mock shots (optional) | Film the bespoke shots yourself. Review and cut exact-timestamp selects only — loose clips are rejected. Many projects skip this. | silent selects | Production |
| 4 · Footage | Fill every beat from whatever fits: found Creative-Commons (licence verified by hand — YouTube's CC filter lies), generative clips, your own selects, or motion graphics. Graphics are the always-available fallback. | a reviewed clip pool + ATTRIBUTION.md |
Production |
| 5 · Inserts onto TC | Lay each clip on the measured clock — contiguous timecodes, final end == target length — and export an editor-neutral timeline (JSON + CSV) you assemble in CapCut, Premiere, DaVinci, or code. | ep*-timeline.json + .csv |
Production |
| 6 · Validate + package | ffprobe confirms resolution, fps, duration and that audio matches video; you eyeball a few frames; then everything scattered across src/, public/ and out/ is gathered into one folder. |
delivery/<slug>/ · status: ready |
Production |
Three invariants hold across every phase:
- The voiceover is the master clock. Every timecode comes from measured audio, never from the script's guessed length. A guessed number silently breaks everything downstream and you don't find out until the render is wrong.
- All visual clips are silent. Narration is the only audio track. Ambience, if any, is one continuous bed underneath.
- The output spec is read, never assumed — from
project.config.json, confirmed with you first.
Where the tiers cut: phases 0–1 are pure reasoning, so Basic and Advance do them fine. From the shotlist onward every phase shells out to a real binary or ends in your editor — that's Production. Note 1e is a phase-1 step that still needs Claude Code: the line is drawn by tool dependency, not by phase number.
Money only moves in two places — phase 2 (voiceover) and phase 4 (generative). Both scripts refuse to spend without --yes, and both have a free twin (--emit-md) that hands you the prompts to generate anywhere you like.
One folder, not scattered files:
delivery/<slug>/
manifest.json ← canonical index (per-episode checks + status)
README.md ← human summary
video/ ← final renders
voiceover/ ← narration mp3s
script/ ← voiceover-v1.md + shotlist.xlsx
briefs/ ← per-episode insert plans
attribution/ ← credits & licenses
thumbnails/
"Done" = manifest.json reports status: "ready".
skills/hearyourvoice/
SKILL.md the orchestrator (phases 0–6)
references/ pipeline-loop · research-brief · script+VO spec ·
punchline-debate · subagents · shotlist-format ·
footage-sources · veo-prompt-guide ·
assembly+validation · output-format · naming · examples/
scripts/ new-project · new-shotlist · gen-voiceover ·
measure-voiceover · gen-veo-briefs · veo-generate ·
check-insert-plan · export-timeline · package-delivery
agents/ the 16 hyv-* subagents
Editor-agnostic: it exports a universal timeline (JSON + CSV) you assemble in CapCut, Premiere, DaVinci Resolve, or a code renderer — then packages a clean delivery folder. It can optionally orchestrate veo-insert-planner (generative footage) and remotion-best-practices (only if you assemble in code).
This loop has two halves, and they have very different needs:
- The thinking half — research, script, the punchline debate, storyboard, shotlist planning. Pure reasoning. No binaries, no keys, no money.
- The machine half — measuring the voiceover with
ffprobe, pulling footage withyt-dlp, building the workbook with Python, and cutting in your CapCut/Premiere/DaVinci. This needs a real shell on a real machine with your files on it.
Which half you get depends on where you run it. Pick your tier:
| Basic | Advance | Production | |
|---|---|---|---|
| Where | Chat — web or the app's Chat tab | Cowork | Claude Code — CLI or the app's Code tab |
| Install | the plugin | the plugin | npx hearyourvoice install |
| The team | ❌ agents are greyed out in chat | ✅ all 16 fan out in parallel | ✅ all 16 |
| Thinking half | ✅ | ✅ | ✅ |
| Machine half | ❌ no shell | ❌ — see below | ✅ |
| Good for | one topic, thinking it through | researching and scripting a whole backlog at once | finishing an actual video |
Basic gives you one Claude with the whole method loaded — plenty for taking one idea from topic to a debated hook.
Advance is where it gets interesting: hand Cowork three topics and hyv-producer fans the specialists out across all of them at once — researchers verifying sources in parallel, the debate panel arguing each hook, hyv-judge flagging where it's split. No terminal required. (Verified by running it: the team spawns and works in parallel in Cowork.)
Production is the only tier that finishes a video, because only your own machine has your ffmpeg, your footage, and your editor.
They compose. Think and debate in Cowork across a backlog, then bring the winners into Claude Code to produce.
Cowork's shell "execute[s] inside a dedicated Linux VM, isolated from the host operating system by the platform's hypervisor" — so even in local mode it cannot reach the ffmpeg installed on your Mac, and Anthropic doesn't document what's preinstalled in that VM. Either way, the final cut happens in your editor, on your machine.
That's not a wall — it's the seam. Cowork does the thinking half well; Claude Code does the rest.
What we tested, and what's still unverified
Observed: the plugin installs in Cowork, hyv-producer is invoked by name, and the specialists fan out in parallel across multiple topics.
Not tested: whether Cowork's VM has node/ffmpeg/python at all, and how the paid steps behave there. The spending gates are enforced in the scripts themselves (they refuse without --yes), but that behaviour hasn't been watched on Cowork's VM — so treat phase 2+ as Claude Code's job until someone checks.
Earlier versions of this README claimed Cowork couldn't run any of this. That was wrong, and it was written from docs rather than from running it.
The old table, if you're mapping surfaces
| Where | Thinking half | Machine half |
|---|---|---|
Claude Code CLI (claude in a terminal) |
✅ | ✅ |
| Claude app → Code tab → Environment: Local | ✅ | ✅ — same ~/.claude/, all 16 agents |
| Claude app → Code tab → Environment: Remote/cloud | ✅ | ❌ — cloud sessions are sandboxed |
| Cowork (plugin) | ✅ + the team, in parallel | ❌ — isolated VM |
| Claude app → Chat tab · claude.ai web (plugin) | ✅ — no team | ❌ — no shell |
Two things from the docs explain the shape of that table:
- Why the team only lives in Cowork: plugins "bundle skills, connectors, and sub-agents", and "the skills bundled in a plugin work across all three. Hooks and sub-agents run only in Cowork, so they appear greyed out in chat." That's why Basic gets the method but not the roster.
- Why the Code tab is Claude Code: "the desktop app reads the same settings files as the CLI", so one
npx hearyourvoice installserves both.
Rule of thumb: think in Cowork, finish in Claude Code. If Claude can't reach your ffmpeg and your editor, it cannot finish a video — no matter how good the skill is.
One plugin covers both: the skill works in chat, and the whole team wakes up in Cowork.
-
Download the plugin zip from the latest release.
-
Claude → Customize → Plugins → upload that zip.
-
Use it — just ask. In Cowork, hand it a backlog:
"/hearyourvoice ทำ 3 เรื่องนี้พร้อมกัน: ค่าไฟแพง, ฝุ่น PM2.5, หนี้ครัวเรือนไทย — เอาแค่ research + เขียนบท + ดีเบต hook"
hyv-producerpicks it up and fans the specialists across all three.
Uploading to Skills instead of Plugins? That channel takes a different shape and carries no agents, so the release doesn't ship it — build it yourself with
node bin/build-bundles.mjs, which also emitshearyourvoice-skill-<v>.zip. You get the method, not the team. Install one or the other, not both, or you'll end up withhearyourvoiceandhearyourvoice:hearyourvoiceside by side and won't know which one is answering.Changing the skill yourself?
node bin/build-bundles.mjspacks your working tree into both zips on your Desktop — that's the path for edits the release doesn't have yet.
You never have to open a separate terminal — the app has one built in.
- Download the app — macOS or Windows, then sign in. (Windows also needs Git for Windows; restart the app after installing it.) Or just use the
claudeCLI. - Click the
Codetab (not Chat, not Cowork). - Set Environment to
Local— this is the step people get wrong. Remote runs in the cloud and can't touch your files. - Pick your project folder — the folder where your videos will live.
- Open the built-in terminal —
Ctrl+`— and paste one line:npx hearyourvoice install
- Check what's missing —
npx hearyourvoice doctorreports Node / Python / ffmpeg and which API keys are set (never their values). - Use it — type
/hearyourvoiceand describe the video. It delegates to the team on its own; you don't have to namehyv-producer.
That's it — the CLI and the app share the same install, so doing this once covers both.
Both are Claude Code installs — this is only about scope.
Global — whole machine (available in every session):
npx hearyourvoice install # skill → ~/.claude/skills/ · agents → ~/.claude/agents/
npx hearyourvoice install codex # → ~/.codex/skills/hearyourvoice (skill only)
npx hearyourvoice install hermes # → ~/.hermes/skills/hearyourvoice (skill only)Project-level — only the repo you're working in (run from its root):
cd ~/path/to/your-video-repo
npx hearyourvoice install project # → ./.claude/skills/ + ./.claude/agents/The installer only ever touches its own hyv-*.md files — your other agents are left alone. Codex and Hermes get the skill only, since .claude/agents/ is a Claude Code construct.
Global (install) |
Project (install project) |
|
|---|---|---|
| Lives in | ~/.claude/skills/ + ~/.claude/agents/ |
./.claude/ inside the repo |
| Works in | every session on the machine | only that repo |
| Goes into git | no | yes, if you commit .claude/ |
| Version | one, for everything | pinned per repo |
| Best for | your own machine, many videos, one version | a team sharing one repo, or running versions side by side |
Default to global. It's one command, it's there in every session, and updating it updates everything: npx hearyourvoice install.
Choose project when your teammates should get the exact same version by cloning the repo (commit .claude/ and they have it — no install step), or when different repos need different versions.
Claude Code doesn't treat these two the same, and it will surprise you:
- Skills — a global skill wins over a project skill of the same name. ("Enterprise overrides personal, and personal overrides project.")
- Agents — a project agent wins a name clash, but global agents still load in every project — they add on top rather than being replaced.
Two practical consequences:
- A global install silently defeats a project install. If HearYourVOICE is installed globally, a project copy of the skill is ignored — even if the project's is newer. Installing per-repo versions only works when there is no global copy.
- Global agents follow you everywhere. Install the team globally and
hyv-*shows up in every project, including ones where you wanted the skill alone.
So: pick one scope and stay in it. If you need per-repo versions (or want to demo two versions side by side), keep the global install off entirely and use install project in each.
Check your toolchain anytime: npx hearyourvoice doctor (Node / Python / ffmpeg).
From a local checkout it's the same, via
npx .:cd HearYourVOICE && npx . install project• or use the bash fallback./install.sh <target>.
Then start a session and say "produce a video about <topic> with HearYourVOICE", or hand it straight to the team: "ให้ hyv-producer ผลิตวิดีโอเรื่อง <topic>". See INSTALL.md for details, dependencies, and the full Environment & API keys list.
- Node 18+ (the
.mjstools), Python 3 +openpyxl(shotlist), ffmpeg/ffprobe (timing & render checks). - The subagent team needs Claude Code v2.1.172+ (nested subagents). The skill itself runs anywhere.
- For the final cut: a video editor of your choice (CapCut, Premiere, DaVinci, or a code renderer), an ElevenLabs API key (voiceover), and — only if you use generative footage — your own Veo provider plugin.
This is worth saying plainly, because the expensive path is the one people assume they need:
| Phase | The paid way | The free way that also works |
|---|---|---|
| 2 · Voiceover | ElevenLabs API | gen-voiceover.mjs --emit-md → voice it in ElevenLabs' own UI, another TTS, a local model, or read it yourself |
| 4 · Footage | generative clips | real Creative-Commons photos — fetch-cc-images.mjs pulls them from Openverse + Wikimedia, licence-checked, with your line over the top. Graphics are the fallback under that |
node scripts/fetch-cc-images.mjs --slug pm25-dust --query "air pollution bangkok" --limit 5A video built from licensed photos with type over them is a complete, legitimate output — not a downgrade. Explainers have been made that way for decades, and it's often clearer than stock footage that only vaguely matches what you're saying. The code renderer gives each still a slow push so it reads as video rather than a slideshow, and hyv-assembler treats it like any other clip.
The licence is read, never filtered for. Google Images' "CC" filter has the same false positives as YouTube's — it filters the open web, it doesn't read a licence. Every image's licence comes from its source's metadata; ND is rejected outright (cutting it into a video is a derivative), NC unless you opt in, and creator + licence + URL land in ATTRIBUTION.md as each file downloads.
Generative is one optional source, not the default. Most videos never need it.
Generative footage (Google Veo) is expensive. At roughly $0.75 per second (≈ ฿30/sec), a single 6-second insert is about $4.5 (≈ ฿180), and a 90-second episode made entirely of Veo clips runs about $67 (≈ ฿2,700). (Pricing changes over time — check the current rate before you commit.)
Don't reach for it unless a shot is impossible to film, find, or draw. And you can't spend by accident: both paid scripts refuse to run without --yes — they print exactly what would be billed and exit. hyv-veo-runner shows the estimate and waits for your approval before spending a baht.
Where this skill earns its keep: if your goal is producing content at scale — say a hundred pieces a day — a repeatable harness is exactly what makes that volume possible without quality collapsing. That's who this is built for.
Don't steal anyone's footage. For found footage, search Creative Commons (CC / NC) only — verify the license yourself (YouTube's "CC" filter gives false positives), record credit + source URL in ATTRIBUTION.md, and discard anything you can't clear. hyv-cc-scout does exactly this and drops whatever it can't clear. Ripping someone's work is not a footage strategy.
MIT — see LICENSE.
The name HearYourVOICE is a tribute to VOICE TV — a station that "planted ideas" (ปลูกความคิด) in Thai society for 15 years (2009–2024).
I, Chanon Ngernthongdee, started there in my very first role: Head of Research and Development, from the day the station was founded. This project is an attempt to take the know-how we used in the VOICE TV newsroom and production floor and turn it into a SKILL.md — so the way we made quality content becomes something repeatable in the age of AI.
Yesterday I spoke with Khun Songsak Premsuk, the station's co-founder and managing director. He told me, "If we'd had AI back then, the world of TV could have gone so much further." It's true that VOICE TV no longer broadcasts today — but its way of thinking and working doesn't have to end with it, because SKILL.md can be carried on by any brain in the world, human or AI.
I hope the structure of this project helps anyone pick it up and bring quality content and quality issues into Thai society.
Hear your voice — because every good idea deserves a place to be heard.
English ↑ · ภาษาไทย
เวิร์กโฟลว์ครบวงจรและทำซ้ำได้ สำหรับคลิปสารคดี/อธิบายความภาษาไทยสั้น ๆ — จากแค่ "หัวข้อ" ไปจนเป็นไฟล์ MP4 ที่เสร็จสมบูรณ์ ในสัดส่วนไหนก็ได้ที่คุณจะปล่อย
HearYourVOICE คือ agent skill + ทีม subagent 16 ตัว — ประกอบด้วย SKILL.md พร้อม references/, scripts/ และทีม hyv-* ที่ลงมือทำจริง แค่โยนหัวข้อเข้าไป มันจะเดินครบทั้งลูป: research → เขียนสคริปต์ → ให้ agent ดีเบต แย้งกันเรื่อง hook/punchline → ทำเสียงพากย์ด้วย ElevenLabs → หาภาพ (ถ่ายเอง, Creative-Commons, หรือ generative) → วาง insert ตาม timecode บน timeline ของ editor → ตรวจสอบ → แพ็กเป็นโฟลเดอร์ delivery/<slug>/ ที่สะอาดหนึ่งชุด
เลิกถามว่า "LLM ตัวไหนเก่งกว่ากัน" — มันคือคำถามที่ผิด
คุณ ต่างหากที่เป็นคนสั่ง คุณคือคนกำหนด format กำหนดกระบวนการ กำหนดมาตรฐาน แล้วโมเดลทำตาม LLM เป็นแค่ "มันสมอง" ที่สลับเปลี่ยนได้ — วันนี้ Claude พรุ่งนี้อาจเป็นตัวอื่น สิ่งที่อยู่คงทนคือ harness — ตัว skill, สคริปต์, และ guardrail ที่ หยิบงานไปทำตามที่เรา guide ได้จริงอย่างเชื่อถือได้
AI agent ที่ดี ไม่ใช่ตัวที่ชนะการเถียงในหน้าแชตว่าโมเดลไหนเก่งกว่า แต่คือตัวที่มี harness สมบูรณ์พอจะหยิบงานจริงไปทำจนจบ ถ้าความสามารถด้าน AI ของคุณจบอยู่แค่การแชตและจัดอันดับโมเดล คุณกำลังช้ากว่าโลก AI ไปแล้วประมาณสองปี
HearYourVOICE คือ harness ตัวนั้นสำหรับงานวิดีโอ — SKILL.md คือ know-how การผลิตที่ถูกทำให้ "สั่งทำงานได้จริง" และมันสมองใด ๆ ในโลกก็รันมันต่อได้
จะเดินทีละเฟสเองก็ได้ หรือโยนให้ทีมที่มากับสกิล hyv-producer คือผู้กำกับ — มอบงานให้ลูกทีม คุม gate และเป็นคนเดียวที่คุยกับคุณเรื่อง gate
hyv-producer ← ผู้กำกับ: มอบงาน คุม gate ไม่ตัดสินรสนิยมเอง
├─ hyv-researcher เฟส 0 · ค้นจริง ทุกข้ออ้าง ≥2 แหล่ง
├─ hyv-scriptwriter เฟส 1 · บท + narration พร้อมลงเสียง
├─ hyv-script-reviewer เฟส 1 · ตรวจบท pass/fail เทียบ brief
├─ hyv-storyboard เฟส 1 · แตกช็อต ตาม aspect ใน config
├─ ทีมดีเบต เฟส 1 · hook-maximalist vs skeptic-editor vs target-viewer
│ └─ hyv-judge สังเคราะห์ · แนะนำ ไม่ชี้ขาด
├─ hyv-shotlister เฟส 1 · shotlist.xlsx 5 sheet
├─ hyv-voiceover เฟส 2 · ElevenLabs + ffprobe = master clock
│
│ ⟨ เฟส 3 · ถ่ายเอง — ไม่มี agent ตรงนี้ ตรงนี้คือคุณ ⟩
│
├─ hyv-cc-scout เฟส 4 · หาภาพ CC + ตรวจสัญญาอนุญาตเอง
├─ hyv-veo-prompt-smith เฟส 4 · ร่าง prompt เฉพาะช็อตที่ขาด · ไม่เสียเงิน
├─ hyv-veo-runner เฟส 4 · เรนเดอร์ generative · เสียเงิน
└─ hyv-assembler เฟส 5–6 · timeline → editor → delivery/
(เฟส 3 ไม่มี agent โดยตั้งใจ — AI ถือกล้องแทนคุณไม่ได้ ถ่ายเอง ตัด select ตาม timestamp เป๊ะ ๆ โยนเข้าพูล แล้ว hyv-assembler จะหยิบไปใช้เหมือนคลิปอื่นทุกประการ)
กฎ 2 ข้อที่ทีมไม่มีวันฝ่าฝืน: อำนาจสร้างสรรค์เป็นของคน — hyv-judge แค่แนะนำและบอกว่า "เสียงแตก" แต่ คุณ เป็นคนเลือก hook/punchline และทุก gate ต้องหยุดถามคุณ — ยืนยัน output spec, ล็อกหัวข้อ, ดีเบตเสียงแตก, และทุกครั้งที่จะจ่ายเงิน (ค่าเสียง/generative)
ยิงขนานเพื่อสเกล: hyv-researcher หนึ่งตัวต่อหนึ่งหัวข้อพร้อมกัน แล้ว hyv-producer หนึ่งตัวต่อหนึ่งคลิป — แต่ละตัวมี src/<slug>/ ของตัวเอง ไม่ชนกัน ดูรายชื่อเต็ม + สายการตัดสินใจที่ references/subagents.md
aspect, resolution, fps และ editor อยู่ใน src/<slug>/project.config.json — ยืนยันกับคุณก่อนเริ่มผลิตเสมอ 9:16 เป็นแค่ค่าเริ่มต้น ไม่ใช่กฎ: 16:9, 1:1, 4:5 และ custom ใช้ได้เหมือนกันหมด และทุกสคริปต์รับ --aspect/--width/--height/--fps
โปรแกรมตัดต่อก็เป็นค่า config เหมือนกัน เฟส 5 export timeline กลางออกมาชุดเดียว — ep*-timeline.json (เฟรม + SMPTE timecode) กับ ep*-timeline.csv (หนึ่งแถวต่อหนึ่งคลิป) — แล้ว hyv-assembler อ่านค่า editor เพื่อเลือกทาง:
editor |
เกิดอะไรขึ้น |
|---|---|
capcut · premiere · davinci |
คุณได้ CSV/JSON ไปวางคลิปตาม start_tc ในโปรแกรมที่คุณใช้เป็นอยู่แล้ว ไม่ต้องลงอะไรเพิ่ม |
remotion |
ทางโค้ด — new-project.mjs --remotion วางโครง composition + config ให้, timeline JSON สั่งงานมันได้ตรง ๆ และ remotion-best-practices จะถูกโหลดมาช่วยตอนเรนเดอร์ เลือกทางนี้เมื่ออยากให้ตัวตัดต่อสร้างซ้ำจากซอร์สได้ หรือตอนต้องปั๊มวิดีโอหลายตัวจากเทมเพลตเดียว |
สูตรเหมือนกันหมดไม่ว่าเอาไปทำที่ไหน: เสียงพากย์อยู่แทร็กเสียงเดียว (คือ master clock), ทุกคลิป ปิดเสียง วางตาม start timecode, ที่ aspect/fps ตาม config ดูสูตรเต็มที่ references/assembly-and-validation.md
0 Research → 1 เขียนสคริปต์ + ดีเบต punchline → ══ คุณล็อก hook ══
│
┌───────────┴───────────┐ CC + กราฟิก ไม่แตะเสียงเลย
▼ ▼ → เริ่มพร้อมกันได้
2 เสียงพากย์ 3 ถ่าย mock (ถ้าต้องการ)
master clock 4 ภาพ: หา CC · กราฟิก
│ │
└───────────┬───────────┘
▼
4' ภาพ generative (ถ้าต้องการ) — ตัวนี้ต้องรอ
เพราะ prompt ต้องระบุจำนวนวินาทีเป๊ะ ๆ
│
▼ join: นาฬิกาที่วัดแล้ว + คลิปพูล
5 วาง insert ลง TC → 6 ตรวจ + แพ็ก
→ delivery/<slug>/ (manifest.json: status ready)
└─→ วนกลับไป 0 เรื่องต่อไป
แต่ละเฟสมีหน้าที่เดียว เจ้าของเดียว และมี "ของ" ที่ต้องส่งต่อชิ้นเดียว — สัญญาการส่งต่อนี่แหละคือกลไกทั้งหมด มันคือสิ่งที่ทำให้หยุดตรงไหนก็ได้ ส่งต่อให้ใครก็ได้ หรือแตกงานขนานได้ โดยงานไม่พัง
ตัวเลขคือลำดับของข้อมูล ไม่ใช่คิวเข้าแถว — การหาภาพ CC และการทำกราฟิกไม่ต้องใช้เสียงเลย เพราะงั้นต้องเริ่มพร้อมเสียงพากย์ ไม่ใช่รอให้เสียงเสร็จก่อน อันหนึ่งรอ API ช้า อีกอันรอค้นเว็บช้า ทำเรียงกันคือจ่ายค่าช้าสองต่อฟรี ๆ มีสองอย่างที่รอจริง: ภาพ generative (prompt ของ Veo ต้องบอกว่า "เอา N วินาทีเป๊ะ" ซึ่ง N มาจากเสียงที่วัดแล้ว) กับเฟส 5 (timeline ต้องเอานาฬิกามาต่อกับคลิปพูล) ส่วนข้ามหัวข้อยิ่งไม่มีอะไรใช้ร่วมกันเลย — 3 หัวข้อ = producer 3 ตัวพร้อมกัน ไม่ใช่ 3 ตัวเรียงคิว
| เฟส | ทำอะไร | ส่งต่ออะไร | ทำได้ที่ |
|---|---|---|---|
| 0 · Research | เลือกหนึ่งหัวข้อ แล้วทำ brief ข้อเท็จจริง: thesis, insight ที่คนไม่รู้มาก่อน, ข้อมูลสำคัญพร้อมแหล่ง — ทุกข้ออ้างยืนยัน ≥2 แหล่งอิสระ และ ล็อก subject ไว้ ไม่ให้ prompt/ภาพหลุดไปเป็นของคล้าย ๆ ทีหลัง | research.md + slug |
ทุกชั้น |
| 1 · เขียนบท + ดีเบต punchline | ร่างบท แล้วถึงท่าไม้ตายที่เป็นที่มาของชื่อสกิล: agent เถียงกันเรื่อง hook กับ punchline — Hook Maximalist ดันให้สะดุดตาที่สุด, Skeptic/Editor ไล่บี้ว่า clickbait ที่เนื้อจ่ายคืนไม่ได้, Target Viewer ถามว่า "กูแคร์ไหม" แล้ว hyv-judge สรุปพร้อมบอกว่าเสียงแตกไหม — มันแนะนำ ไม่ได้ชี้ขาด คุณเลือกเอง จบด้วยการเขียนใหม่เป็น narration พร้อมลงเสียง |
voiceover-v1.md (hook ที่ล็อกแล้ว) |
ทุกชั้น |
| 1e · Shotlist | กระดูกสันหลังของการวางแผน: หนึ่งแถวต่อหนึ่งช็อต, จะถ่ายเองหรือหาจากไหน, สัญญาอนุญาต, ตอนไหนใช้ซ้ำบ้าง และคอลัมน์ status ที่อัปเดตตลอด ทำตรงนี้ให้ดี เฟส 3–5 จะง่ายหมด |
shotlist.xlsx |
Production — ต้องมี Python |
| 2 · เสียงพากย์ | ทำเสียง แล้ววัดจริงด้วย ffprobe นี่คือ master clock |
ep*.mp3 + voiceover-durations.json |
Production |
| 3 · ถ่าย mock (ถ้าต้องการ) | ถ่ายช็อตเฉพาะเอง รีวิวแล้วตัดเป็น select ตาม timestamp เป๊ะ ๆ เท่านั้น คลิปลอย ๆ ไม่รับ หลายโปรเจกต์ข้ามเฟสนี้ไปเลย | select ที่เงียบแล้ว | Production |
| 4 · หาภาพ | เติมทุกบีตจากแหล่งที่เหมาะ: Creative-Commons (ตรวจสัญญาอนุญาตเอง — ตัวกรอง CC ของ YouTube โกหก), คลิป generative, select ที่ถ่ายเอง หรือ motion graphic กราฟิกคือทางออกที่มีเสมอ | คลิปพูลที่รีวิวแล้ว + ATTRIBUTION.md |
Production |
| 5 · วาง insert ลง TC | วางทุกคลิปบนนาฬิกาที่วัดจริง — timecode ต่อเนื่องไม่มีรู, ตัวสุดท้ายจบพอดีความยาวเป้าหมาย — แล้ว export timeline กลาง (JSON + CSV) เอาไปประกอบใน CapCut/Premiere/DaVinci หรือโค้ดก็ได้ | ep*-timeline.json + .csv |
Production |
| 6 · ตรวจ + แพ็ก | ffprobe ยืนยันความละเอียด/fps/ความยาว/เสียงตรงกับภาพ · คุณดูฟุตสองสามเฟรมด้วยตา · แล้วรวบของที่กระจายอยู่ใน src/, public/, out/ มาไว้โฟลเดอร์เดียว |
delivery/<slug>/ · status: ready |
Production |
กฎเหล็ก 3 ข้อ ที่ทุกเฟสห้ามฝ่าฝืน:
- เสียงพากย์คือ master clock — timecode ทุกตัวมาจากเสียงที่วัดจริง ไม่ใช่จากความยาวที่เดาจากบท ตัวเลขที่เดามาจะทำให้ทุกอย่างหลังจากนั้นเพี้ยนแบบเงียบ ๆ แล้วคุณจะรู้ตัวตอนเรนเดอร์ออกมาผิดแล้ว
- คลิปภาพเงียบทั้งหมด — narration เป็นแทร็กเสียงเดียว ถ้าจะมีเสียงบรรยากาศ ก็เป็นเบดยาวต่อเนื่องอันเดียวอยู่ข้างใต้
- output spec ต้องอ่าน ห้ามเดา — จาก
project.config.jsonและยืนยันกับคุณก่อนเสมอ
เส้นแบ่งชั้นอยู่ตรงไหน: เฟส 0–1 เป็นการคิดล้วน ๆ Basic กับ Advance ทำได้สบาย แต่ตั้งแต่ shotlist เป็นต้นไป ทุกเฟสต้องเรียก binary จริงหรือไปจบที่โปรแกรมตัดต่อ — นั่นคือ Production สังเกตว่า 1e อยู่ในเฟส 1 แต่ต้องใช้ Claude Code เพราะเส้นแบ่งขีดด้วย "ต้องใช้เครื่องมืออะไร" ไม่ใช่เลขเฟส
เงินขยับแค่ 2 จุด — เฟส 2 (เสียง) กับเฟส 4 (generative) ทั้งคู่สคริปต์ปฏิเสธที่จะจ่ายถ้าไม่มี --yes และทั้งคู่มีฝาแฝดฟรี (--emit-md) ที่ยื่น prompt ให้คุณเอาไป gen ที่ไหนก็ได้
หนึ่งโฟลเดอร์ ไม่ใช่ไฟล์กระจัดกระจาย:
delivery/<slug>/
manifest.json ← ดัชนีหลัก (เช็กรายตอน + สถานะ)
README.md ← สรุปสำหรับคนอ่าน
video/ ← ไฟล์เรนเดอร์สุดท้าย
voiceover/ ← ไฟล์เสียงพากย์ mp3
script/ ← voiceover-v1.md + shotlist.xlsx
briefs/ ← แผน insert รายตอน
attribution/ ← เครดิตและสัญญาอนุญาต
thumbnails/
"เสร็จ" = manifest.json รายงาน status: "ready"
skills/hearyourvoice/
SKILL.md ตัว orchestrator (phase 0–6)
references/ pipeline-loop · research-brief · script+VO spec ·
punchline-debate · subagents · shotlist-format ·
footage-sources · veo-prompt-guide ·
assembly+validation · output-format · naming · examples/
scripts/ new-project · new-shotlist · gen-voiceover ·
measure-voiceover · gen-veo-briefs · veo-generate ·
check-insert-plan · export-timeline · package-delivery
agents/ ทีม subagent hyv-* ทั้ง 16 ตัว
ไม่ผูกกับ editor ตัวใดตัวหนึ่ง: มัน export timeline กลาง (JSON + CSV) ที่คุณเอาไปประกอบใน CapCut, Premiere, DaVinci Resolve, หรือ code renderer ก็ได้ — แล้วแพ็กเป็นโฟลเดอร์ส่งมอบที่สะอาด สามารถเรียกใช้ veo-insert-planner (ภาพ generative) และ remotion-best-practices (เฉพาะถ้าประกอบด้วยโค้ด) เป็น option ได้
ลูปนี้มี สองครึ่ง ที่ต้องการคนละอย่างกันมาก:
- ครึ่งที่คิด — research, เขียนบท, ดีเบต punchline, storyboard ใช้แค่การให้เหตุผล รันที่ไหนก็ได้
- ครึ่งที่ใช้เครื่อง — วัดเสียงด้วย
ffprobe, ดึงฟุตเทจด้วยyt-dlp, ทำ shotlist ด้วย Python, ตัดต่อใน CapCut/Premiere/DaVinci ของคุณ อันนี้ต้องมี shell จริงบนเครื่องจริงที่มีไฟล์คุณอยู่
ได้ครึ่งไหนขึ้นกับว่ารันที่ไหน — เลือกชั้นที่ใช่:
| Basic | Advance | Production | |
|---|---|---|---|
| ที่ไหน | Chat — เว็บ หรือ tab Chat ในแอป | Cowork | Claude Code — CLI หรือ tab Code |
| ติดตั้ง | plugin | plugin | npx hearyourvoice install |
| ทีม | ❌ agent เป็นสีเทาในแชท | ✅ ครบ 16 ตัว แตกงานขนานกัน | ✅ ครบ 16 ตัว |
| ครึ่งที่คิด | ✅ | ✅ | ✅ |
| ครึ่งที่ใช้เครื่อง | ❌ ไม่มี shell | ❌ — ดูเหตุผลข้างล่าง | ✅ |
| เหมาะกับ | หัวข้อเดียว คิดให้ตกผลึก | research + เขียนบท ทีละหลายเรื่องพร้อมกัน | ทำวิดีโอให้เสร็จจริง |
Basic = Claude ตัวเดียวที่มีวิธีการทั้งหมดอยู่ในหัว พอสำหรับพาหนึ่งไอเดียจากหัวข้อไปจนได้ hook ที่ผ่านการดีเบต
Advance = จุดที่สนุก โยน 3 หัวข้อให้ Cowork แล้ว hyv-producer แตกลูกทีมออกไปทำทั้ง 3 เรื่องพร้อมกัน — researcher ยืนยันแหล่งข่าวขนานกัน ทีมดีเบตเถียงเรื่อง hook ของแต่ละเรื่อง hyv-judge บอกว่าเรื่องไหนเสียงแตก ไม่ต้องมี terminal เลย (ทดสอบจริงแล้ว: ทีมแตกงานขนานกันใน Cowork ได้)
Production = ชั้นเดียวที่ทำวิดีโอจบได้ เพราะมีแต่เครื่องคุณเท่านั้นที่มี ffmpeg ของคุณ ฟุตเทจของคุณ และโปรแกรมตัดต่อของคุณ
และมันต่อกันได้ — คิดกับดีเบตหลายเรื่องรวดใน Cowork แล้วเอาเรื่องที่ชนะเข้า Claude Code เพื่อผลิตจริง
shell ของ Cowork "execute[s] inside a dedicated Linux VM, isolated from the host operating system by the platform's hypervisor" — ต่อให้เป็นโหมด local มันก็เอื้อมไม่ถึง ffmpeg ที่ลงไว้บน Mac ของคุณ และ Anthropic ไม่เคยระบุว่าใน VM นั้นมีอะไรติดมาบ้าง ยังไงขั้นตัดต่อสุดท้ายก็จบที่โปรแกรมบนเครื่องคุณอยู่ดี
นี่ไม่ใช่กำแพง แต่คือรอยต่อ — Cowork เก่งครึ่งที่คิด Claude Code รับช่วงที่เหลือ
ทดสอบอะไรไปแล้ว และอะไรที่ยังไม่รู้
เห็นกับตา: plugin ติดตั้งใน Cowork ได้ · hyv-producer ถูกเรียกด้วยชื่อจริง · ลูกทีมแตกงานขนานกันหลายหัวข้อ
ยังไม่ได้ทดสอบ: VM ของ Cowork มี node/ffmpeg/python ไหม และขั้นที่เสียเงินจะเป็นยังไงบนนั้น — gate เรื่องเงินอยู่ในตัวสคริปต์แล้ว (ไม่มี --yes = ไม่จ่าย) แต่ยังไม่มีใครเห็นพฤติกรรมนั้นบน VM ของ Cowork เพราะงั้นถือว่า phase 2 เป็นต้นไปเป็นงานของ Claude Code ไปก่อน
README เวอร์ชันก่อนหน้าเคยเขียนว่า Cowork ทำอะไรไม่ได้เลย — อันนั้นผิด และมันเขียนจากการอ่าน docs ไม่ใช่จากการลองจริง
จำง่าย ๆ: คิดใน Cowork ทำให้จบใน Claude Code ถ้า Claude เอื้อมไม่ถึง ffmpeg กับโปรแกรมตัดต่อของคุณ มันก็ทำวิดีโอไม่จบ ต่อให้สกิลดีแค่ไหนก็ตาม
plugin ตัวเดียวได้ทั้งสองชั้น: skill ทำงานในแชท และทีมทั้งกองตื่นขึ้นมาใน Cowork
-
โหลดไฟล์ plugin zip จาก release ล่าสุด
-
Claude → Customize → Plugins → upload ไฟล์ zip นั้น
-
ใช้งาน — สั่งเป็นภาษาคนได้เลย ถ้าอยู่ใน Cowork โยนหลายเรื่องรวดได้:
"/hearyourvoice ทำ 3 เรื่องนี้พร้อมกัน: ค่าไฟแพง, ฝุ่น PM2.5, หนี้ครัวเรือนไทย — เอาแค่ research + เขียนบท + ดีเบต hook"
hyv-producerจะรับงานแล้วแตกลูกทีมไปทำทั้ง 3 เรื่อง
ถ้าจะอัปเข้าช่อง Skills แทน Plugins: คนละโครงกัน และไม่พา agent ไปด้วย release เลยไม่แนบมาให้ — สร้างเองด้วย
node bin/build-bundles.mjsมันสร้างhearyourvoice-skill-<v>.zipให้ด้วย ได้วิธีการแต่ไม่ได้ทีม เลือกอย่างใดอย่างหนึ่ง อย่าอัปทั้งคู่ ไม่งั้นจะมีhearyourvoiceกับhearyourvoice:hearyourvoiceซ้อนกัน แล้วคุณจะไม่รู้ว่าตัวไหนกำลังตอบถ้าแก้ skill เอง:
node bin/build-bundles.mjsจะแพ็กโค้ดในเครื่องคุณเป็น zip ทั้งสองแบบไว้บน Desktop — ทางนี้สำหรับของที่แก้แล้วแต่ release ยังไม่มี
ไม่ต้องเปิด terminal แยกเลย เพราะแอปมี terminal ในตัวอยู่แล้ว
- โหลดแอป — macOS หรือ Windows แล้วล็อกอิน (Windows ต้องลง Git for Windows ด้วย แล้วรีสตาร์ทแอป) หรือใช้
claudeCLI ก็ได้ - กด tab
Code(ไม่ใช่ Chat ไม่ใช่ Cowork) - ตั้ง Environment เป็น
Local— ข้อนี้คนพลาดกันบ่อยสุด ถ้าเลือก Remote มันจะไปรันบนคลาวด์ แตะไฟล์ในเครื่องคุณไม่ได้ - เลือกโฟลเดอร์โปรเจกต์ — โฟลเดอร์ที่จะเก็บงานวิดีโอของคุณ
- เปิด terminal ในแอป — กด
Ctrl+`แล้ววางบรรทัดเดียว:npx hearyourvoice install
- เช็กว่าขาดอะไร —
npx hearyourvoice doctorบอกทั้ง Node / Python / ffmpeg และ API key ตัวไหนตั้งแล้วบ้าง (ไม่พิมพ์ค่า key ออกมา) - ใช้งาน — พิมพ์
/hearyourvoiceแล้วบอกว่าจะทำวิดีโอเรื่องอะไร มันแตกทีมให้เอง ไม่ต้องเรียกชื่อhyv-producer
จบแล้ว — CLI กับแอปใช้ที่ติดตั้งร่วมกัน ทำครั้งเดียวได้ทั้งสองทาง
ทั้งคู่คือการติดตั้งของ Claude Code เหมือนกัน — ต่างกันแค่ ขอบเขต
ทั้งเครื่อง (global) — ใช้ได้ทุก session:
npx hearyourvoice install # skill → ~/.claude/skills/ · agents → ~/.claude/agents/
npx hearyourvoice install codex # → ~/.codex/skills/hearyourvoice (เฉพาะ skill)
npx hearyourvoice install hermes # → ~/.hermes/skills/hearyourvoice (เฉพาะ skill)ระดับโปรเจค — เฉพาะ repo ที่กำลังทำ (รันจาก root ของมัน):
cd ~/path/to/your-video-repo
npx hearyourvoice install project # → ./.claude/skills/ + ./.claude/agents/ตัวติดตั้งแตะเฉพาะไฟล์ hyv-*.md ของตัวเอง — agent ตัวอื่นของคุณไม่ถูกแตะต้อง ส่วน Codex/Hermes ได้เฉพาะ skill เพราะ .claude/agents/ เป็นของ Claude Code
Global (install) |
Project (install project) |
|
|---|---|---|
| อยู่ที่ | ~/.claude/skills/ + ~/.claude/agents/ |
./.claude/ ใน repo |
| ใช้ได้ที่ | ทุก session ในเครื่อง | เฉพาะ repo นั้น |
| ขึ้น git ไหม | ไม่ | ได้ ถ้า commit .claude/ |
| เวอร์ชัน | ตัวเดียว ใช้ทุกที่ | pin แยกต่อ repo |
| เหมาะกับ | เครื่องตัวเอง ทำหลายคลิป เวอร์ชันเดียว | ทีมที่แชร์ repo เดียวกัน หรืออยากรันหลายเวอร์ชันคู่กัน |
ไม่รู้จะเลือกอะไร → เอา global คำสั่งเดียว ใช้ได้ทุก session อัปเดตทีเดียวได้หมด: npx hearyourvoice install
เลือก project เมื่อ อยากให้เพื่อนร่วมทีมได้เวอร์ชันเดียวกันเป๊ะแค่ clone repo (commit .claude/ ไปด้วย เขาไม่ต้องติดตั้งเลย) หรือเมื่อคนละ repo ต้องใช้คนละเวอร์ชัน
Claude Code ปฏิบัติกับสองอย่างนี้ไม่เหมือนกัน และมันจะทำให้คุณงงถ้าไม่รู้:
- skill — global ชนะ project ถ้าชื่อซ้ำกัน (docs: "enterprise overrides personal, and personal overrides project")
- agent — project ชนะ ถ้าชื่อชนกัน แต่ agent ที่ลง global ยังโผล่ในทุกโปรเจกต์ — มันเพิ่มเข้าไป ไม่ได้ถูกแทนที่
ผลที่ตามมาจริง 2 ข้อ:
- ลง global ทีเดียว = ลบล้าง project แบบเงียบ ๆ ถ้ามี HearYourVOICE ตัว global อยู่ สกิลที่ลงไว้ใน project จะถูกมองข้าม — ต่อให้ตัวใน project ใหม่กว่าก็ตาม การลงแยกเวอร์ชันต่อ repo จะได้ผลก็ต่อเมื่อไม่มีตัว global เลย
- agent ตัว global ตามคุณไปทุกที่ ถ้าลงทีมแบบ global แล้ว
hyv-*จะโผล่ในทุกโปรเจกต์ รวมถึงอันที่คุณอยากได้แค่ skill เปล่า ๆ
สรุป: เลือก scope เดียวแล้วอยู่กับมัน ถ้าต้องการเวอร์ชันแยกต่อ repo (หรืออยากเดโมสองเวอร์ชันเทียบกัน) ให้ไม่ลง global เลย แล้วใช้ install project ในแต่ละที่แทน
เช็ก toolchain ได้ทุกเมื่อ: npx hearyourvoice doctor (Node / Python / ffmpeg)
ใช้จาก local checkout ก็เหมือนกัน ผ่าน
npx .:cd HearYourVOICE && npx . install project• หรือใช้ bash fallback./install.sh <target>
จากนั้นเปิด session แล้วพิมพ์ "ทำวิดีโอเรื่อง <หัวข้อ> ด้วย HearYourVOICE" หรือโยนให้ทีมเลย: "ให้ hyv-producer ผลิตวิดีโอเรื่อง <หัวข้อ>" ดูรายละเอียด, dependency, และรายการ Environment & API keys ฉบับเต็มได้ใน INSTALL.md
- Node 18+ (เครื่องมือ
.mjs), Python 3 +openpyxl(shotlist), ffmpeg/ffprobe (วัดเวลา & ตรวจเรนเดอร์) - ทีม subagent ต้องใช้ Claude Code v2.1.172+ (รองรับ subagent ซ้อน) ส่วนตัว skill รันที่ไหนก็ได้
- สำหรับตัดต่อขั้นสุดท้าย: editor ที่คุณถนัด (CapCut, Premiere, DaVinci, หรือ code renderer), ElevenLabs API key (เสียงพากย์), และ — เฉพาะถ้าใช้ภาพ generative — Veo provider plugin ของคุณเอง
ต้องพูดให้ชัด เพราะทางที่แพงคือทางที่คนมักคิดว่าจำเป็น:
| เฟส | ทางที่จ่าย | ทางฟรีที่ก็ได้งานเหมือนกัน |
|---|---|---|
| 2 · เสียงพากย์ | ElevenLabs API | gen-voiceover.mjs --emit-md → เอาไปพากย์ใน UI ของ ElevenLabs เอง, TTS เจ้าอื่น, โมเดลในเครื่อง หรืออ่านเองเลยก็ได้ |
| 4 · หาภาพ | คลิป generative | ภาพถ่าย Creative-Commons จริง — fetch-cc-images.mjs ดึงจาก Openverse + Wikimedia ตรวจสัญญาอนุญาตให้ แล้วเอาข้อความคุณซ้อนบนภาพ ส่วนกราฟิกเป็นทางสำรองรองลงมา |
node scripts/fetch-cc-images.mjs --slug pm25-dust --query "ฝุ่น" --source wikimedia --limit 5วิดีโอที่สร้างจาก ภาพถ่ายที่มีลิขสิทธิ์ถูกต้อง + ตัวหนังสือซ้อน คือผลงานที่สมบูรณ์ ไม่ใช่ของตกเกรด — คลิปอธิบายความทำแบบนี้กันมาหลายสิบปีแล้ว และหลายครั้งชัดกว่าฟุตเทจสต็อกที่เข้ากับสิ่งที่พูดแบบเลือน ๆ ด้วยซ้ำ ตัวเรนเดอร์แบบโค้ดจะใส่ซูมช้า ๆ ให้ภาพนิ่ง มันจะได้ดูเป็นวิดีโอไม่ใช่สไลด์โชว์ และ hyv-assembler ก็ปฏิบัติกับมันเหมือนคลิปอื่นทุกประการ
สัญญาอนุญาตต้อง "อ่าน" ไม่ใช่ "กรอง" — ตัวกรอง CC ของ Google Images มี false positive เหมือนของ YouTube เป๊ะ เพราะมันกรองเว็บเปิด ไม่ได้อ่าน license จริง ทุกภาพที่นี่อ่าน license จาก metadata ต้นทาง · ND ตัดทิ้งทันที (เอาไปตัดต่อ = ดัดแปลง) · NC ตัดทิ้งเว้นแต่สั่งเอง · และ creator/licence/URL ถูกเขียนลง ATTRIBUTION.md ตั้งแต่ตอนโหลด
generative เป็นแค่แหล่งภาพหนึ่งที่เป็น option ไม่ใช่ค่าตั้งต้น งานส่วนใหญ่ไม่ต้องใช้เลย
ภาพ generative (Google Veo) แพงมาก ราคาประมาณ $0.75 ต่อวินาที (≈ ฿30/วินาที) หมายความว่า insert สั้น ๆ แค่ 6 วินาที ก็ตกราว $4.5 (≈ ฿180) และถ้าทำคลิปยาว 90 วินาทีด้วย Veo ล้วน ๆ จะตกราว $67 (≈ ฿2,700) (ราคาเปลี่ยนได้ตามเวลา — เช็กเรตปัจจุบันก่อนตัดสินใจเสมอ)
อย่าคว้ามาใช้ถ้าช็อตนั้นยังถ่ายได้ หาได้ หรือวาดได้ และคุณจ่ายพลาดโดยไม่ตั้งใจไม่ได้ — สคริปต์ที่เสียเงินทั้งสองตัวปฏิเสธที่จะรันถ้าไม่มี --yes มันจะพิมพ์ราคาที่จะโดนชาร์จแล้วหยุด ส่วน hyv-veo-runner จะโชว์ราคาประเมินและรอคุณอนุมัติก่อนจ่ายทุกบาท
แต่ skill นี้คุ้มตรงไหน: ถ้าเป้าหมายคุณคือผลิตคอนเทนต์ ปริมาณมาก — เช่นวันละร้อยชิ้น — harness ที่ทำซ้ำได้คือสิ่งที่ทำให้ปริมาณระดับนั้นเป็นไปได้โดยคุณภาพไม่พัง นี่แหละคือคนที่ skill นี้ถูกสร้างมาเพื่อ
อย่าขโมย footage ใคร ภาพที่ไปหามา ให้ค้นเฉพาะ Creative Commons (CC / NC) เท่านั้น — ตรวจสัญญาอนุญาตด้วยตัวเอง (ตัวกรอง "CC" ของ YouTube ให้ผลหลอกได้), บันทึกเครดิต + URL ต้นทางไว้ใน ATTRIBUTION.md, และทิ้งทุกอย่างที่เคลียร์สิทธิ์ไม่ได้ — hyv-cc-scout ทำแบบนี้เป๊ะ ๆ และทิ้งทุกอย่างที่เคลียร์ไม่ได้ การก๊อปงานคนอื่นมาใช้ ไม่ใช่กลยุทธ์หา footage
MIT — ดูที่ LICENSE
ชื่อ HearYourVOICE ตั้งขึ้นเพื่อระลึกถึง VOICE TV — สถานีที่ "ปลูกความคิด" ให้สังคมไทยตลอด 15 ปี (พ.ศ. 2552–2567)
ผม ชานนท์ เงินทองดี เริ่มต้นที่นี่ในตำแหน่งแรกคือ Head of Research and Development ตั้งแต่วันก่อตั้งสถานี โปรเจคนี้คือความตั้งใจถอด know-how ที่เราใช้กันในห้องข่าวและงานโปรดักชันของ VOICE TV ออกมาเป็น SKILL.md — เปลี่ยนวิธีคิดและกระบวนการทำคอนเทนต์คุณภาพ ให้กลายเป็นสิ่งที่ "ทำซ้ำได้" ในยุค AI
เมื่อวานผมได้คุยกับ คุณทรงศักดิ์ เปรมสุข ผู้ร่วมก่อตั้งและกรรมการผู้อำนวยการสถานี ท่านบอกว่า — "ถ้าวันนั้นเรามี AI โลกของทีวีคงไปได้ไกลกว่านี้อีกเยอะ" จริงอยู่ที่วันนี้ VOICE TV ไม่ได้ออกอากาศแล้ว แต่วิธีคิดและวิธีทำงานของมันไม่จำเป็นต้องจบลงตามไปด้วย เพราะ SKILL.md สืบทอดต่อได้ด้วยมันสมองใด ๆ ก็ได้ในโลก ไม่ว่าจะเป็นของคนหรือของ AI
หวังว่าโครงสร้างของโปรเจคนี้ จะช่วยให้ใครก็ตามหยิบไปสร้างคอนเทนต์และประเด็นคุณภาพ ออกสู่สังคมไทยได้ต่อไป
Hear your voice — เพราะทุกความคิดที่ดี ควรมีพื้นที่ให้ได้ยิน