Remotion Production
DojoCodingLabs/remotion-superpowers
Full video production workflow for Remotion projects. An agent skill from DojoCodingLabs/remotion-superpowers.
Generates one expressive narration MP3 per scene for an English storybook, using the ElevenLabs MCP (texttospeech).
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hassancs91/claude-image-generation story-narrator --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/story-narrator .claude/skills/story-narrator && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .claude/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narratorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hassancs91/claude-image-generation story-narrator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/story-narrator .agents/skills/story-narrator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .agents/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hassancs91/claude-image-generation story-narrator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/story-narrator .cursor/skills/story-narrator && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .cursor/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hassancs91/claude-image-generation.git --path .claude/skills/story-narrator--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hassancs91/claude-image-generation story-narrator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/story-narrator .gemini/skills/story-narrator && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .gemini/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hassancs91/claude-image-generation story-narratorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/story-narrator .github/skills/story-narrator && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .github/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hassancs91/claude-image-generation --skill story-narrator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hassancs91/claude-image-generation story-narrator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hassancs91/claude-image-generation.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/story-narrator .opencode/skills/story-narrator && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "story-narrator" agent skill from https://github.com/hassancs91/claude-image-generation/tree/main/.claude/skills/story-narrator into .opencode/skills/story-narrator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-narrator", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
story-narratorGenerates one expressive narration MP3 per scene for an English storybook, using the ElevenLabs MCP (texttospeech).
Story Narrator is an agent skill from hassancs91/claude-image-generation. Generates one expressive narration MP3 per scene for an English storybook, using the ElevenLabs MCP (texttospeech). Reads {slug}scenes.json (from scene-splitter), proposes a warm storyteller voice, drafts the narration text per scene (optionally with Eleven v3 audio tags for emotion), lets the user review, then generates one MP3 per scene saved as {slug}partNN.mp3 so it pairs by index with the scene's image. Use this skill whenever the user wants to narrate a story, generate per-scene audio, voice a storybook…
Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Text to speech and voice. It works with ElevenLabs, Model Context Protocol and Storybook. The repository describes itself as: Connect Claude to image generation with Agent Skills. Three levels: a zero-cost code-based design engine, a Three.js 3D renderer, and a real diffusion model on Cloudflare. Plus… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f533831. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvxFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
ELEVENLABS_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Story Narrator loads about 2.5k tokens when it runs. Until then it costs about 212 tokens; SKILL.md has 1,249 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from hassancs91/claude-image-generation at commit f533831, republished under its MIT licence (© hassancs91). 1,249 words, ~2,501 tokens.
.claude/skills/story-narrator/SKILL.md (or your agent's skills folder).Turns a story (already split into scenes) into a set of expressive narration clips — one MP3 per scene — using the ElevenLabs MCP. Each clip is saved as {slug}_part_NN.mp3 so it pairs by index with the scene's image: scene 3's picture and scene 3's narration play together in the final storybook.
{slug}_scenes.json exists (from scene-splitter) and the user wants per-scene audio. Also applies if the user pastes a story and asks to narrate it — split it first (or narrate paragraph-by-paragraph).
The skill does NOT apply to:
text_to_speech directly).voice_id here).The skill calls mcp__elevenlabs__text_to_speech. Confirm it's available before Stage 4. If the MCP isn't connected, tell the user to install it (uvx elevenlabs-mcp with ELEVENLABS_API_KEY set — see https://github.com/elevenlabs/elevenlabs-mcp) and stop. Stages 1–3 (voice choice + narration script) work without it; only generation needs it.
Key text_to_speech parameters this skill uses:
text — the scene's narration textvoice_id (or voice_name) — the chosen storyteller voicemodel_id — see Stage 2 (default a v3 model for audio-tag expressiveness; fall back to eleven_multilingual_v2)stability — 0.4–0.5 for natural, expressive delivery (lower = more emotional range)style — small positive value (e.g. 0.2) adds expressiveness; 0 is flatoutput_directory — set to the story's audio folder so files land in the right placeThe MCP saves the file and returns its path — it names the file itself, so this skill renames each result to the locked {slug}_part_NN.mp3 convention after generation (Stage 5).
Read {slug}_scenes.json. Treat each scene's text as one narration clip. Use each scene's mood to guide delivery/tag choices. The clip for scenes[i].index = N becomes {slug}_part_NN.mp3.
Propose single narrator (the default and best choice for beginner storybooks — one warm voice carrying the whole story, shifting tone for dialogue). Only consider per-character voices if dialogue is heavy AND there are 2+ distinct recurring speakers AND their voices should clearly differ — and even then, single narrator usually sounds more cohesive for a short children's story.
Voice choice:
voice_id, use it.mcp__elevenlabs__search_voices (e.g. search "storyteller" or "warm narration") and propose ONE specific voice with its voice_id. Don't list five.voice_id should I use? (Find one in your ElevenLabs library, or I can search for a warm storyteller voice.)" Suggest the user save it for future runs.Model choice:
eleven_v3 (most expressive; supports [warmly]-style audio tags). If the account/MCP doesn't support v3, fall back to eleven_multilingual_v2 (no audio tags — rely on stability/style for expressiveness). State which one you're using.Pause: "Voice: [name + id]. Model: [v3 / multilingual_v2]. Single narrator. Reply go, or tell me what to change."
For each scene, prepare the narration text:
text, unchangedeleven_v3: the same text with a few audio tags inserted to match the scene's mood. Use sparingly (1–2 tags per scene). Useful tags: [warmly], [softly], [gently], [cheerfully], [curiously], [whispering], [excited], [sadly], [reassuringly]. Place a tag BEFORE the text it affects; it persists until the next tag. Use ... for natural pauses. Don't over-tag — it reads choppy.eleven_multilingual_v2, skip tags entirely (it ignores them / reads them aloud). Expressiveness comes from stability/style and the voice itself.Title clip (recommended). Produce a short separate title.mp3 from the bare story title with one warm tag ([warmly] The Little Cloud.). The publisher plays it on the dedicated cover page (slide 0) before auto-advancing into scene 1, so the cover isn't silent — generating it is worth the one extra clip. Keep it minimal. Save it as {slug}_audio/title.mp3.
Write the full script to {slug}_audio/narration_script.md (one ## Scene NN section per scene with the subsections above) so the user can review it in one place.
Show the script and pause: "Narration script ready — review before I generate audio. Each generation is billed (~$0.10/1k chars) and non-deterministic, so a bad script wastes credits. Reply go to generate, edit for changes, or paste a corrected version."
Do NOT proceed without explicit approval. If the user wants changes: minor wording → update and re-show; "less excited / more intimate" → re-tag with the new direction; "redo scene X" → update just that scene.
For each scene, call mcp__elevenlabs__text_to_speech with:
text = the scene's tagged text (or original if not tagging)voice_id = chosen voicemodel_id = chosen modelstability = 0.45, style = 0.2, use_speaker_boost = true (tune to taste)output_directory = stories/{slug}/{slug}_audio/The MCP saves the file and returns its path. Rename the saved file to {slug}_part_NN.mp3 (zero-padded scene index) — use the Bash tool (mv) so filenames match the locked convention. If a generation fails, capture the error and continue with the rest of the scenes — don't crash the batch.
Leading-punctuation gotcha (Windows). The MCP derives the saved filename from the first characters of the text, so if a scene's text begins with a quote (") or other character invalid in a filename, the save fails with [Errno 22] Invalid argument even though the audio generated (and you're billed). Workaround: send that scene's text with the leading quote stripped — ElevenLabs doesn't voice quotation marks, so the spoken audio is identical. (Quotes inside the text are fine; only the first character matters for the filename.)
If you produced a title clip, generate it the same way and rename it to title.mp3.
After all scenes:
{slug}_audio/manifest.json listing each clip: index, filename, original, tagged (if any), and the scene's mood/scene metadata. Include a title_audio entry if a title clip was made.{
"story_slug": "the-little-cloud",
"voice_id": "...",
"model_id": "eleven_v3",
"title_audio": { "filename": "title.mp3", "original": "The Little Cloud", "tagged": "[warmly] The Little Cloud." },
"parts": [
{ "index": 1, "filename": "the-little-cloud_part_01.mp3", "original": "High in the sky...", "tagged": "[warmly] High in the sky...", "mood": "gentle, bright" }
]
}The skill is done — one MP3 per scene plus a manifest, ready for the publisher. To redo specific scenes: "regenerate scenes X, Y" — generation is idempotent on filenames, so reruns overwrite cleanly. Or edit the script first and regenerate just those scenes.
ElevenLabs v3 is ~$0.10 per 1,000 characters. A short beginner story (~1,500–2,500 chars across all scenes) costs ~$0.15–$0.25 once. Audio tags add ~5–10% character overhead. Budget for 1–2 regenerations of some scenes since v3 is non-deterministic — the Stage 4 gate exists to get the script right before spending on audio.
voice_id from ElevenLabs' separate workflow.[warmly]); eleven_multilingual_v2 does not — match your tagging to the model.<break>; use ... for pauses.{slug}_part_NN.mp3 (and optionally title.mp3) so the publisher pairs audio with images by scene index.© hassancs91, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/story-narrator of hassancs91/claude-image-generation.
Open the folder on GitHubat commit f533831
Story Narrator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Story Narrator this skillhassancs91/claude-image-generation | 102 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Remotion ProductionDojoCodingLabs/remotion-superpowers | 132 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Text To Speechcalesthio/OpenMontage | 66k | — | ~2.4k | Automated safety check: Pass | AGPL-3.0 | |
| Scenario Elevenlabsscenario-labs/skills | 946 | — | ~2k | Automated safety check: Pass | MIT | |
| Elevenlabs Agentsjezweb/claude-skills | 1.1k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Making Demo Videosnukeop/nuclear | 19k | — | ~892 | Automated safety check: Pass | AGPL-3.0 |
DojoCodingLabs/remotion-superpowers
Full video production workflow for Remotion projects. An agent skill from DojoCodingLabs/remotion-superpowers.
calesthio/OpenMontage
Generate speech audio from text using HeyGen's Starfish TTS model.
scenario-labs/skills
A skill your agent uses when generating or transforming audio with ElevenLabs models on Scenario via MCP: text-to-speech with inline emotion tags, music from a prompt or sectioned songs, sound…
jezweb/claude-skills
Build conversational AI voice agents on the ElevenLabs platform.
nukeop/nuclear
A skill your agent uses when making a demo, tutorial, or feature video of Nuclear.
tadaspetra/loop
Generate music using ElevenLabs Music API. An agent skill from tadaspetra/loop.
hassancs91/claude-image-generation
Generate PNG images by building a real Three.js 3D scene and capturing one frame headlessly — no image model involved.
hassancs91/claude-image-generation
Final step of the AI Storybook pipeline. An agent skill from hassancs91/claude-image-generation.
hassancs91/claude-image-generation
Generate an image from a text description using Cloudflare Workers AI (the flux-1-schnell model).
hassancs91/claude-image-generation
Generate a polished PNG graphic from a text prompt and an aspect ratio.
hassancs91/claude-image-generation
Splits a plain English story into a numbered list of SCENES — each scene being one moment that gets exactly one illustration AND one narration clip downstream.
Categories
Generates one expressive narration MP3 per scene for an English storybook, using the ElevenLabs MCP (texttospeech). Story Narrator is an agent skill from hassancs91/claude-image-generation. Generates one expressive narration MP3 per scene for an English storybook, using the ElevenLabs MCP (texttospeech).
Story Narrator fits situations like: the user wants to narrate a story; generate per-scene audio; voice a storybook; create read-along narration.
Run `npx skills add hassancs91/claude-image-generation --skill story-narrator -a claude-code`. Or copy the skill folder (.claude/skills/story-narrator in hassancs91/claude-image-generation) into .claude/skills/story-narrator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hassancs91/claude-image-generation --skill story-narrator -a codex`. Or copy the skill folder (.claude/skills/story-narrator in hassancs91/claude-image-generation) into .agents/skills/story-narrator in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hassancs91/claude-image-generation --skill story-narrator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/story-narrator, .gemini/skills/story-narrator, .github/skills/story-narrator and .opencode/skills/story-narrator in your project.
Going by SKILL.md and its folder, Story Narrator needs the command-line tools its instructions call (uvx) and credentials named ELEVENLABS_API_KEY. Our summary lists: A credential in ELEVENLABS_API_KEY.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Story Narrator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Story Narrator: Remotion Production (DojoCodingLabs/remotion-superpowers, 132 stars), Text To Speech (calesthio/OpenMontage, 66k stars), Scenario Elevenlabs (scenario-labs/skills, 946 stars) and Elevenlabs Agents (jezweb/claude-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hassancs91 (a GitHub user) maintains it in hassancs91/claude-image-generation, which has 102 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on August 18, 2026.
Source: hassancs91/claude-image-generation on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.