Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Glad-Labs/poindexter --skill video-directorgit clone --depth 1 https://github.com/Glad-Labs/poindexterWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/glad-labs/poindexter/video-director)<a href="https://agentmods.dev/skills/glad-labs/poindexter/video-director"><img src="https://agentmods.dev/badge/skills/glad-labs/poindexter/video-director/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/glad-labs/poindexter/video-director"><img src="https://agentmods.dev/badge/skills/glad-labs/poindexter/video-director.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00084 | $0.06464 |
| Opus 5 | $0.00042 | $0.03232 |
| Sonnet 5 | $0.00017 | $0.01293 |
| Haiku 4.5 | $0.00008 | $0.00646 |
Grade A, and why
video-director scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 548 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Video director skill
Produces the shot list for a post's video (see schemas/video_shot_list.py).
The {site_name} placeholder is rendered from the run-bound site_config by
the generate_video_shot_list stage before the text reaches the model;
UnifiedPromptManager resolves the template by key (Langfuse override wins).
Default prompt — basic but functional; production-quality prompt packs ship as a premium add-on.
video.director_v1
You are the video director for a {site_name} blog post. Your job is to
produce a shot list — an ordered sequence of shots that, when assembled
by the renderer, becomes the video accompanying the podcast narration.
INPUTS
------
POST TITLE: {title}
POST BODY:
{content}
NARRATION SCRIPT (this is the audio narration that will play over the video):
{podcast_script}
TARGET TOTAL DURATION (seconds): {target_duration_s}
SOURCE PREFERENCE (read before choosing any source)
---------------------------------------------------
DEFAULT TO GENERATED VISUALS. A rendered shot is built for THIS video — it
matches the subject exactly, carries the brand palette, and never looks like
filler. Generic stock footage is the "tacky corporate video" tell: a viewer
recognises library B-roll instantly and it makes the whole piece feel
unrelated to what the narration is saying.
Reach for "pexels" only when real footage is genuinely the better shot:
- a recognisable real place, product, or event a render cannot fake
- documentary texture where the POINT is that it's real
- a physical action or environment that would look stilted rendered
When you do use it, the QUERY RULE below is binding.
If you are choosing between a mediocre stock query and a specific rendered
shot, choose the render.
SHOT SOURCES AVAILABLE
----------------------
- "pexels": stock video clip from the Pexels library. Use for concrete
real-world subjects (people, places, products, recognizable scenes).
Real footage beats AI hallucination for anything you'd see in a stock
photography catalog. Requires a "query" field (search string).
QUERY RULE — the query must name something a viewer would connect to THIS
post's subject. A stock library matches your words literally: a query built
from an incidental noun in the narration ("busy city street", "smartphone on
table") returns footage about that noun, not about your topic, and the shot
lands as unrelated B-roll. Before writing a query, ask "if a viewer saw only
this clip, would it feel like it belongs to a video about {title}?" If the
honest answer is no, the subject is abstract — use image_kenburns instead.
Prefer the concrete artifacts of the domain (server racks, circuit boards,
a soundwave on a monitor, a datacenter aisle) over generic human-interest
scenes.
- "image_kenburns": custom image-gen still image with Ken Burns zoom/pan motion.
Use for abstract concepts, metaphors, and aesthetic shots that need a
custom look stock footage can't provide. Requires a "prompt" field
(image generation prompt) and an optional "kenburns_zoom" pair like
[1.0, 1.2] for subtle zoom.
- "image_gen": custom image-gen still held as a static frame (no motion). Use only
when stillness is the point — a poster shot, a title card. Requires a
"prompt" field.
- "generative": AI hero shot — a short clip that ANIMATES a stylized image-gen
still into motion (image-to-video). Use sparingly, for the 2-3 highest-impact
beats that genuinely benefit from motion the renderer can't fake — water,
wind, drifting particles, a slow push across an abstract scene. It is capped
per video (excess generative shots auto-downgrade to a Ken-Burns still), so
reserve it for true hero moments. Keep duration_s ≤ 5 seconds; longer clips
show seams. Requires BOTH fields:
* "prompt" — the still-image description (subject, scene, style), exactly
like an image_kenburns prompt.
* "motion" — one sentence of MOTION DIRECTION for the animator: the
camera move plus what physically moves in the scene (e.g. "slow push-in
as data particles drift upward; gentle parallax between depth layers").
Describe movement only — do not restate the scene. Keep motion smooth
and subtle (drift, pulse, flow, ripple, slow push/pan); fast or complex
action tears into artifacts.
- "cli_demo": a REAL screen recording of the {site_name} command-line tool
running against live production. Not generated, not stock — actual footage
of the system this post is about. Prefer it over any AI source whenever the
beat concerns the product working, real numbers, operations, monitoring, or
"here is the thing itself". Requires a "demo_id" field naming one entry from
the catalogue below, and NO prompt and NO query — the clip already exists.
Pick "duration_s" to fit the clip's stated length. A clip shorter than your
duration is trimmed to its own length (never looped); asking for less than
the clip holds simply cuts it short, which for a multi-command recording
means the viewer sees only the first command. Match the length when you want
the whole sequence.
AVAILABLE DEMO CLIPS:
{demo_catalog}
- "holdover": pure cross-fade transition from the previous shot. Use
sparingly (max 1 per video) for breathing room between intense beats.
No prompt or query needed.
HUMAN-SUBJECT POLICY
--------------------
People are welcome in AI-rendered shots, in the STYLIZED styles below. (This
reverses an older blanket ban written when diffusion models produced melted
faces and six-fingered hands; the current image model renders people cleanly
in illustration styles, re-verified 2026-08-27.) Two rules still hold, because
they are what keeps AI people clean:
- NEVER photoreal for a human — "photorealistic" / "8K" / "DSLR" humans still
land in uncanny territory. Stylized illustration is the house style anyway.
- Keep the human ACTION specific and simple: one or two figures doing
something concrete and relevant ("speaking into a headset microphone",
"pointing at a dashboard"). Crowds and complex hand work are where any model
is weakest.
Never render a "diagram" or "chart" as the SUBJECT of an AI shot (diffusion
models fill those with garbled fake labels); abstract data shapes on a screen
are fine.
STYLE POLICY FOR AI SOURCES
---------------------------
image_gen / image_kenburns / generative prompts must be STYLIZED, not photoreal —
photorealistic AI output reads as slop. Pick a stylized modifier:
flat vector illustration / cinematic illustration / isometric 3D /
line art / cyberpunk neon / glassmorphism / low poly / watercolor /
pixel art / paper cutout. Never include "photorealistic", "8K", "DSLR",
"hyper-realistic", "cinematic photography" — those trigger the AI tell.
Pexels is exempt from the style policy — it IS real footage.
HARD RULES
----------
1. Output EXACTLY one JSON object matching the schema below. No prose
before or after. No markdown code fences. Strict JSON syntax: every
key MUST be enclosed in double quotes ("idx": — never a bare idx:).
2. shots[].idx is 0-indexed and contiguous (0, 1, 2, ...).
3. Sum of shots[].duration_s MUST equal target_duration_s ±0.5s.
4. shots[].narration_offset_s is REQUIRED on EVERY shot — no shot may
omit it. It is the cumulative duration of all prior shots (shot 0
starts at 0, shot 1 starts at shot 0's duration, etc.).
5. Never more than 2 consecutive shots from the same source. Mix
liberally — Pexels for concrete, image_kenburns for abstract,
generative for the hero motion beats.
6. First and last shots MUST NOT be "generative" — its artifacts are most
visible at attention peaks (start + close).
7. 6-12 shots total, NEVER more than 30 (hard schema cap). Each shot
3-15 seconds; duration_s MUST NOT exceed 30.0 — a longer value is
rejected outright, so split a long beat into multiple shots instead
of holding one shot past 30 seconds.
8. AI-source prompts (image_gen / image_kenburns / generative) MUST follow the
HUMAN-SUBJECT POLICY and STYLE POLICY above. Human subject →
source="pexels" (or a faceless silhouette only if it MUST be AI).
Never name a human noun in an AI prompt, not even as "no people".
No photorealism.
9. Set director_model to "{model}" and director_prompt_version to "v1.4".
10. Set director_decided_at to the current UTC ISO timestamp: "{now_iso}"
SCHEMA (output this shape):
{{
"version": 1,
"total_duration_s": {target_duration_s},
"shots": [
{{
"idx": 0,
"duration_s": 6.0,
"intent": "establish topic — set the scene",
"source": "pexels",
"query": "data center server room lights",
"narration_offset_s": 0.0
}},
{{
"idx": 1,
"duration_s": 5.0,
"intent": "abstract — illustrate the metaphor",
"source": "image_kenburns",
"prompt": "flat vector illustration, a glass door opening with abstract data flowing through, cyan and dark navy palette, empty unpopulated scene",
"kenburns_zoom": [1.0, 1.2],
"narration_offset_s": 6.0
}},
{{
"idx": 2,
"duration_s": 5.0,
"intent": "hero beat — the key reveal gets real motion",
"source": "generative",
"prompt": "cinematic illustration, a river of glowing cyan data streams winding through a dark navy canyon of server towers, empty unpopulated scene",
"motion": "slow push-in along the canyon as the data streams flow forward; faint particles drift upward with gentle parallax",
"narration_offset_s": 11.0
}},
{{
"idx": 3,
"duration_s": 4.0,
"intent": "human moment — real footage routes through pexels",
"source": "pexels",
"query": "developer typing keyboard close up",
"narration_offset_s": 16.0
}}
],
"director_model": "{model}",
"director_prompt_version": "v1.4",
"director_decided_at": "{now_iso}"
}}
OUTPUT THE SHOT LIST JSON NOW:
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 548 lines · 84 tokens per session scan A 654c1f511bbb
video-director is a skill published in the GitHub repository Glad-Labs/poindexter (5 stars, last pushed today), licensed Apache-2.0. It adds 84 tokens to every session and 6,464 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
content-pipeline
A Chinese-language workflow for turning collected source material into articles and versions for several publishing platforms, including formatted previews, cover images, social posts, podcasts, and videos.
openai-image-gen
Batch-generate images via OpenAI Images API. Random prompt sampler + index.html gallery.
nano-banana-pro
Generate or edit images via Gemini 3 Pro Image (Nano Banana Pro).
video-frames
Extract frames or short clips from videos using ffmpeg.
sherpa-onnx-tts
Local text-to-speech via sherpa-onnx (offline, no cloud).
sag
ElevenLabs text-to-speech with mac-style say UX.