ListenHub CLI
Command-line interface for ListenHub — create podcasts, text-to-speech, explainer videos, storybooks, AI images, music, and videos from your terminal.
中文文档
Built on @marswave/listenhub-sdk.
Install
npm install -g @marswave/listenhub-cli
Requires Node.js >= 20.
Two Ways to Authenticate
| Setup | listenhub auth login (opens browser) | Set LISTENHUB_API_KEY env var or run listenhub openapi config set-key |
| Commands | listenhub podcast, listenhub tts, listenhub music, etc. | listenhub openapi podcast, listenhub openapi tts, etc. |
| Best for | Interactive use, account management | Scripts, CI/CD, programmatic access |
| Token storage | ~/.config/listenhub/credentials.json | ~/.config/listenhub/openapi.json or env var |
Both methods provide access to the same underlying APIs. Choose whichever fits your workflow.
Quick Start — OAuth
listenhub auth login
listenhub podcast create --query "AI agent trends in 2026" --mode quick
listenhub music generate --prompt "Chill lo-fi beats" --style "lo-fi" --title "Study Session"
listenhub tts create --text "Hello, world" --lang en
listenhub image create --prompt "a dragon in watercolor style" --reference ./sketch.png
Quick Start — OpenAPI Key
export LISTENHUB_API_KEY="lh_sk_..."
listenhub openapi config set-key
listenhub openapi speakers list --language zh
listenhub openapi tts --text "Hello world" --voice <speaker-id> --output hello.mp3
listenhub openapi podcast create \
--source-text "Quantum computing is changing cryptography" \
--speaker-id <speaker-id> --no-wait -j
listenhub openapi subscription -j
OAuth Commands
Auth
listenhub auth login | Log in via browser OAuth |
listenhub auth logout | Log out and revoke tokens |
listenhub auth status | Show current login status |
Music
listenhub music generate | Generate music from a text prompt |
listenhub music cover | Create a cover from reference audio |
listenhub music extend | Extend music from reference audio |
listenhub music remix | Remix an existing song with new lyrics |
listenhub music instrumental | Generate a standalone instrumental |
listenhub music soundtrack | Generate music from an image or video |
listenhub music track | Generate a single instrument/vocal track |
listenhub music recognize | Recognize lyrics (with timestamps) from audio |
listenhub music describe | Analyze audio (description, tags, genres, instruments) |
listenhub music stem | Separate audio into stems (download URLs) |
listenhub music list | List music tasks |
listenhub music get <id> | Get music task details |
Content Creation
listenhub podcast create | Create a podcast episode |
listenhub podcast list | List podcast episodes |
listenhub tts create | Create text-to-speech audio |
listenhub tts list | List TTS creations |
listenhub explainer create | Create an explainer video |
listenhub explainer list | List explainer videos |
listenhub slides create | Create a slide deck |
listenhub slides list | List slide decks |
Images
listenhub image create | Generate an AI image |
listenhub image list | List AI images |
listenhub image get <id> | Get image details |
listenhub image delete <id...> | Delete one or more AI images |
Video Generation
listenhub video create | Create a video generation task |
listenhub video list | List video tasks |
listenhub video get <id> | Get video task details |
listenhub video estimate | Estimate credit cost |
Lyrics
listenhub lyrics extract <id> | Extract lyrics from a creation |
Other
listenhub speakers list | List available speakers |
listenhub creation get <id> | Get creation details |
listenhub creation delete <id...> | Delete creations |
OpenAPI Key Commands
All commands below are under listenhub openapi.
Config
openapi config set-key | Set API key interactively |
openapi config show | Show current key status |
openapi config clear | Remove stored key |
Speakers
openapi speakers list | List available speakers (filterable by --language) |
TTS & Speech
openapi tts | Text-to-speech, saves audio file locally |
openapi audio-speech | TTS (OpenAI-compatible endpoint) |
openapi speech | Create speech, returns audio URL |
Flow Speech
openapi flow-speech create | Create flow speech from URLs/text |
openapi flow-speech get <id> | Get flow speech details |
openapi flow-speech tts | Create flow speech from scripts |
openapi flow-speech text-stream <id> | Stream generated text (SSE) |
Podcast
openapi podcast create | Create a podcast episode |
openapi podcast get <id> | Get podcast details |
openapi podcast text-content | Generate text only (no audio) |
openapi podcast generate-audio <id> | Generate audio for existing text |
openapi podcast text-stream <id> | Stream generated text (SSE) |
Storybook
openapi storybook create | Create a storybook/explainer |
openapi storybook get <id> | Get storybook details |
openapi storybook generate-video <id> | Generate video for storybook |
Image
openapi image create | Generate an AI image (supports local file + URL references) |
Video
openapi video create | Create video generation task |
openapi video get <id> | Get video task details |
openapi video list | List video tasks |
openapi video estimate | Estimate credit cost |
openapi video pixverse generate | Create a PixVerse video task (atomic + agent) |
openapi video pixverse estimate | Estimate PixVerse credit cost |
Content
openapi content extract | Extract content from a URL |
openapi content get <id> | Get extraction result |
Subscription
openapi subscription | Show credits and plan info |
Common Options
All commands support:
--json / -j — Output JSON instead of human-readable text
--help / -h — Show help
Creation commands also support:
--no-wait — Return the ID immediately without polling
--timeout <seconds> — Polling timeout (default varies by command)
Local File Support
OAuth commands (music cover, image create, video create) auto-detect local paths, validate format/size, and upload to cloud storage before calling the API.
OpenAPI image create supports local file references via base64 encoding (no size limit enforced by CLI).
OpenAPI video create supports local image/video/audio paths via a presigned upload URL. For Seedance, local image references automatically include width/height metadata; remote image URLs and all reference videos still need explicit metadata.
listenhub music cover --audio ./song.mp3
listenhub image create --prompt "inspired by this" --reference ./photo.jpg
listenhub openapi image create --prompt "in this style" --reference ./sketch.png --provider google
listenhub openapi video create --prompt "same style" --first-frame ./frame.png
listenhub openapi video create --prompt "same style" \
--reference-video https://example.com/clip.mp4 \
--reference-video-meta 1280x720:5:30:8000000 \
--input-video-duration 5
Examples
OpenAPI: Podcast workflow (text → audio)
listenhub openapi podcast text-content \
--source-url https://example.com/article \
--speaker-id voice-clone-xxx \
--no-wait -j
listenhub openapi podcast get abc123 -j
listenhub openapi podcast generate-audio abc123
listenhub openapi podcast text-stream abc123 --event script
OpenAPI: Video generation
listenhub openapi video create --prompt "A cat playing piano" --no-wait -j
listenhub openapi video create --prompt "Camera zooms out" \
--first-frame ./frame.png
listenhub openapi video create --prompt "Camera zooms out" \
--first-frame https://example.com/frame.png \
--first-frame-meta 1080x1920:3600000
listenhub openapi video estimate --model doubao-seedance-2-pro --resolution 1080p --duration 10
OpenAPI: PixVerse video generation
PixVerse covers atomic capabilities (text_to_video, image_to_video, transition, multi_transition, fusion, restyle, mimic, lip_sync) and the marketing agent (ad_master / promo_mix). --capability is required. --language en (default) uses the international service; --language zh uses the China service. Image/video/audio assets accept an optional :duration suffix (url:seconds). For rarely-used nested fields use the --pixverse-json escape hatch.
listenhub openapi video pixverse generate --capability text_to_video \
--prompt "A cat playing piano" --quality 720p --aspect-ratio 16:9 --duration 5 --no-wait -j
listenhub openapi video pixverse generate --capability image_to_video \
--image https://example.com/photo.jpg --prompt "Camera slowly zooms in"
listenhub openapi video pixverse generate --capability lip_sync \
--source-task-id 6a2016607ebd26d050c585ca \
--lip-sync-tts --lip-sync-speaker-id speaker-1 --lip-sync-content "Hello world"
listenhub openapi video pixverse generate --capability agent --agent-type promo_mix \
--quality 1080p --duration 30 \
--image https://example.com/p1.jpg --image https://example.com/p2.jpg \
--image https://example.com/p3.jpg --image https://example.com/p4.jpg
listenhub openapi video pixverse generate --capability fusion \
--prompt "@hero stands in @bg" \
--pixverse-json '{"imageReferences":[{"type":"subject","imageUrl":"https://example.com/hero.png","refName":"hero"},{"type":"background","imageUrl":"https://example.com/bg.png","refName":"bg"}]}'
listenhub openapi video pixverse estimate --capability text_to_video --quality 720p --duration 5
listenhub openapi video pixverse estimate --capability agent --agent-type ad_master --duration 30
OAuth: Music generation
listenhub music generate --prompt "Upbeat electronic dance" --style "EDM" --title "Night Drive"
listenhub music generate --prompt "Peaceful piano melody" --instrumental
listenhub music cover --audio ./original.mp3 --title "My Remix"
listenhub music remix ./original.mp3 --lyrics "New verse..." --prompt "Lo-fi hip hop"
listenhub music instrumental --prompt "Cinematic orchestral build-up" --model mureka-8
listenhub music soundtrack --image ./cover.png --prompt "Dreamy synthwave"
listenhub music track ./song.mp3 --generate-type Drums --prompt "Punchy breakbeat"
listenhub music track --provider-song-id abc123 --generate-type Vocals \
--prompt "Soulful chorus" --lyrics "Hold on..." --vocal-gender female
listenhub music recognize --audio ./song.mp3
listenhub music describe --audio ./song.mp3
listenhub music stem --audio ./song.mp3 --model audio-separation-2
JSON output for scripting
ID=$(listenhub openapi flow-speech create \
--source-text "Some article content" \
--speaker-id voice-xxx \
--no-wait -j | jq -r '.episodeId')
listenhub openapi flow-speech get "$ID" -j
Development
git clone https://github.com/marswaveai/listenhub-cli.git
cd listenhub-cli
pnpm install
pnpm run dev
pnpm run build
pnpm test
pnpm run lint
License
MIT