← Guides
Prompt guideUpdated 4 min readBy Windflow Labs

Helios prompting guide: write and steer a live video

Write Helios prompts that hold up in a live stream: the opening prompt, soft steering versus scene cuts, scheduled beats, reference images and image strength.

Helios turns a text prompt, and optionally a reference image, into one continuous video that you can redirect while it plays. Writing for it is a little different from writing for a clip generator. The opening prompt sets up a scene that has to keep going, and every later prompt is a change to a scene that is already running. This guide covers both, and the commands that apply them.

For the API itself (tokens, sessions, the socket) see how to use the Helios API.

Write the opening prompt as one concrete shot

The opening prompt anchors the first chunk, and start needs one. Describe one filmable shot in plain, concrete language:

  • Subject: who or what the camera is on, with the details that should stay fixed (colours, clothing, materials).
  • Action: one primary motion, in the present tense.
  • Place: the setting, with a few concrete elements.
  • Camera: framing and movement, such as "low tracking shot" or "slow push-in".
  • Light and treatment: time of day, light quality, and the look, such as "documentary texture" or "35mm film".

Put the most important visible thing first.

WeakStrong
A beautiful cinematic forest.A red fox walks through knee-high snow in a pine forest, low tracking camera, blue-hour light, realistic documentary texture.
A cool city at night.A cyclist in a yellow raincoat rides down a wet neon-lit street, camera following from behind at shoulder height, reflections on the asphalt.

Helios's own examples are longer, paragraph-length descriptions that add texture and background detail around the same core. Longer is fine, up to a point: keep the prompt below about 500 model tokens, since the model reads at most 512. A clear subject and action matter more than adjectives.

Steer with set_prompt, cut with scene_cut

Once the stream runs, there are two ways to change it.

set_prompt steers. Helios keeps its scene memory: subject, layout, camera motion and the recent frames carry over, and the new prompt bends what happens next. Write a steering prompt as the same shot with one thing changed:

  • Camera: The same street, slow dolly forward, pedestrians keep walking.
  • Weather: The same courtyard and camera angle as rain begins under evening light.
  • Action: The fox stops, lifts its head and looks toward the camera.

Change one dimension per revision. One change at a time reads most clearly.

scene_cut starts over. It clears the scene memory and begins independent content from the new prompt. Use it for a different location, cast, composition or a jump in time, and describe the new frame completely, because nothing carries over: Inside a night train, close-up of a traveler watching snow pass the window, warm cabin light.

An older transition: "hard" value on set_prompt is treated as soft, so a cut always needs scene_cut.

GoalCommandPrompt pattern
Continue the shot with a changeset_promptKeep subject and framing; describe the new motion or light
Change the scenescene_cutRestate subject, place, framing, action and treatment
Plan a beatschedule_promptA future chunk index, with a prompt that fits its neighbours

Schedule beats ahead of time

schedule_prompt applies a prompt at a future chunk index, so a short sequence can be planned before it plays:

await helios.command("schedule_prompt", { chunk: 6, prompt: "The same mountain pass as the sun rises behind the peaks" });
await helios.command("schedule_prompt", { chunk: 12, prompt: "The same pass at midday, a train crossing in the distance" });

A scheduled prompt steers the way set_prompt does, so keep adjacent prompts visually compatible. Helios treats a "hard" transition as soft; to cut at a planned moment, send scene_cut when that chunk arrives.

Know when a prompt has landed

prompt_accepted only means the revision was received and ordered. prompt_applied arrives when the model actually conditions on it, and content_visible (on the WebSocket v3 transport) when the browser shows the first frame of the new content. Judge a prompt after prompt_applied, not before. A revision replaced before it was applied comes back as prompt_superseded, which is normal when you send several in quick succession.

Start from a reference image

For image-to-video, upload a reference and stage it with the opening prompt in one set_conditioning call before start.

  • Use a clean frame that already shows the subject and composition you want.
  • Write the prompt about motion and change, so the image and the words point the same way.
  • Say explicitly what moves: name the action and the camera move.
  • set_image_strength takes a value from 0.0 to 1.0. Values near 1.0 hold the reference harder; lower values allow more motion. A change during the run applies at the next chunk boundary.

Tune the response

SymptomLikely causeWhat to change
The picture barely changes after set_promptScene memory is holding the old contentMake the change concrete and visible; use scene_cut if a new scene is acceptable; wait for prompt_applied
Identity or layout shiftsConflicting attributes, or too many changes at onceRemove contradictions, change one thing per revision, raise image strength if you use a reference
The opening frames are not what you meantThe opening was corrected after startStage the full opening prompt (and image) before start
Motion from a reference image is gentler than you wantThe reference is anchoring too stronglyDescribe the motion explicitly and lower image_strength

FAQ

How long should a Helios prompt be?

One to a few sentences that cover subject, action, place, camera and light. Keep it under about 500 model tokens.

Does set_prompt restart the video?

No. It steers the running scene and keeps its memory. Only scene_cut clears the memory and starts independent content.

Can Helios use a reference image?

Yes. Stage it with the opening prompt using set_conditioning, and tune how strongly it holds with set_image_strength.

Run realtime models inside your product.