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.

4 min readSume
All posts

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.

Snap AI ad tools, from Snap for Business, read 2026-10-02.
ToolWhat it doesSume route
Image-to-VideoTurns an image into a video adVideo API with frame_images
Smart UpscaleFits creative to the full-screen vertical canvasImage API with aspect_ratio 9:16
Background Image EnhancementImproves the image backgroundImage 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

All Use cases posts

Written by Sume