Reference images that actually hold
What a start frame does to a take, why the aspect chips stop mattering the moment you attach one, and when two references beat one.
A reference image is the cheapest control you have over a take. It is also the one most often used wrong — attached as decoration rather than as an instruction. Here is what it actually does.
The start frame is a first frame, not a mood board
On every video model we mount, a single reference goes into the
image-to-video endpoint as image_url, and the model treats it as frame
one. Not "something like this". The literal first frame of the clip.
Two consequences fall straight out of that:
Composition is decided before the model runs. If your subject is small and centred in the reference, it is small and centred for the whole take. Crop the reference the way you want the shot framed.
The aspect chips become a readout. Kling and Wan have no
aspect_ratiofield on image-to-video — they read it off the still. So the studio snaps your upload to the nearest of its six aspects, shows you which one won, and sends no aspect at all. Fighting the chips at that point does nothing, because there is no field for them to travel in.
Two references are a different endpoint
This is the part that surprises people. On Seedance 2.5, one image is a first
frame. Two through six are subjects, on reference-to-video, and they are
addressed in the prompt by position:
@Image1 walks past @Image2 and stops at the windowThat is not a wider version of the same request — it is a different endpoint
with a different body, and sending image_urls to image-to-video is a 422.
Nothing about this is a judgement call at the desk: the reference count decides
it, and videoEndpoint() is the only place in the codebase that rule lives.
The practical read: if you want a character placed in a scene, one reference. If you want two things that both need to look like themselves, use two, and name them.
The end frame is legal only beside a start frame
image_url is required on all four endpoints that accept a tail, so an end
frame with no start frame is refused — both in the studio and in the Server
Function behind it, because a Server Function takes direct POSTs. Grok Imagine
Video has no end-frame input at all, and the studio says so rather than
accepting one and dropping it.
What to actually upload
Downscale before you think about anything else. The browser already resizes to
a 1280px JPEG at around 200 KB, and there is a hard 700 KB cap on the decoded
image, because a reference travels as a data: URI inline in the request body
rather than as a URL. Six references at that cap is already 5.7 MB of base64.
Beyond that: high contrast between subject and background, no motion blur, and the subject at the size you want it. A reference is an instruction. Write it clearly.