Snapchat's AI ad tools: image-to-video and Smart Upscale
Snap's June 2026 announcement adds Image-to-Video, Smart Upscale and Background Image Enhancement for ads. Here is what each does and the Sume equivalent.

Snap's June 18, 2026 announcement adds three creative tools for advertisers: Image-to-Video, Smart Upscale for the full-screen vertical canvas, and Background Image Enhancement. Advertisers choose which tools and generated assets to run. If you want the same moves outside Snap, Sume's video API makes a clip from a first-frame image and the Image API reframes a picture to 9:16.
This is from Snap for Business, read on 2026-10-02. The page gives no limits or availability dates, so none are stated here.
What does each tool do?
The announcement describes them briefly.
| Tool | What it does | Sume route |
|---|---|---|
| Image-to-Video | Turns an image into a video ad | Video API with frame_images |
| Smart Upscale | Fits creative to the full-screen vertical canvas | Image API with aspect_ratio 9:16 |
| Background Image Enhancement | Improves the image background | Image API edit with input_references |
When would I do this outside Snap?
Do it when the same creative has to run on Snap, TikTok and Reels, or when you want to review every frame before it goes anywhere. Native tools work inside one dashboard; an API call gives you a file you can reuse.
Image to video with Sume
Send the still as frame_images with frame_type first_frame, set aspect_ratio to 9:16, and poll polling_url until unsigned_urls appears. The video docs list each model's supported durations and ratios under GET /v1/videos/models.
import os, time, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
job = requests.post(
"https://api.sume.com/v1/videos",
headers=H,
json={
"model": "seedance-2",
"prompt": "Gentle push-in on this product on a clean surface, soft light, the product unchanged",
"frame_images": [{
"type": "image_url",
"image_url": {"url": "https://example.com/ads/product.jpg"},
"frame_type": "first_frame",
}],
"aspect_ratio": "9:16",
"duration": 5,
"resolution": "720p",
},
timeout=60,
).json()
while True:
time.sleep(20)
st = requests.get(job["polling_url"], headers=H, timeout=60).json()
if st["status"] in ("completed", "failed", "cancelled"):
break
print(st["status"], st.get("unsigned_urls"))
Sources
Related posts
More in Use cases
- Snapchat Saved Stories: 5-minute cap and 45-character titles
A Snap Saved Story can combine snaps up to 5 minutes with a title of 45 characters. Plan an avatar series as episodes of 60 seconds or less to fit the cap.
- Spotify Clips: 60-90 seconds, one per episode, cut it with Sume
Spotify's creator guidance says one 60-90 second clip per episode. Find the moment with Sume video inspect, then cut it with video trim.
- Square item images: 2000x2000, 15 MB, 1:1 from AI
Square recommends item images of at least 2000 x 2000 px at 1:1, up to 15 MB. Use the Sume Image API 2K tier with a 1:1 ratio and check the pixel size.
- Steam Next Fest October 2026: cut a demo trailer with captions
Steam Next Fest runs 19 to 26 October 2026. Cut a 30-second demo trailer from gameplay captures using trims, Timeline and caption cues, for under a dollar.
Written by Sume