The URL and the intent line
What Demofy does with the address you give it and the sentence beside it, and how the refiner rewrites a rough intent into a tight one.
The URL
Demofy opens the address you give it in a real browser and explores forward from there. Three practical consequences:
- Point it at the screen the flow starts on. If the demo is about creating a project, the URL should be the projects list, not the marketing home page. Beats spent navigating in are beats in the finished video.
- It must load for a stranger, or a session must be attached. The browser arrives with no cookie and no history unless you give it one — see Recording behind a login.
- Query strings are kept. A URL that puts the app in a particular state is a legitimate way to set the scene.
If the page answers a bot challenge, Demofy retries the exploration once through a different exit address automatically, and records which one it used in the plan so the capture arrives from the same place. You do not choose that and there is no control for it: a site blocking us is our problem rather than a knob.
The intent line
One sentence. It is the only steering discovery gets, and it is stored on the job — a refresh re-explores with the same sentence, and "Make another like this" pre-fills it.
Name a flow with an end state. The model is choosing what to click, so a sentence that implies a sequence gives it something to follow.
Do not ask it to sign up or sign in. Discovery is instructed never to perform a registration flow, and a sentence that asks for one produces a demo that stops at the wall. Attach a saved session instead.
What discovery does with it
Each turn, the browser reports a numbered digest of the interactive elements it can see. The model picks one by number, states the action, states what to wait for, states a check that proves the action worked, and writes one line of narration. That beat is validated and stored, the page is re-read, and the loop goes again.
Two things it is refused, mechanically, whatever it proposes:
- Asserting the text it just typed. An input's value is a property, not page text, so such a check could never hold. The beat is refused before it runs and the turn is re-asked.
- Asserting a web address it was never shown. A check naming a host that appears nowhere in the page, the digest or your sentence is a claim about a destination nobody named.
The run ends when the model says the demo is finished, when it stops proposing beats three turns running, or when it hits the turn budget.
The narration is written to a budget
Every beat's duration is knowable before it is filmed — the replayer spends a known amount on the action, the wait and the padding — so the length of its line is decided while it is being written rather than discovered at render time. A line that would not fit is trimmed as it is stored.
The other half runs at capture: a beat is HELD long enough for its line to finish. A short beat with a long line stretches; a beat that already spent its time on a slow page load holds for nothing extra. That is why demos come out paced rather than racing their own voiceover.
You can retype any line afterwards in the editor, where you are shown the budget and what exceeding it costs, and nothing trims what you typed. See The step editor.
The Refine button
Beside the intent box. It rewrites a rough sentence into one tight instruction of at most 40 words and puts it back in the field for you to edit or discard.
- It is capped at 10 refines per hour.
- It never invents a URL, and it never adds a sign-up step.
- Nothing it produces is stored anywhere until you submit the form. It is the same free-text field it always was; the button just types in it faster than you do.