Short Answer
What the provider received was not an image but an error response from your server. A link that opens in a browser only proves that one browser download works. It does not prove that the provider’s servers can fetch it. The typical error comes back as a 400 at submission time, and no task is created:received: "" means the provider could not detect any image format in what it downloaded.
The simplest fix: host the image on a regular object storage bucket or CDN and pass a plain public URL, such as https://cdn.example.com/xxx.png.
A Real Case
A customer’s first-frame image link looked like this:
The last row shows that the image and the request parameters were fine. Only the link was the problem.
Why Links Like This Exist
This is not an image address. It is an application endpoint: private user files live on the backend, and whenever one is needed, the app issues a temporary download grant carrying an expiry, a signature, and a download cap. This is a common way to protect private files. A leaked link stops working soon and after a few uses, and every download can be audited. The design assumes one person downloading once in a browser. It breaks when a server fetches the file instead:- No Range support: many services fetch media by first requesting the opening bytes with a
Rangeheader to detect the format, or by downloading in chunks. Endpoints like this only return the whole file and answer a Range request with an error - Download cap: when the provider fetches media, it may probe, download, and retry on failure, so it will not necessarily download just once. Once the cap is used up, the response is an error JSON
- Short expiry: once the link expires, the response is not an image either
Choosing How to Pass the Image
If your files sit behind this kind of download-grant endpoint, produce a different link before submitting:
- If the file is already in object storage (OSS, S3, R2, and so on), generate a presigned URL from the storage service and set its expiry to at least 1 hour. Presigned URLs expire by time only, have no download cap, and support Range
- Otherwise, copy the image to a public object storage bucket or CDN and pass the new URL to Seedance
Checking a Link Before Submitting
Run these two commands on any machine with internet access. Replace<URL> with your image link and keep it in single quotes so the shell does not interpret &:
- Both commands return an image, not JSON or HTML
- Repeated downloads keep working, with no download cap
- No cookie, login session, or extra header is required
- The link stays valid at least until submission completes, ideally for 1 hour or more
- The link is reachable from the public internet, not behind an intranet or an IP allowlist
Related Docs
Video Generation API
The three ways to pass images and every request parameter
Asset-First Workflow
Submission-time comparison of the three methods and how to upload assets