Repository navigation
Configuration
Everything is in the package's config/video-demo.php, with comments, and most of it can be set in .env. To change more, publish it with php artisan vendor:publish --tag=video-demo-config and keep only what you change, or all of it.
Your copy is laid over the package's config: every setting in it wins, and anything it doesn't have comes from the package. So styles, models and devices added in an upgrade reach your app without touching your copy. Plain lists, such as middleware, are yours alone. To turn off a built-in style, model or device, set it to false:
'styles' => [
'promo' => false,
],Older versions of video-demo:install made a copy in every app. Install now removes such a copy when nobody edited it, and says so.
| Setting | .env |
What it does |
|---|---|---|
ai.model, ai.effort
|
VIDEO_DEMO_MODEL, VIDEO_DEMO_EFFORT
|
Defaults for new videos |
ai.models |
The models offered, their provider and prices | |
ai.api_key |
ANTHROPIC_API_KEY |
The Anthropic key |
ai.code.paths, ai.code.deny
|
What the AI may read, and files it never sees | |
ai.code.redact, ai.code.redact_patterns
|
Hiding secrets before code is sent | |
ai.notes |
Anything the AI should know that the code doesn't say, such as test card numbers | |
recorder.base_url |
VIDEO_DEMO_BASE_URL |
Where your local app is served, if not APP_URL
|
recorder.login_as |
VIDEO_DEMO_LOGIN_AS |
The user to record as by default, on your own data |
recorder.cookie_banner |
VIDEO_DEMO_COOKIE_BANNER |
A cookie banner: accept it before recording so no page shows it (the default), leave it, or the CSS selector of its accept button |
recorder.user_types |
The types of user to record as, when they can't be found from your roles | |
recorder.check_pages |
Check pages before planning and recording (on by default) | |
recorder.rehearse |
VIDEO_DEMO_REHEARSE |
Rehearse each plan without recording before recording it, on sample data (on) |
recorder.channel |
VIDEO_DEMO_BROWSER_CHANNEL |
chrome to record with installed Chrome, for apps that play MP4 |
recorder.ffmpeg |
VIDEO_DEMO_FFMPEG |
The ffmpeg to run |
recorder.node, recorder.npm, recorder.node_modules
|
VIDEO_DEMO_NODE, VIDEO_DEMO_NPM, VIDEO_DEMO_NODE_MODULES
|
The Node and npm to run, and where Playwright is installed |
recorder.speed |
VIDEO_DEMO_SPEED |
How much faster videos play than they were recorded (1) |
sample_data.default |
VIDEO_DEMO_SAMPLE_DATA |
Whether new videos record on sample data (yes) |
sample_data.seeders |
The seeders that fill the sample database | |
queue.connection, queue.retry_after
|
VIDEO_DEMO_QUEUE_CONNECTION |
The queue videos run on; empty uses the package's own |
storage.disk |
VIDEO_DEMO_DISK |
Where published videos go: a disk production also reads, such as S3, or video-demo-repo to keep them in your codebase
|
frontend.url, frontend.sign_in, frontend.token_key
|
VIDEO_DEMO_FRONTEND_URL, VIDEO_DEMO_SIGN_IN, VIDEO_DEMO_TOKEN_KEY
|
A separate frontend to record, and how the recorder signs in to it |
frontend.path, frontend.code
|
VIDEO_DEMO_FRONTEND_PATH |
The frontend's repository, and the folders of it the AI may read (src) |
studio.enabled |
VIDEO_DEMO_STUDIO |
Turn the studio on outside local
|
studio.gate |
Who may use the studio outside local | |
library.public, library.private
|
The library's prefixes, middleware and domains | |
library.stats |
VIDEO_DEMO_STATS |
Count plays, how far viewers get, and searches that found nothing (off); see The Library |
limits.max_cost_per_video |
VIDEO_DEMO_MAX_COST |
Each new video's spending limit ($0.50) |
limits.page_looks |
VIDEO_DEMO_PAGE_LOOKS |
How many pages the AI may look at while planning a video (3; 0 turns it off) |
limits |
Request and repair limits per video | |
styles |
The styles offered at first | |
devices, default_devices
|
Screen sizes, and which are switched on | |
voice.default, music.default
|
VIDEO_DEMO_VOICE, VIDEO_DEMO_MUSIC
|
The voice-over and music new videos start with; see Voice-over and Music |
music.volume, music.tracks
|
Music's volume, and your own tracks | |
music.builtin, music.builtin_url
|
VIDEO_DEMO_BUILT_IN_MUSIC, VIDEO_DEMO_BUILT_IN_MUSIC_URL
|
Offer the four built-in tracks (on), and where they are downloaded from |
ui.name |
VIDEO_DEMO_NAME |
The name on the studio and library pages |
ui.accent, ui.logo, ui.font_url
|
The look of the studio and library | |
ui.favicon |
VIDEO_DEMO_FAVICON |
The tab icon: the package's own, app for your app's favicon, or an image URL |
ui.examples, ui.examples_url
|
VIDEO_DEMO_EXAMPLES, VIDEO_DEMO_EXAMPLES_URL
|
The Examples page (false hides it), and where its videos come from |
By default the AI reads app, routes, resources/views, resources/js, resources/ts and lang, never files matching ai.code.deny (such as .env and keys). Paths outside the allowed folders, including ../ tricks, are refused. Anything that looks like a secret is replaced with [redacted: …] before it is sent. Add your own patterns with ai.code.redact_patterns.
When the code doesn't settle a label, the AI may also look at a page as the video's user, up to limits.page_looks times per video. What it sees is redacted the same way.
Getting started
Making videos
- The Studio
- Sample Data
- Styles and Screens
- Voice-over and Music
- Command Line
- Keeping Videos Up To Date
- Other Languages
- Separate Frontend
Showing videos
Going further
Help