Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PIAPI_KEYYesAPI key for PiAPI
ELEVENLABS_KEYYesAPI key for ElevenLabs
OPENROUTER_API_KEYNoOptional API key for OpenRouter (fallback for Hebrew transliteration)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
generate_kling_videoC

Generate a Kling Omni video (single prompt or multi-shot).

generate_seedance_videoA

Generate a Seedance video; auto-chain Hebrew BVAC lipsync when language is Hebrew.

HEBREW (language="he") — this tool runs the ENTIRE BVAC chain itself; do NOT pre-build anything:

  • Speech: synthesized from text (keep it Hebrew) with ElevenLabs eleven_v3 and voice_id — OR pass audio_path (local mp3) to use a pre-approved take and skip TTS. Audition flow: generate_elevenlabs_voiceover -> user approves -> pass its audio_path here. Never build a black carrier, upload audio, or register a carrier asset yourself; the tool does all of it and ignores yours.

  • Prompt: pass ONLY the scene description, Latin-only (transliterate_hebrew first). The "@ImageN is ..." / "@Video1 ..." reference lines and the lip-sync mechanism are composed server-side — do not write them yourself (customize via image_roles / other_roles).

  • romanized_text: ALWAYS supply your own PHONEMIC RESPELLING of text — spell the Hebrew the way an English reader sounds it out, because Seedance picks visemes from this text with an English-dominant classifier (linguistic romanization makes it mouth English: chazir -> "church"). Form: syllable- hyphenated, stressed syllable in CAPS, ' for schwa — חזיר -> khah-ZEER (NOT chazir); גבר, קום מהספה -> GEH-ver, koom meh-hah-SAH-pah; כושר -> KOH-sher. Every syllable sayable; gender/morphology respected but rendered by English sound; English/brand tokens byte-for-byte; sentence-final words with extra care (they drive the lip-sync hardest). A structural gate validates it; omit it and an LLM (OpenRouter-first) respells instead.

  • task_type is forced to seedance-2-less-restriction: the lower-moderation tier required for asset-backed fictional personas. Requesting another type has no effect; this is intentional, not an error.

  • Scribe QA gates run on the source audio, and on the generated video when wait=true.

References split into human_image_urls (faces/people) and other_image_urls (product/room/scene). Generated people MUST be private assets: human refs have to be asset://<id> (register them with upload_asset first) unless auto_upload_assets=true. image_urls is a legacy alias for human_image_urls.

verify_generated_audioA

Run the generated-video Scribe QA gate on a finished Seedance task.

Use this after an async (wait=false) Hebrew lipsync job completes: pass the original spoken text (Hebrew) plus the task_id (or a direct video_url). Downloads the video, extracts its audio, transcribes with ElevenLabs Scribe, and judges against text (100% pass / 85-99% warning / <85% raises). Do not substitute local whisper or other ASR — this is the canonical gate.

generate_seedance_first_lastB

Generate a Seedance video from a first (and optional last) frame image.

generate_elevenlabs_voiceoverB

Synthesize speech with ElevenLabs and write the audio to a temp file.

generate_musicA

Compose a music track with Eleven Music (3-600s) from a text prompt.

For speech ads the bed must be COMPLEMENTARY, not the main event: prompt for minimal/low-key/background music ("soft, sparse, no melodic hook, low intensity"), keep force_instrumental=true so it never fights the voiceover, match duration_s to the video, then lay it under with mix_music_into_video (low gain + speech ducking).

generate_sound_effectA

Generate an ambient/diegetic sound-effect bed (0.5-30s) from a text prompt.

Generation only — the caller mixes the bed onto the video locally with its own ducking recipe. Describe the soundscape concretely ("busy gym ambience: muffled crowd murmur, low machine hum"), pass the clip/ad runtime as duration_seconds, and keep loop=true for a seamless bed.

list_voicesA

List available ElevenLabs voices.

get_taskB

Fetch the current state of a PiAPI task.

transliterate_hebrewA

Transliterate Hebrew text to Latin (via LMStudio/OpenRouter LLM) for visual prompts.

upload_assetA

Register a private asset from a local path or public URL; return its asset://id.

Local paths are first uploaded to a temporary public host for ingestion (the asset persists on PiAPI ~days afterward, independent of that URL). If influencer_page (path to an Obsidian .md) is given, the asset id is recorded there under a managed section for reuse.

list_assetsB

List private assets (optionally filter by status: active,processing,failed).

get_assetA

Get a single asset's current state (refreshes its TTL).

delete_assetB

Delete a private asset.

stitch_videosA

Concatenate >= 2 clips (local paths or URLs, in order) into one MP4.

Hard cuts; every clip is normalized to the first clip's resolution/fps so mixed specs concat cleanly. Use this for the final assembly of a multi-clip ad — do not shell out to ffmpeg concat yourself.

detect_beatsA

Detect tempo and beat times of an audio track — pure analysis, no output.

Returns {"bpm": float, "beats": [seconds, ...]} with beat times ascending from the track start and covering the whole file. The tempo is reported at its lower octave, pinned into [min_bpm, max_bpm] (a track that reads as 172 BPM comes back as ~86) — pass the window to control which octave the grid lands on. Use this to beat-snap multi-clip seams onto a music bed before stitching.

Silence / no detectable pulse returns {"bpm": 0.0, "beats": []} (not an error).

split_audioA

Cut a master voiceover mp3 at split_points_s (seconds, strictly increasing).

Returns len(points)+1 ordered segments with paths and durations. Workflow for ads longer than one clip: generate ONE master VO with generate_elevenlabs_voiceover (with_timestamps=true), pick sentence-boundary timestamps, split here, then pass each segment's path as audio_path to its own generate_seedance_video call. Each segment must fit its clip duration.

mix_music_into_videoA

Lay a music bed under a video's existing speech/ambience audio.

Gain is ADAPTIVE by default: both tracks are loudness-measured and the music sits music_below_speech_db LUFS below the speech (14 = clearly audible but secondary; 18-20 = barely-there). duck=true adds a gentle side-chain dip while someone talks. Pass music_gain_db only to force a fixed gain. Music for speech ads is complementary, not the main event. Video stream is copied untouched; inputs may be URLs.

trim_videoA

Frame-accurately cut a clip to an exact span (re-encode, not -c copy).

Provide EITHER duration_s (keep [0, duration_s]) OR start_s+end_s. Use this to cut a generated b-roll clip down to a voiceover segment's length. Resolution/fps/aspect are preserved; a silent clip stays silent. Returns the ffprobe-verified actual duration.

retime_videoA

Stretch/compress a clip to hit a target duration (or explicit speed).

Provide EITHER target_duration_s (speed is computed as source/target) OR speed (1.0 unchanged, 0.5 = half-speed/2x longer). Use this to slow a b-roll clip slightly to fill a voiceover segment without repeating footage. interpolate=true smooths slow-mo via motion interpolation (default off = frame duplication). speed is clamped to [0.5, 2.0]; outside that range is a ToolError. Audio (if any) is retimed too. ffprobe-verified.

mix_narrationA

Lay a voiceover as the PRIMARY audio over a (silent) video.

The VO plays at full level and the video stream is copied untouched. An optional bed_path (ambient/music) is mixed bed_below_voice_db LUFS under the VO with a gentle side-chain duck. This is the inverse of mix_music_into_video (which ducks a bed under speech ALREADY in the video). Output runs the video's length; the audio is padded with silence if shorter, trimmed if longer. ffprobe-verified.

host_fileA

Host a local file on a temporary public URL (tmpfiles, ~1h retention).

Use for non-asset references that need a provider-fetchable URL: a local ElevenLabs mp3 going into audio_urls (English reference-audio lip-sync), a product/room photo for other_image_urls, etc. Human/persona refs do NOT go here — register those with upload_asset instead.

extract_frameA

Save one frame of a video (local path or URL) as PNG; default = LAST frame.

Use the last frame of clip N as image_first of clip N+1 (generate_seedance_first_last) to bridge multi-clip continuity. With upload=true the frame is also hosted on a temporary public URL so it can be passed as a reference directly.

burn_captionsA

Burn word-timed captions onto a video (local path, URL, or PiAPI task_id).

Default flow transcribes the video's OWN audio with ElevenLabs Scribe (word timestamps), groups words into short chunks (max_words per caption), and burns styled overlays: white bold, black stroke, drop shadow, centered low-third, Hebrew rendered in correct RTL visual order (English/brand tokens stay LTR). Pass captions ([{text, start, end}]) to skip Scribe and burn exact chunks; style overrides (font_px, y_pct, fill, crf, font_path...). Run AFTER verify_generated_audio passes and BEFORE stitch_videos.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AvivK5498/VideoGenerationMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server