Foldline
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FOLDLINE_PYTHON | No | Path to the Python interpreter used by the voice, sheet and subtitle tools. If unset, the library's .venv or ~/lemo-opuscar/.venv is used, in that order. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Foldline renders an HTML page with a and window.render(t) to an MP4, and ships 66 film styles. Start with find_styles / get_style to pick a look, read_guide for how to direct and build a film (ask for one section at a time), render_stills to review frames, check_reading for on-screen text timing, then render_video. Voice: make_voice and check_voice. Sound: mux_audio. Renders run at low priority and print only a short result.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| find_stylesA | Search the 66 film styles by words (name, category, use, demo film). Returns one short line per style. Leave query empty to list all. |
| get_styleA | Returns a style's STYLE.md: its look, rules and prompt. include_demo adds DEMO.md (how its demo film was made), which is long. |
| read_guideA | Reads one of the library guides. Without a section it returns the table of contents only, so you can ask for just the part you need. Guides: agents (how to direct and produce a film), director (story, sound, rhythm, camera, checks), technique (page contract, voice, music, mix), my-styles (making a style your own), tools (every command and flag), instruments (sampled instruments), readme, notice (licences). |
| render_stillsA | Renders JPEG stills of a film at given seconds, to look at before a full render. Returns the file paths. With sheet=true it also makes one contact sheet and returns it as an image, which is cheaper to look at than many stills. |
| render_videoA | Renders every frame of a film to an H.264 MP4 at low priority, with the in-page hardware encoder by default. Before saving, it checks the file: every rendered frame decodes and the soundtrack runs from the start to the end of the film; a short or misaligned file fails. Returns the output path, frame count, time and encoder (enc=wc is the fast path), not the progress log. Sends progress if the client asks for it. |
| check_readingA | Checks that every on-screen text stays fully in frame long enough to read (the page must expose window.TEXTS(t)). Returns only the failures and a count. |
| export_eventsC | Exports the page's window.DUR and window.EV (sound and cue events) to JSON for the mix. Returns the path and the number of events. |
| make_voiceA | Turns lines of text into trimmed WAV files and dur.json. engine "kokoro" is offline (default); "edge" is Microsoft Edge TTS, online; "qwen" is Qwen3-TTS on MLX (Mac with Apple silicon, local, free; voices ryan, aiden, vivian, serena, uncle_fu, dylan, eric, ono_anna, sohee; per-line instruct; numbers spelled out; every take checked for a cut end and by Whisper, bad takes redone). Returns each line's duration. Needs the voice tier (setup.sh deps voice), or for qwen the qwen tier (setup.sh deps qwen; the model, about 3.1 GB, downloads on first use). |
| check_voiceC | Runs Whisper over every .wav and compares it with the text. Writes words.json (word timestamps). Returns only the lines that failed and a count. |
| mux_audioA | Puts a mix under the video: two-pass loudness to -14 LUFS, true peak -1.2 dB, optional film grain. A mix shorter than the video is padded with silence, a longer one cut at the end. Before handing over, it checks the frame count and that the sound starts and ends with the picture. Returns the output path and the measured loudness. |
| make_subtitlesC | Writes an .srt subtitle file from cues. |
| fetch_assetsA | Downloads assets that are not shipped with Foldline into its library folder: the Kokoro voice model (voice), the HDRI skies that 3D styles light with (hdri), or a sampled instrument library (instruments). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Most tools target clearly different pipeline stages (style discovery, voice synthesis, voice verification, stills, video render, muxing), so misselection is unlikely. The one soft overlap is make_voice vs check_voice, since make_voice already runs Whisper checks internally, and render_stills vs check_reading both serve as pre-render inspection, but the descriptions make the boundary between generating and validating reasonably clear.
Every tool is snake_case verb_noun: read_guide, find_styles, get_style, check_voice, render_stills, render_video, check_reading, export_events, make_voice, mux_audio, make_subtitles, fetch_assets. Verb choice is predictable within families (check_*, render_*, make_*) and nothing deviates from the pattern.
Twelve tools map cleanly onto the distinct stages of a film-production pipeline, each earning its place. Nothing looks redundant or padded, and the set is well inside the comfortable 3-15 range.
The surface covers discovery (guides, styles), production (voice, stills, video), validation (voice, reading, render self-check), and finishing (events, subtitles, mux, asset fetch), which is strong lifecycle coverage. Gaps are minor: there is no tool to scaffold or list film projects/files, no cue-authoring tool separate from export_events, and no cleanup/removal operation, but agents can work around these.