MCP.Market

ai-presenter-video skill

by NousResearch·NousResearch/hermes-agent·263k stars·MIT

Make a verified AI presenter video from script + image.

A100/100content scan

Is the ai-presenter-video skill safe?

Clean: nothing in its files matched our rules. We read 9 files in the folder on 2026-10-25.

No findings.

Install the ai-presenter-video skill

A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.

git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /tmp/hermes-agent
mkdir -p ~/.claude/skills
cp -r /tmp/hermes-agent/optional-skills/creative/ai-presenter-video ~/.claude/skills/ai-presenter-video
available in every project

In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub

The instructions your agent would load

SKILL.md as published, without the frontmatter. Read it on GitHub

AI Presenter Video

Turn a topic (or finished script) plus ONE authorized adult presenter image into a complete, publish-ready presenter-led video: locked narration, avatar generation with lip-sync QA, captions, deterministic editing, loudness-normalized master/share encodes, and machine + visual acceptance reports.

Use this skill for new presenter videos AND for continuing, revising, captioning, lip-sync-repairing, or re-exporting an existing presenter-video job. The workflow is provider-neutral: pick generation capabilities from what is actually available in the session (FAL video/image models via imagegenerate and the video-gen plugin, TTS via textto_speech, ASR via the whisper/STT tooling, ffmpeg for everything deterministic).

Ported from cclank/lanshu-create-ai-presenter-video (MIT). Upstream body

kept substantively verbatim in references/; Hermes adaptations live in

this hub file. Scripts are deterministic (no network, no credentials).

Hermes adaptations (read first)

In Hermes the loader expands ${HERMESSKILLDIR} to this skill's installed directory, so every command below uses that token directly:

  • Skill dir resolution — upstream hardcoded its own agent's skills path.
SKILL_DIR="${HERMES_SKILL_DIR}"

Shell variables do not persist between tool calls — re-paste the assignment (or the expanded path) in each terminal call that uses it.

capability", use texttospeech (OpenAI/Edge/ElevenLabs per user config); "presenter/avatar generation" → FAL image-to-video families (Kling, Wan, MiniMax H3 etc.) through the configured video tooling, or an avatar/lipsync endpoint the user has access to; "word-timestamp ASR" → whisper via the STT tooling or faster-whisper in a venv; "deterministic compositor" → ffmpeg filtergraphs, or the hyperframes skill when installed (the editing reference has a HyperFrames section that maps directly onto it).

  • Capability mapping — where the references say "a voice generation

vision_analyze on the generated contact sheet plus sampled frames (identity, mouth timing, hands, blinking, continuity). Numeric checks come from the scripts' ffprobe output.

  • Visual QA — do the "normal-speed visual review" steps with

Follow the upstream operating rules: before the first paid call state the uploaded assets, requested seconds, known cost, pilot size, and retry ceiling, and get the user's explicit go-ahead. Never upload the presenter image to a remote provider before remoteuploadapproved is true in job.json.

  • Paid-generation consent — remote avatar/TTS generation is billable.

adultpresenterconfirmed, remoteuploadapproved, and voicecloneapproved sit inside the input object of job.json (init flags set them; hand-editing must target input., not the job root). manualinputreview. sits at the root. preflight.py distinguishes errors (block everything) from remote_blockers (block only remote generation) — local script/audio work may proceed while remote is blocked.

  • Consent flags live under input — rights_confirmed,

Workflow

  1. Start or resume a job. New job:
python3 "$SKILL_DIR/scripts/init_job.py" \
     --job-dir ~/Videos/my-presenter-video \
     --presenter-image /path/to/presenter.png \
     --topic "explain context engineering in one minute" \
     --duration 60 --aspect 9:16 \
     --rights-confirmed --adult-presenter-confirmed

Use --script for an existing script file; other flags: --voice-sample, --supporting-media, --width, --height, --fps, --watermark, --cta. For an existing job, read job.json + QA reports and resume from the earliest unfinished state — never regenerate accepted work.

(visionanalyze) and listen to any voice sample; record findings by setting the manualinput_review booleans in job.json, e.g.:

  1. Manual input review. Actually look at the presenter image
python3 - <<'PY'
   import json
   p = "~/Videos/my-presenter-video/job.json"  # expand ~ or use an absolute path
   import os; p = os.path.expanduser(p)
   j = json.load(open(p))
   j["manual_input_review"].update(image_viewed=True, single_clear_face=True,
                                   image_has_no_unwanted_text=True)
   json.dump(j, open(p, "w"), indent=2)
   PY

Then gate:

python3 "$SKILL_DIR/scripts/preflight.py" ~/Videos/my-presenter-video/job.json

Proceed only when ok: true; do remote generation only when remote_ready: true. Note: preflight also updates job.json in place (records the report path) — re-read it after running rather than editing a stale copy.

full narration via texttospeech → ASR-verify the narration against the script → record real durations. The locked audio is the master clock for everything downstream.

  1. Lock content and audio — read references/generation.md. Script →

Short low-cost pilot first; full run only after the pilot passes identity and mouth-timing review.

  1. Plan and generate the presenter — read references/generation.md.

the locked audio; captions and keyword callouts only after audio and media are final.

  1. Edit — read references/editing.md. Deterministic timeline driven by
  1. Verify and deliver — read references/qa-recovery.md, render, then:
bash "$SKILL_DIR/scripts/finalize_delivery.sh" \
     ~/Videos/my-presenter-video/renders/rendered.mp4 \
     ~/Videos/my-presenter-video/outputs my-video

The finalizer preserves aspect ratio, runs two-pass loudness normalization (program ≈ −16 LUFS), produces master + share encodes, decode-verifies both, writes a delivery report JSON, and emits a nine-frame contact sheet. Inspect the contact sheet with vision_analyze before claiming completion.

Operating rules (non-negotiable)

voice-cloning authorization before the relevant remote action.

  • Confirm image rights, adult status, remote-upload approval, and

sample or a stock TTS voice.

  • Never infer or clone a real person's voice from an image; use an authorized

final scene boundaries.

  • Lock the complete narration before presenter generation, caption timing, or

and intentional mix tracks carry audio.

  • Mute video sources in the final composition; only the approved narration

URLs). Poll interrupted work before resubmitting — avoid double billing.

  • Preserve provider request bodies and task IDs (minus credentials/expiring

sheet or full playback has been reviewed.

  • Stop after three rejected paid candidates and summarize the failure mode.
  • Do not claim completion until the final files fully decode and the contact

Defaults for minimal input

9:16, 1080×1920, 30fps; topic-derived videos target 45–75s; stock voice when no authorized sample; presenter-led layout with hook → 2–4 beats → close; no music/CTA unless requested; language inferred from the request.

Reference routing

presenter prompts, paid generation, provider changes.

  • references/generation.md — intake, content, voice, capability selection,

keyword-callout presets, HyperFrames composition, exports.

  • references/editing.md — timeline contract, openings/closes, captions,

recovery for lip-sync/identity/hands/exposure/freeze/caption/audio faults.

  • references/qa-recovery.md — technical acceptance, visual acceptance, and

More skills from NousResearch/hermes-agent

  • A1passwordSet up op CLI, sign in, and read or inject secrets.
  • A3-statement-modelBuild integrated IS/BS/CF financial workbooks in Excel.
  • AaccelerateRun PyTorch training across GPUs with minimal changes.
  • Cactual-setupSet up Actual Computer (actual.inc) inference in Hermes.
  • Aadversarial-ux-testRoleplay a hostile user to find and triage UX pain points.
  • Aagent-merge-conflict-arbiterNeutral arbiter for merge conflicts between two agents.
  • AagentmailUse when an agent needs AgentMail CLI email inboxes.
  • AairtableAirtable REST API via curl. Records CRUD, filters, upserts.
  • AanatomyExplain an idea as an interactive isometric machine figure.
  • Cantigravity-cliOperate the Antigravity CLI (agy): plugins, auth, sandbox.
  • Aapple-notesManage Apple Notes via memo CLI: create, search, edit.
  • Aapple-remindersApple Reminders via remindctl: add, list, complete.

All agent skills → · MCP servers