Lofi rain-on-window loop with sound: Gemini Omni 10 seconds

Make a 10-second lofi rainy window clip with Gemini Omni on Sume. Ambient audio wording, one image as first and last frame for a loop, and the cost to draft.

4 min readSume
All posts

For a lofi rain loop, generate one 10-second Gemini Omni clip with rain, a warm desk lamp and soft music written into the prompt, and use the same image as first and last frame so the end returns to the start. On Sume that is $1.25 at 720p. Loops are about the join, so look at the last second against the first before you repeat it.

Google's Omni page says to describe music and ambience explicitly, for example calm background music (read 2026-10-07); do that.

Why the same frame twice

Sume supports frame_images with both a first_frame and a last_frame on this model. If both entries point at the same image URL, the clip is asked to start and end on that picture. Nothing in the docs promises a pixel-perfect loop, so the join may show a small jump in rain or light. If the seam shows, a short fade in and fade out on the output of a Sume timeline (the docs allow 0 to 5 seconds of each) softens it.

  • Use a calm still: a window, a lamp, a mug, a plant.
  • Keep motion gentle (rain drops, a curtain, steam) so the first and last frames can match.
  • Avoid people; faces drift more than raindrops over ten seconds.

Request

The audio line carries the mood. Say the music style, the rain level, and what to leave out.

import os, requests

IMG = 'https://example.com/rain-window.jpg'
frame = lambda t: {'type': 'image_url', 'image_url': {'url': IMG}, 'frame_type': t}
body = {
    'model': 'gemini-omni-flash-1.1',
    'prompt': ('Rain runs down a window beside a warm desk lamp, steam curls from a mug, '
               'a curtain barely moves. Locked-off, single continuous shot. '
               'Audio: steady soft rain, gentle lofi piano and vinyl crackle at low volume. '
               'No dialogue.'),
    'duration': 10, 'resolution': '720p', 'aspect_ratio': '9:16',
    'frame_images': [frame('first_frame'), frame('last_frame')],
}
r = requests.post('https://api.sume.com/v1/videos', json=body, timeout=60,
                  headers={'Authorization': 'Bearer ' + os.environ['SUME_API_KEY'],
                           'Idempotency-Key': 'lofi-rain-1'})
print(r.status_code, r.json())

Budget for a week of loops

Sume bills list times 1.25 per second, rounded up to the cent per job; the doc's list rates are $0.03, $0.10, $0.15 and $0.30 per second.

Seven 10-second loops on Sume (read 2026-10-07)
ResolutionOne loopSeven loops
360p$0.38$2.66
720p$1.25$8.75
1080p$1.88$13.16

Tips for the repeat

Because the model has its own audio, the music will not loop cleanly; the end of the track and the start will not match. If you plan to run the video for an hour, consider keeping the picture and replacing the sound with a track you own, using the audio and timeline tools in the Sume docs. Draft at 360p first so you only pay for the best composition at 720p.

Using the loop

For a stream or a background, set the video to loop in the player, not in the file. If the seam bothers you, shorten the clip by a fraction of a second at each end with Sume's video trim endpoint, which cuts a range from a hosted clip. Keep the audio low in the mix: Omni's rain and piano are generated for this clip only and will repeat audibly if the clip runs for an hour. A long-running stream usually wants a separate, longer track with a licence you control.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume