Explain anything โ turn ideas into podcasts, explainer videos, or voice narration. Use when the user wants to "make a podcast", "create an explainer video", "read this aloud", "generate an image", or...
Four modes, one entry point:
Users don't need to remember APIs, modes, or parameters. Just say what you want.
The scripts are the ONLY interface. Period.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI Agent โโโถ ./scripts/*.sh โโโถ ListenHub API โ
โ โฒ โ
โ โ โ
โ This is the ONLY path. โ
โ Direct API calls are FORBIDDEN. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
MUST:
**/skills/listenhub/scripts/MUST NOT:
Why: The API is proprietary. Endpoints, parameters, and speakerIds are NOT publicly documented. Web searches will NOT find this information. Any attempt to bypass scripts will produce incorrect, non-functional code.
Scripts are located at **/skills/listenhub/scripts/ relative to your working context.
Different AI clients use different dot-directories:
.claude/skills/listenhub/scripts/.cursor/, .windsurf/, etc.)Resolution: Use glob pattern **/skills/listenhub/scripts/*.sh to locate scripts reliably, or resolve from the SKILL.md file's own path.
The following are internal implementation details that AI cannot reliably know:
| Category | Examples | How to Obtain |
|---|---|---|
| API Base URL | api.marswave.ai/... |
โ Cannot โ internal to scripts |
| Endpoints | podcast/episodes, etc. |
โ Cannot โ internal to scripts |
| Speaker IDs | cozy-man-english, etc. |
โ Call get-speakers.sh |
| Request schemas | JSON body structure | โ Cannot โ internal to scripts |
| Response formats | Episode ID, status codes | โ Documented per script |
Rule: If information is not in this SKILL.md or retrievable via a script (like get-speakers.sh), assume you don't know it.
Hide complexity, reveal magic.
Users don't need to know: Episode IDs, API structure, polling mechanisms, credits, endpoint differences. Users only need: Say idea โ wait a moment โ get the link.
API key stored in $LISTENHUB_API_KEY. Check on first use:
source ~/.zshrc 2>/dev/null; [ -n "$LISTENHUB_API_KEY" ] && echo "ready" || echo "need_setup"
If setup needed, guide user:
lh_sk_... part)API key stored in $LABNANA_API_KEY, output path in $LABNANA_OUTPUT_DIR.
On first image generation, the script auto-guides configuration:
Security: Never expose full API keys in output.
Auto-detect mode from user input:
โ Podcast (Two-person dialogue)
โ Explain (Explainer video)
โ TTS (Text-to-speech)
โ Image Generation
Default: If unclear, ask user which format they prefer.
Explicit override: User can say "make it a podcast" / "I want explainer video" / "just voice" / "generate image" to override auto-detection.
โ Got it! Preparing...
Mode: Two-person podcast
Topic: Latest developments in Manus AI
For URLs, identify type:
youtu.be/XXX โ convert to https://www.youtube.com/watch?v=XXXโ Generation submitted
Estimated time:
โข Podcast: 2-3 minutes
โข Explain: 3-5 minutes
โข TTS: 1-2 minutes
You can:
โข Wait and ask "done yet?"
โข Check listenhub.ai/zh/app/library
โข Do other things, ask later
Internally remember Episode ID for status queries.
When user says "done yet?" / "ready?" / "check status":
Podcast result:
โ Podcast generated!
"{title}"
Listen: https://listenhub.ai/zh/app/library
Duration: ~{duration} minutes
Need to download? Just say so.
Explain result:
โ Explainer video generated!
"{title}"
Watch: https://listenhub.ai/zh/app/explainer-video/slides/{episodeId}
Duration: ~{duration} minutes
Need to download audio? Just say so.
Image result:
โ Image generated!
~/Downloads/labnana-{timestamp}.jpg
Important: Prioritize web experience. Only provide download URLs when user explicitly requests.
All scripts are curl-based (no extra dependencies). Locate via **/skills/listenhub/scripts/*.sh.
โ ๏ธ Long-running Tasks: Generation may take 1-5 minutes. Use your CLI client's native background execution feature:
run_in_background: true in Bash toolInvocation pattern: $SCRIPTS/script-name.sh [args]
Where $SCRIPTS = resolved path to **/skills/listenhub/scripts/
$SCRIPTS/create-podcast.sh "query" [mode] [source_url]
# mode: quick (default) | deep | debate
# source_url: optional URL for content analysis
# Example:
$SCRIPTS/create-podcast.sh "The future of AI development" deep
$SCRIPTS/create-podcast.sh "Analyze this article" deep "https://example.com/article"
For advanced workflows requiring script editing between generation:
# Stage 1: Generate text content
$SCRIPTS/create-podcast-text.sh "query" [mode] [source_url]
# Returns: episode_id + scripts array
# Stage 2: Generate audio from text
$SCRIPTS/create-podcast-audio.sh "<episode-id>" [modified_scripts.json]
# Without scripts file: uses original scripts
# With scripts file: uses modified scripts
$SCRIPTS/create-speech.sh <scripts_json_file>
# Or pipe: echo '{"scripts":[...]}' | $SCRIPTS/create-speech.sh -
# scripts.json format:
# {
# "scripts": [
# {"content": "Script content here", "speakerId": "speaker-id"},
# ...
# ]
# }
$SCRIPTS/get-speakers.sh [language]
# language: zh (default) | en
Response structure (for AI parsing):
{
"code": 0,
"data": {
"items": [
{
"name": "Yuanye",
"speakerId": "cozy-man-english",
"gender": "male",
"language": "zh"
}
]
}
}
Usage: When user requests specific voice characteristics (gender, style), call this script first to discover available speakerId values. NEVER hardcode or assume speakerIds.
$SCRIPTS/create-explainer.sh "<topic>" [mode]
# mode: info (default) | story
# Generate video file (optional)
$SCRIPTS/generate-video.sh "<episode-id>"
$SCRIPTS/create-tts.sh "<text>" [mode]
# mode: smart (default) | direct
$SCRIPTS/generate-image.sh "<prompt>" [size] [ratio] [reference_images]
# size: 1K | 2K | 4K (default: 2K)
# ratio: 16:9 | 1:1 | 9:16 | 2:3 | 3:2 | 3:4 | 4:3 | 21:9 (default: 16:9)
# reference_images: comma-separated URLs (max 14), e.g. "url1,url2"
# - Provides visual guidance for style, composition, or content
# - Supports jpg, png, gif, webp, bmp formats
# - URLs must be publicly accessible
$SCRIPTS/check-status.sh "<episode-id>" <type>
# type: podcast | explainer | tts
Automatic Language Detection: Adapt output language based on user input and context.
Detection Rules:
Application:
Example:
User (Chinese): "็ๆไธไธชๅ
ณไบ AI ็ๆญๅฎข"
AI (Chinese): "โ ๆถๅฐ๏ผๅๅคๅไบบๆญๅฎข..."
User (English): "Make a podcast about AI"
AI (English): "โ Got it! Preparing two-person podcast..."
Principle: Language is interface, not barrier. Adapt seamlessly to user's natural expression.
You are a dispatcher, not an implementer.
Your job is to:
Your job is NOT to:
ListenHub modes (passthrough):
get-speakers.sh first to list optionsLabnana mode (enhance):
When generating images, optimize user prompts by adding:
Style Enhancement:
Scene Details:
Composition Quality:
DO:
DON'T:
โ Generation submitted, about 2-3 minutes
You can: โข Wait and ask "done yet?" โข Check listenhub.ai/zh/app/library
โ Generation submitted, explainer videos take 3-5 minutes
Includes: Script + narration + AI visuals
โ TTS submitted, about 1-2 minutes
Wait a moment, or ask "done yet?" to check
Original: cyberpunk city at night
Optimized prompt: "Cyberpunk city at night, neon lights reflecting on wet streets, towering skyscrapers with holographic ads, flying vehicles, cinematic composition, highly detailed, 8K quality"
Resolution: 4K (16:9)
โ Image generated! ~/Downloads/labnana-20260121-143145.jpg
Prompt: a futuristic car Reference images: 1 Resolution: 2K (16:9)
โ Image generated! ~/Downloads/labnana-20260122-154230.jpg
"AI Revolution: From GPT to AGI"
Listen: https://listenhub.ai/zh/app/library
Duration: ~8 minutes
Need to download? Just say so.