Script to video
Your script, narrated close to verbatim. You control every sentence.
- voice: rachel
- captions: bold-center
- music: uplifting
- style: cinematic
- ratio: 9:16
Build your request
Only the parameters that apply to script-to-video are shown. Everything but the source has a default.
source what the video is made from
required
- source.textstringRequired
- The words to be spoken. Line breaks are scene breaks, so the shape of what you send is the shape of the cut.
- source.urlstring
- Only `article-to-video` reads a URL. Sent here, it is treated as the text of the script.
general what it is called
- titlestringdefault Untitled video
- Up to 120 characters. Shown in the app, and used as the caption when you publish without one.
format the shape of the script
no preset by default
- presetstring
- A tool page's slug — `top-5-video-generator`, `storytime-video-generator`, `explainer-video-generator` and 50 others at https://www.veedio.co/tools. The page's format brief is put in front of your source before the script is written, so the video comes out in that shape. The brief itself is resolved here from the slug and is never accepted as text; an unknown slug answers 400. Each page's own brief is quoted verbatim at https://www.veedio.co/tools/{slug}/llms.txt.
voice who narrates it
rachel by default
- voicestringdefault rachel
- The narrator. Scene length is this voice's real duration, not an estimate. All five speak every one of the 29 languages — set `language` and the same voice reads it.
- rachelWarm, conversational
- adamDeep, documentary
- bellaBright, energetic
- joshCasual, young male
- elliSoft, storytelling
captions the burned-in captions
bold-center by default
- captionStylestringdefault bold-center
- Captions are word-timed from the voice model's own character alignment and burned into the MP4. `none` renders the video without them.
- bold-centerBig white text in the lower third
- highlightWord-by-word yellow highlight, lower third
- subtleSmall caption near the bottom
- noneNo captions
music the bed under the voice
uplifting by default
- musicTrackstringdefault uplifting
- A licensed track, ducked under the narration and loudness-normalised with it. `none` leaves the voice alone.
- noneSilence
- upliftingBright, motivational
- lofiCalm, chill
- cinematicTense, epic
- trapPunchy, modern
visual style how every frame looks
cinematic by default
- visualStylestringdefault cinematic
- Appended to the image prompt for every scene, so the whole video holds one look. Applies to generated frames; see mediaType for stock footage.
- cinematicCinematic
- 3d3D render
- animeAnime
- documentaryDocumentary
- retroRetro
- toyToy bricks
- voxelVoxel world
- clayClaymation
- comicComic
- watercolorWatercolor
media what fills each scene
animated stills by default on paid plans, stills on Free
- mediaTypestringdefault animated on paid plans, still on Free
- What each scene is made of. The credit per scene follows the choice; the deposit and the settlement both use it. `animated` and `filmed` need a paid plan and answer 403 on Free. `stock` is offered only where the deployment has a Pexels key, and answers 400 otherwise.
- animatedA frame is drawn for the scene, then the video model sets it in motion.
- filmedThe video model shoots the scene from the script itself. Several times the credit of animated.
- stillA drawn frame with a slow pan. The cheapest.
- stockReal footage from Pexels, matched to a search the script writer wrote for the line.
- avatarA presenter: a lifelike avatar speaks the line to camera, lip-synced to the narration. Pro plan and up. Send `avatarId` with it — one of the presenter ids from `GET /api/avatars`.
- avatarIdstring
- For `avatar`: which presenter, by the provider's avatar id. The create form lists them; through the API, `GET /api/avatars` does (a signed-in session, not a key).
- soundEffectsbooleandefault false
- A generated sound effect under each scene, cued by the script writer and mixed under the narration. 2 credits a scene. Starter and up; answers 403 on Free.
- photoUrlstring
- An http(s) link to a picture the video opens on: scene one uses it as its frame instead of a drawn one, set in motion by whatever the media type does. Any public JPEG, PNG or WebP; private addresses are refused.
- qualitystringdefault standard
- The model tier. `pro` draws frames with the sharper image model (3 more a scene) and, for `animated` and `filmed`, sets them moving with the premium video model (38 more). It does nothing for stock footage.
- standardThe fast image model, and Wan 2.2 for motion.
- proA sharper, slower image model, and a premium video model for motion — Seedance unless motionModel says otherwise.
- motionModelstringdefault kling
- Which premium video model animates the scenes at `pro` quality. Ignored at `standard`. Choosing one needs the Pro plan or above and answers 403 below it; leaving it out is every plan's right. The credit per scene follows the clip the model is asked for, priced at its longest: Seedance — the default — adds 5 for ten seconds, Kling 38 for ten, Veo 45 for eight. A shorter scene is charged pro rata.
- seedanceSeedance 1.0 Pro Fast. Quick, cinematic motion, and the default.
- klingKling 2.5 Turbo Pro. Smooth and faithful to the still.
- veoVeo 3.1 Fast. The most lifelike, and the dearest.
language what it is said in
English by default
- languagestringdefault en
- The narration and caption language. The script is written in it and the voice speaks it; image prompts stay in English. Every language is on every plan.
- enEnglish
- esSpanish
- pt-BRPortuguese (Brazil)
- frFrench
- deGerman
- itItalian
- nlDutch
- plPolish
- svSwedish
- daDanish
- fiFinnish
- csCzech
- skSlovak
- roRomanian
- elGreek
- bgBulgarian
- hrCroatian
- ukUkrainian
- ruRussian
- trTurkish
- arArabic
- hiHindi
- taTamil
- idIndonesian
- msMalay
- filFilipino
- jaJapanese
- koKorean
- zhChinese (Mandarin)
length how long it runs
a minute by default
- targetSecondsintegerdefault 60
- How long the script should run: 30, 60, 90 or 180. The scene range the writer is asked for follows it, and so does the deposit. Over 60 needs a paid plan and answers 403 on Free. A single video may cost at most 1600 credits, whatever the length.
- 30One idea, fast.
- 60The standard short.
- 90Room for a list or a story with a turn.
- 180An explainer or a mini documentary.
aspect ratio the output shape
9:16 by default
- aspectRatiostringdefault 9:16
- The render is 1080-class in every ratio, with no watermark on any plan.
- 9:16Vertical — TikTok, Reels, Shorts
- 1:1Square — Feed posts
- 16:9Landscape — YouTube
Credits
A generation costs 3 credits plus a charge per scene that follows what fills it: 2 for a still or stock footage, 13 for a scene the video model sets in motion. A 5-scene short is 13 credits with stills and 68 animated. Quote a job before you run it with POST /api/v1/credits/estimate — it takes the same body as the create call and charges nothing.
POST https://www.veedio.co/api/v1/videos
The smallest request that works
Two fields. Everything else falls back to the defaults above.
JSON
{
"workflow": "script-to-video",
"source": {
"text": "Did you know honey never spoils? Archaeologists found 3000-year-old honey in Egyptian tombs, still perfectly edible."
}
}Good to know
- Line breaks are scene breaks. One line per visual is the most reliable way to control the cut.
- Keep it under about 150 words — roughly 60 seconds of speech. A longer script is tightened rather than truncated.
- Nothing is uploaded: the visual for each line is generated from the line, in the chosen
visualStyle.
Recipes
Payloads worth stealing
Each one is a complete body for this endpoint.
Voice and captions only
No music bed, small captions — for a script that has to be heard rather than felt.
JSON
{
"workflow": "script-to-video",
"source": {
"text": "Here is the one number that decides whether a launch works."
},
"musicTrack": "none",
"captionStyle": "subtle"
}Square feed post
1:1 for an Instagram or LinkedIn feed rather than a full-screen surface.
JSON
{
"workflow": "script-to-video",
"source": {
"text": "Three things we changed after our first hundred customers."
},
"aspectRatio": "1:1",
"captionStyle": "subtle"
}For agents
The same page as markdown: https://www.veedio.co/docs/workflows/script-to-video.md