Logo Reveal
videovideo/logo-revealDrop in any image with your logo in it and get a cinematic animated reveal, up to 1080p with sound.
The logo is reproduced exactly; the motion style only drives the scene around it. Any backdrop baked into the upload is absorbed, so a screenshot of a website or a photo of a sign works as well as a transparent PNG. Renders are billed per second of finished clip.
Billed per second of video. $0.25 per second with sound: the standard 4 second clip costs $1. Live rate from GET /v3/pricing.
A complete call
Render a 4 second intro from a template prompt.
1Upload the logo
POST /v3/files/upload returns a file id.
curl -X POST "https://api.neurall.io/v3/files/upload" \
-H "Authorization: nl-YOUR_API_KEY" \
-F "files=@logo.png"It answers with the file ids
{
"files": [
{
"id": "f_9c21e0b4",
"originalName": "logo.png",
"size": 48213
}
]
}2Submit the render
POST /v3/generations with the body below, passing the file id from step 1 as args.image. It returns immediately with status pending.
curl -X POST "https://api.neurall.io/v3/generations" \
-H "Authorization: nl-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"feature": "video/logo-reveal",
"args": {
"image": "f_9c21e0b4",
"prompt": "A lens-flare reveal: a horizontal blue anamorphic flare streaks across the black frame from left to right in the opening beat; the logo materializes exactly in the flare's wake, settling into its true colors by the final beat. Sound design: one long cinematic whoosh, fading to quiet.",
"mode": "intro",
"aspectRatio": "16:9",
"background": "#000000",
"generateAudio": true,
"duration": 4
}
}'It answers immediately
{
"generation": {
"id": "9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43",
"feature": "video/logo-reveal",
"kind": "video",
"status": "pending"
}
}3Collect the result
Poll GET /v3/generations/{id} every 5 to 10 seconds (a reveal renders for a couple of minutes), or pass webhookUrl and skip polling. output.video is a signed CDN URL.
# repeat every 5s or so until status is done, error or timeout
curl "https://api.neurall.io/v3/generations/9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43" \
-H "Authorization: nl-YOUR_API_KEY"Once status is done
{
"generation": {
"id": "9f2c1d84-6a3b-4f21-9c77-2f0a1b8e5d43",
"status": "done",
"output": {
"video": "https://cdn.neurall.io/…/video.mp4",
"mime": "video/mp4"
}
}
}output holds the finished asset on a signed CDN URL. Download it rather than hotlinking: API-created outputs expire 24 hours after the request.
Arguments
imagestringrequired- The logo. A file id from POST /v3/files/upload. Whatever backdrop is baked into the file is absorbed before the render, so a screenshot of a website header or a photo of a sign works as well as a cutout.
- PNG, JPEG, WebP, GIF, HEIC or AVIF.
- Up to 30 MB and 30 megapixels per file, and at most 10 files in one upload request.
- An uploaded file is deleted 24 hours after it lands, so a file id is good for the render you are about to make, not for later ones. Upload again rather than caching an id.
args.imageThe logo- Call it "the logo" in the prompt, or do not mention it at all. It is reproduced exactly either way, and the prompt is only read as direction for the scene around it.
promptstringrequired- The motion direction: the effect, the scene, the mood. Describe what happens around the logo, never the logo itself, and never how long a beat lasts.
- At most 2000 characters. Longer prompts are rejected with a 400.
mode'intro' | 'outro'defaults to 'intro'- intro builds the logo in; outro starts on the logo and takes it apart.
aspectRatio'16:9' | '9:16'defaults to '16:9'- Output format.
backgroundhex colordefaults to '#000000'- The solid backdrop the reveal plays over. Both composed frames carry it, so the model never drifts it.
generateAudiobooleandefaults to true- Generated sound design, faded out at the end. Set false for a silent clip.
duration4 | 6 | 8defaults to 8- Clip length in seconds. Billed per second, and the prompt paces its beats across whatever you pick.
- Exactly 4, 6 or 8. Any other value is rejected; there is no rounding.
How the prompt refers to this
Never describe the logo itself (its colors, its letters, its shape). The render already has the file; describing it invites the model to redraw it instead of reproducing it.
Output
Once status is done, the generation carries an output object with these fields. On any other status, output is absent.
videostring- The finished reveal, as a URL. An MP4, with sound unless generateAudio was false.
- A signed URL that expires 24 hours after the request (expiresAt on the generation). Download the file rather than hotlinking it.
mimestring- The clip's MIME type, e.g. video/mp4.
Limits and failure
- Prompt
- At most 2000 characters.
- Upload
- 30 MB and 30 megapixels per file, 10 files per request, multipart field named "files". Uploaded files are deleted 24 hours after they land.
- Render time
- Typically 2 to 3 minutes. A generation that has not finished in 15 minutes is marked timeout and refunded.
- Concurrency
- Your plan caps how many generations run at once. Over it, the API answers 429 with a Retry-After header; retry after that many seconds rather than immediately.
- Output lifetime
- API-created outputs expire 24 hours after the request (expiresAt on the generation). Download the file rather than hotlinking it.
- Deletion
- DELETE /v3/generations/{id} removes the generation and its rendered assets immediately, rather than waiting for the 24 hour expiry. It does not refund anything and cannot cancel a render already in flight.
- Failure
- A failed or timed-out generation is refunded automatically. You are only charged for renders that land.
Worth knowing
- Template prompts pace in beats (the opening beat, the midpoint, the final beat) rather than seconds, so the same prompt holds at 4, 6 and 8 seconds.
- The engine is not selectable and is never named: pick a duration, and we keep the renderer current underneath you.
- A generation created through the API expires (expiresAt); download the asset when the webhook arrives rather than hotlinking it.