Vrbo photo rules: 6 photos, 1024x683, no overlays

Vrbo requires at least 6 published photos at 1024 x 683 or larger, with no text or watermark overlays. Plan a compliant gallery and use AI only for promos.

4 min readSume
All posts

Vrbo wants at least 6 photos published for your property at all times; fewer than 6 for over 30 days can lead to indefinite suspension. Photos should be at least 1024 x 683 pixels, ideally 3840 x 2160 or higher, in JPEG, PNG, WebP, AVIF or SVG. No text overlays, watermarks, collages or black-and-white. The page has no AI rule, so use real photos in the gallery and put AI work into a separate tour video.

The rules are from Vrbo's photo guidelines, read on 2026-10-02.

What does Vrbo require?

The page mixes hard limits and style rules.

Vrbo photo rules, from Vrbo photo guidelines, read 2026-10-02.
ItemRule
Minimum photosAt least 6 published at all times
Multi-unit properties1 exterior, 1 interior or lobby, 3 guest room, 1 bathroom
FormatsJPEG, PNG, WebP, AVIF, SVG
ResolutionAt least 1024 x 683 px; ideally 3840 x 2160 or higher
OrientationHorizontal preferred; vertical acceptable
Not allowedBlack and white or sepia, blurry or pixelated, text overlays, graphic overlays such as watermarks or borders, collages, duplicates, documents and posters
Floor plansAcceptable
Publishing delayChanges can take up to 10 minutes to appear

Where does AI fit for a rental host?

Guests book on what they will find, so the gallery should show the real rooms. The Vrbo page does not mention AI, which means you cannot read it as permission either. Keep generated and enhanced images out of the gallery, and put them in guest guides, social posts and a walkthrough clip.

Make a tour clip from real photos

Sume's video API can turn one of your real photos into a short 16:9 clip through frame_images. Submit it, poll polling_url, then read unsigned_urls. Use it on your own site, not as a Vrbo gallery item.

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": "Slow camera push-in across the living room, daylight from the windows, nothing added or removed",
        "frame_images": [{
            "type": "image_url",
            "image_url": {"url": "https://example.com/rental/living-room.jpg"},
            "frame_type": "first_frame",
        }],
        "aspect_ratio": "16:9",
        "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