Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OPENAI_API_KEYNoAPI key for OpenAI TTS (required if AIDEMO_TTS_PROVIDER is not 'local')
OPENAI_BASE_URLNoOptional base URL for OpenAI-compatible TTS endpoint (e.g., a local server).
AIDEMO_TTS_PROVIDERNoTTS provider; set to 'local' to use in-process voice (no API key needed). Default is 'openai' if key is set, else 'local'.

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
{}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_authoring_guideA

The canonical guide to authoring demos: storyboard schema, action vocabulary, demo-director principles, ChatGPT-app recording facts. Call this FIRST before authoring or editing a storyboard. Pass topic (core | schema | polish | attention | chatgpt-apps | stills | variants | captions | debug | ci, or any H2 heading prefix) for one slice instead of the whole ~1000-line guide; start with core, then fetch attention/polish/chatgpt-apps as needed.

get_storyboard_schemaA

JSON Schema for storyboard.json, generated from the engine's own zod schema — the exact contract the engine validates against.

validate_storyboardA

Validate a storyboard against the engine schema without running anything. Pass exactly one of: dir (uses generated/storyboard.json), path (a storyboard file), or json (storyboard JSON as a string). relaxed makes narration optional (probe semantics).

lint_storyboardA

Browser-free preflight over a storyboard: a per-scene pacing forecast (which scenes compose will mostly freeze-hold or cut because the narration and the recorded action don't match), selector/wait pitfalls (type+Enter with no wait, :text-is on nested labels, focus without a zoom block, anchored waitForChange regexes), and no-op keys. Run it after every storyboard edit, before probe/render. Pass exactly one of dir / path / json. lang lints a narrations[lang] translation at that language's speaking rate.

init_demoA

Create demos// with a starter brief + storyboard. dir is the repo to scaffold into (absolute path recommended; default: server cwd). With fromUrl the page is inspected first (no LLM): its headings become scenes and its unique selectors become the beats + a _candidates list — you then write the narration and turn the candidate hover into the real click.

doctorA

Check prereqs: node, ffmpeg, Chrome (or the AIDEMO_CHROME_CHANNEL / AIDEMO_CHROME_EXECUTABLE browser in use), TTS/STT endpoint (flags LLM-only servers like Ollama), API key, playwright, installed skill.

embedA

Ready-to-paste embed snippets (markdown GIF, markdown still, HTML ) for a demo, using stable raw.githubusercontent URLs on the 'demo-media' branch. Pure string generation — no network, no render. Owner/repo come from the repo's origin remote; the demo name from the directory basename. Pair with the demo-publish workflow so CI keeps the URLs fresh. See docs/EMBEDS.md.

feedbackA

File a bug, surprise, or workaround you hit this session as a GitHub issue on the aidemo engine repo (github.com/tandryukha/aidemo) — the in-band equivalent of aidemo feedback on the CLI. Environment (engine version, OS, node, ffmpeg) and a recent-log tail from dir are auto-attached, same as the CLI. Uses gh issue create when available; falls back to a local docs/feedback-*.md plus a prefilled github.com New Issue URL when gh is missing or offline — no other network call. Call this whenever something felt broken, surprising, or needed a workaround; skip it if the session was clean. Set dryRun to preview the assembled title/body without filing anything.

job_statusA

Status, stage, per-scene progress (scenesTotal/scenesDone/currentScene — populated for probe/record/render/voice/captions/compose), log tail, and final result or error (with failure-artifact paths and, on a genuine failure, a feedbackHint pointing at the feedback tool) of a pipeline job.

job_listA

All jobs this server session, newest last.

job_cancelA

Best-effort cancel (checked between actions/scenes/stages). A mid-record cancel salvages the partial timeline + footage. The job settles asynchronously — poll job_status for the final state.

probeA

Record-only dry run to verify selectors/timing (narration optional). With updateGolden, writes golden/probe.json (the regression baseline); with golden, deep-compares against it and returns match + field-level diffs. Returns a jobId immediately — poll job_status. Rejects if another job is running.

import_traceA

Turn a Playwright trace.zip (context.tracing / --trace on) or a *.spec.ts test file into demos// with a draft storyboard: the run's own actions and selectors become scenes (cut at navigations and async payoffs), narration is left as placeholders, and _notes lists what was approximated. No LLM, no browser. Then write the narration and probe.

recordA

Drive the storyboard in Chrome and record raw video + timeline.json. Returns a jobId immediately — poll job_status. Rejects if another job is running.

renderA

Full pipeline: voice → record → captions → compose (the CLI render). Returns a jobId immediately — poll job_status. Rejects if another job is running.

voiceA

Generate per-scene TTS narration (skips unchanged scenes). Returns a jobId immediately — poll job_status. Rejects if another job is running.

captionsA

Transcribe narration.mp3 to captions with word timing. Returns a jobId immediately — poll job_status. Rejects if another job is running.

composeA

Trim, sync, mux and caption into output/final-demo.mp4. Returns a jobId immediately — poll job_status. Rejects if another job is running.

qaA

Post-render checks on the FINISHED MP4 — blank opening, blank poster, master loudness, music-bed level, per-scene hold shares + compose warnings, caption readability, frame/chapter hygiene. Run it after compose/render: it sees what a viewer sees, which neither lint (pre-take) nor report.json (structural) can. Returns a jobId immediately — poll job_status. Rejects if another job is running.

gifA

Convert output/final-demo.mp4 to a README-ready GIF. Returns a jobId immediately — poll job_status. Rejects if another job is running.

stillsA

Extract named stills (screenshot mode) from the recorded take into output/stills/ — one PNG per still marker, pulled from the CLEAN take (no captions/zoom). Needs only a recorded timeline (no key). Returns a jobId immediately — poll job_status. Rejects if another job is running.

framesA

Dump evenly spaced PNG frames from the final video (or the raw take) into output/frames/ for review — look at them instead of hand-running ffmpeg -ss. Needs only the video (no key). Returns a jobId immediately — poll job_status. Rejects if another job is running.

walkthroughA

Export output/walkthrough/ from the final video: index.html (one card per scene — payoff frame, title, narration, jump-to-time; ← → keyboard nav), guide.md (README/SOP-ready), per-scene PNGs, SRT/VTT and a JSON manifest. Needs only the rendered video + report.json (no key, no browser). Returns a jobId immediately — poll job_status. Rejects if another job is running.

inspectA

Open a URL in the recording profile (logged-in state included) and list every visible interactive element with UNIQUE selectors ranked data-testid → id → aria-label → role/text → name/placeholder → class → path, plus headings and iframes. Use it BEFORE writing targets — no selector guessing, no wasted probe. Writes logs/inspect-.json and a screenshot in the demo dir. Returns a jobId immediately — poll job_status. Rejects if another job is running.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
authoring-guideCanonical agent-neutral demo-authoring guide
storyboard-schemaJSON Schema generated from the engine's zod schema

TDQS

A3.9/5.0

Scored across 24 tools

Disambiguation4/5

Most tools map to a distinct stage of the demo pipeline (probe vs record vs render vs compose vs qa) and the descriptions make the boundaries explicit, including the 'render = full pipeline' superset relationship. A few pairs are genuinely close — validate_storyboard vs lint_storyboard (schema contract vs pacing/preflight lint), frames vs stills (evenly spaced from video vs named markers from clean take), and probe vs record — but each description disambiguates them clearly.

Naming Consistency3/5

Two conventions coexist: verb_noun for authoring/utility tools (get_storyboard_schema, validate_storyboard, init_demo, import_trace) and bare noun for pipeline stages (probe, record, voice, compose, gif, stills, frames, walkthrough), plus noun_verb ordering in job_status/job_list/job_cancel. It is readable and the bare nouns deliberately mirror CLI subcommands, but the mixed verb style and the job_* ordering break any single predictable pattern.

Tool Count3/5

24 tools is on the heavy side of the rubric even for a full video pipeline, since authoring, validation, job control, post-render QA, review artifacts, and publishing are all folded into one surface. Each tool is substantive and non-trivial, but the count sits in the borderline band rather than a tightly scoped set.

Completeness4/5

Coverage is broad and lifecycle-complete: scaffold (init_demo/import_trace), author (guide/schema), inspect, validate/lint/doctor, run the pipeline, QA the MP4, export review artifacts (gif/stills/frames/walkthrough/embed), and file feedback, with job_status/job_list/job_cancel for async control. Minor gaps remain: no cleanup/delete or reset of a demo directory, and no publish step (deferred to external CI workflow).

Maintenance

ActivityMaintained
ResponsivenessSlow