Documentation
Set up your first film.
Connect your product and choose who the film is for. Thespis finds the story, records the app and makes a narrated 4K film in the cloud. Review it before you share it.
What you need
| A GitHub repository | You install the Thespis GitHub App on it. |
| A branch to record from | Often a demo branch. Pushes to it start runs. |
| A runnable product | Vite and Next.js apps are detected automatically. Other Node apps can use a declared port or a start command in advanced setup. |
| Demo data | Seeded data so every run shows the same thing. |
| Approved account access | Submit the Request access form before creating a Production or Scale organization. |
1. Create your account
01
Request access
Choose Production or Scale and submit the work email you will use to sign in.
02
Sign in
Use Google or GitHub with the approved email. Both providers can link to the same account.
03
Create an organization
Give your workspace a name. This is where your team, products and films live.
04
Invite your team
Create an invitation link for each teammate and choose their role. Roles are listed under Reference.
2. Connect a repository
Open Repositories in the app and start the GitHub App installation. Pick your repositories on GitHub, and you return to the app with them connected. You never paste IDs or tokens.
Your default branch is selected for you. Open Set up demo to choose the audience. Branch and brand settings are available when you need them.
| Demo branch | The branch whose pushes start a run. |
| App configuration | Optional. An existing thespis.yml can describe a custom startup process. Most Vite and Next.js apps do not need one. |
| Brand kit | Optional. Your colors, fonts, and narration voice. |
3. Set up your demo
Open Repositories, then Set up demo. Keep Choose for me selected, choose a film format and save. You can add one sentence about what viewers should understand. The next run reads the app, selects useful scenes and writes the narration. You do not need to write a script or add configuration files for a supported app.
| Marketing film | A concise story built around a useful customer result. Use it on your website, in a launch or during a sales conversation. |
| Team guide | A more detailed explanation of setup, the workflow and available settings. Use it for onboarding, training and sharing product knowledge internally. |
| Optional product brief | Tell us what matters. For example: explain how a small team sends its first invoice and checks the result. |
| Your review | The finished film includes a summary of the chosen scenes. Check the master before approving it. Update the brief or choose Write my own for exact control. |
Thespis chooses from pages it can actually open and results the running app can return. It reads the product README for context. For an API product, a checked-in OpenAPI file can identify simple GET requests to show as clear result panels. A sign-in wall needs a demo workspace with sample data before it can be recorded.
For a precise interaction or a request with input, choose Write my own. Add the words you want spoken and the steps to show:
| App walkthrough | Open a page, click a component, enter text, focus the camera or check that a result is visible. Find controls by visible text, input label, test ID or CSS selector. |
| API result | Send GET or POST to your running app. Set the expected HTTP status and select up to six scalar JSON fields to show, such as invoice.total or items.0.name. |
| Runtime | Existing runtime configuration is reused when present. Otherwise Thespis detects Vite and Next.js dev scripts, including a single app in an apps or packages directory. When several apps are present, choose the app directory in advanced setup. Other Node apps need a declared listening port. |
| Saved setup | Each queued run saves a copy. Editing a walkthrough affects future runs. You can switch back to repository files at any time. |
API scenes show real responses in a readable result panel, with narration and component framing. For example, POST /invoices with sample line items can show the new invoice number, total and status. An unexpected status or missing field stops the run. Timing is an observation from that capture, not a performance benchmark.
API capture runs against the local app started from your repository. It supports JSON responses up to 128 KiB, a 15-second request limit and selected scalar fields. It does not follow redirects or send authentication headers. Use a seeded demo environment with sample data. It does not yet record command-line tools or arbitrary external services.
Managed films use native 4K at 60 fps. Your brand kit selects the voice and styling. Review the completed master before approving it.
4. Make a film
Open Runs, choose your product and click Make film in cloud. Marketing film and Team guide ask Thespis to choose a fresh story for that audience. Use saved story keeps your existing walkthrough. The exact release and setup are saved with the run.
Discovery, recording, narration and rendering all happen in the cloud. Keep working or close your laptop while the film is made. Longer films take more processing time. Runs shows the actual elapsed time and queue state. If capacity is busy, your run waits and starts when a slot opens.
Push to your demo branch. That starts a run automatically, using the exact commit you pushed. You can also queue one from the Runs view.
Thespis then starts your app, waits for it to answer, performs the walkthrough, and produces the complete film.
5. Review, approve, and share
A finished run waits for a person. Watch it, then approve it. Approved films appear in Demos, where your team can play them or download the 4K file.
The Demos catalog stays private. Owners and admins can publish one approved release through a separate external link. The stable link follows the current shared version, while a version link continues to open the release it was created for.
| Passcode | Require a passcode before the viewer receives playback access. |
| Expiration | Stop the link at a chosen date and time. |
| Allowed embed sites | Limit embedded playback to listed hostnames. Direct watch links remain available. |
| Revoke | Stop new watch, embed, and version access. Playback already opened ends when its short-lived media link expires. |
| Call to action | Add one HTTPS button below the film. |
| Viewer totals | See views, starts, completions, watch time, and button clicks without storing raw viewer addresses. |
Repository configuration (optional)
This file tells Thespis how to start your application and which voice to narrate with. Put it at the root of your demo branch.
version: 1
name: your-product
run: npm run dev
port: 3000
ready:
path: /
timeoutMs: 120000
env:
DATABASE_URL: postgres://demo:demo@localhost:5432/demo
narration:
mode: programme
takes: 2
voice:
gender: female
age: middle-aged
accent: american
tone: warm professional
language: en
delivery:
pace: 0.96
script: demo/product.script.jsonUse fake values in env. Never put real secrets in this file.
Custom walkthroughs (optional)
The walkthrough is a JSON file listing the scenes you want in the film. Each scene has a title, the words to narrate, and the steps to perform.
{
"version": 1,
"viewport": { "width": 1920, "height": 1080 },
"captureScale": 2,
"delivery": { "profile": "studio" },
"quality": {
"narration": "required",
"minimumCameraShots": 1,
"minimumNarrationTailMs": 900,
"minimumDetailScale": 1,
"maximumEyeTraceShift": 0.75
},
"scenes": [
{
"id": "overview",
"title": "The dashboard",
"narrate": "Every invoice and payment, in one place.",
"minMs": 6000,
"steps": [
{ "action": "goto", "url": "/", "ready": { "selector": "[data-testid=invoice-list]" }, "dwellMs": 1200 },
{ "action": "click", "target": { "selector": "[data-testid=invoice-row]" }, "ready": { "selector": "[data-testid=invoice-detail]" } },
{ "action": "assert", "target": { "selector": "[data-testid=invoice-detail]" } }
]
}
]
}| quality.narration | Use required when every scene must include spoken narration. |
| quality.minimumCameraShots | Stop the run when the walkthrough does not produce enough directed shots. |
| quality.minimumNarrationTailMs | Keep room after each sentence so the voice is not cut against the next scene. |
| quality.minimumDetailScale | An optional quality requirement. Leave it at 1 so a large dialog or panel can stay fully in frame. The camera only pushes in when the whole active component fits. |
| quality.maximumEyeTraceShift | Limit how far a camera move may carry the eye between two consecutive reframes; cuts dissolve and are exempt. |
| goto | Open a path in your app. |
| click | Click an element. |
| ready | On a goto or click, wait for the finished interface state before recording. |
| type | Type text into a field. |
| hover | Guide attention to an element without clicking it. |
| assert | Wait until an element is visible or hidden. |
| wait | Pause for a set time. |
data-testid. It survives redesigns, and a selector that no longer matches stops the run instead of recording the wrong thing.Operations
Owners and admins can open Operations to see the selected organization's queue depth, stalled work, recent failures, success rate, delivery time, latest successful output, and account activity. The view polls while it is open and never combines data from different organizations.
Plans and billing
Production costs USD $500 per month. Scale costs USD $1,500 per month. Enterprise starts at USD $25,000 per year. Request Production or Scale access from the website. Contact us for Enterprise or a capacity change while direct online checkout remains closed.
Existing online subscriptions can open the billing portal from Billing. Your current plan, repository allowance, render usage, concurrency, API-key allowance, and retention appear in the app.
Reference
thespis.yml fields
| version | Always 1. |
| name | A name for the product. |
| run | The command that starts your app. |
| cwd | Working directory. Defaults to the repository root. |
| port | The port your app serves on. |
| captureScale | Set to 2 with a 1920 by 1080 viewport for native 3840 by 2160 capture. |
| ready | Path and timeout used to check the app is up. |
| env | Environment values for your app. Fake values only. |
| narration.voice | Describe the voice with gender, age, accent, tone, and language. |
| narration.delivery | Set the speaking pace from 0.7 to 1.2. |
| narration.mode | Use programme for one continuous performance, or scene for separate scene recordings. |
| narration.takes | Generate and compare one to three complete programme takes. |
| narration.pronunciationDictionaries | Optional dictionary and version IDs for product names and specialist terms. |
| script | Path to your walkthrough JSON. |
| output | Where artifacts are written. Defaults to .thespis/out. |
Team roles
| owner | Everything, including billing, external sharing, and removing other owners. |
| admin | Operations, external sharing, team, billing, keys, repositories, brand kits, and runs. |
| editor | Repository settings, brand kits, and running or cancelling runs. |
| reviewer | Read everything, and approve finished runs. |
| viewer | Read only. |
Retention
Run history is kept for 90 days. The newest approved film for each repository is kept until you replace it, so your current private film never expires. The current external version is also kept. A superseded external version remains available through its version link for 90 days. Revoke or expire the external demo to stop new access sooner.
Run states
| queued | Capacity is reserved and the render is waiting to start. |
| capturing | The application is running and the walkthrough is being recorded. |
| uploaded | Capture is complete and the verified source states are ready. |
| rendering | The film is being produced, packaged, and checked. |
| needs_review | The film is private and ready for a reviewer. |
| published | An authorized reviewer approved the film. |
| failed | The run stopped with a stable failure category and can be retried. |
| cancelled | A team member stopped the run. |
API access
Everything in the app is also available over the API at https://api.thespis.dev. Create a key in the app under API keys. The token is shown once, so copy it straight into your secret manager.
export THESPIS_API_KEY="your-token" curl --fail-with-body \ --header "Authorization: Bearer $THESPIS_API_KEY" \ https://api.thespis.dev/v1/organizations/YOUR_ORG_ID/repositories
Common endpoints
| GET /v1/organizations/:org/repositories | List your connected repositories. |
| GET /v1/organizations/:org/operations | Read queue health and delivery latency as an owner or admin. |
| POST /v1/organizations/:org/repositories/:repository/runs | Queue a run. Needs an Idempotency-Key header. |
| GET /v1/organizations/:org/repositories/:repository/runs | List runs and their status. |
| POST /v1/organizations/:org/repositories/:repository/runs/:run/approve | Approve a run waiting for review. |
| GET /v1/organizations/:org/repositories/:repository/runs/:run/artifacts/:artifact | Get a short-lived artifact download link. |
| GET /v1/organizations/:org/external-demos | List external demos, versions, settings, and viewer totals. |
| POST /v1/organizations/:org/repositories/:repository/runs/:run/external-demo | Create a stable external demo or publish an approved run as its current version. |
| PATCH /v1/organizations/:org/external-demos/:externalDemo | Change presentation settings, passcode, expiration, embed sites, or status. |
outputAvailable and gifAvailable. Request a finished file through the artifact endpoint. Superseded run files expire after 90 days; the newest successful film for each repository remains available. Storage object names are not returned.Key scopes
| repositories:read | List and inspect repositories. |
| repositories:write | Change repository settings. |
| brand_kits:read | List and inspect brand kits. |
| brand_kits:write | Create, update, and delete brand kits. |
| analytics:read | Read monthly run and render totals. |
| runs:read | List runs and read usage. |
| runs:create | Queue a run. |
| runs:cancel | Cancel a run that has not finished. |
| runs:approve | Approve a run waiting for review. |
| artifacts:read | Get download links for finished films. |
| external_demos:read | Read external demo settings, versions, and viewer totals. |
| external_demos:write | Publish, update, revoke, or restore external demos. |