Nodes/ComfyUI Street View Loader Node/Street View Pano Loader
ComfyUI Node

Street View Pano Loader

Wide Cinematic Panoramas From Street View — Real Stitching, Not One Cropped Frame

By ru4ls·Created 11 months ago·Updated 8 months ago· 10
Street View Pano Loader
    • image
    • metadata
    location46.6237597,8.0305018
    center_heading133.4
    pitch-5.0
    fov_per_image90
    num_images3
    overlap_percentage30
    historical_date_id

    A single Street View request gets you one frame at up to 640px wide and a 120° field of view. Fine for a background plate, useless for the kind of ultra-wide cinematic landscape that makes people reach for a panorama in the first place. StreetViewPanoLoader is the pack's answer: it fetches several overlapping tiles of the same scene and stitches them into one continuous, perspective-corrected panorama.

    If you're doing virtual location scouting, want a wide ControlNet base for a stylized cityscape, or just want the full view of a viewpoint you love, this is the node. It's also the one in the pack where you'll actually feel the parameters, because stitching is an art.

    How it works

    The node fetches num_images square 640x640 tiles at slightly different headings, all at the same pitch. It spaces them out by fov_per_image × (1 - overlap/100) around your center_heading, so adjacent tiles share a strip of the same scene. Then it hands them to OpenCV's stitcher, which finds matching features, works out the perspective, warps everything onto a virtual cylinder, and blends the seams.

    That warp is why a successful stitch isn't a rectangle. Curved edges and black borders aren't a bug - they're the proof that perspective correction happened. You're looking at a cylinder, unfolded. A naive side-by-side paste would be perfectly rectangular and obviously wrong.

    The inputs that matter

    • center_heading (0–360) - the direction the middle of your panorama faces.
    • num_images (2–5) - tile count; more tiles = wider shot. Start at 3.
    • fov_per_image (30–120) - how wide each tile is. Narrower (70–80) means less edge distortion, but you'll need more tiles to cover the same width.
    • overlap_percentage (10–70) - how much adjacent tiles share. This is the knob to reach for when things fail. OpenCV needs to see the same features in two images to match them; below ~30% overlap it often can't.
    • pitch (−90 to 90) - tilt, same as the plain loader.

    Outputs are image (the stitched IMAGE) and metadata (a STRING). Read the metadata - it tells you whether OpenCV actually succeeded or the node fell back to a dumb side-by-side stitch (which looks visibly disjointed). If you see the fallback note, that's your cue to raise the overlap.

    When the stitch fails

    Flat, low-texture scenes - open water, empty fields, blank walls - defeat feature matching, and OpenCV will refuse. The order of attack: raise overlap_percentage to 40–50 first, then narrow fov_per_image a bit. The node is honest about this; the console prints a clear "not enough matching features" message and falls back gracefully instead of crashing.

    One install note specific to this node: it's the only one in the pack that needs OpenCV (opencv-python), which the requirements file installs unconditionally - a chunky wheel, so the first install takes a moment longer than the pack's other deps.

    Refining the result

    Once you have your warped panorama, the README's two paths are both good: crop the black edges off for a clean widescreen, or - the more fun route - feed it into your img2img workflow with a descriptive prompt and a low denoise (0.3–0.5) so the model fills in the black corners while respecting the real pixels. Keep denoise low; at high values the model starts rewriting the photo you went to all this trouble to capture.

    CategoryRu4ls/StreetView

    Inputs (7)

    NameTypeDefaultDescription
    locationSTRING46.6237597,8.0305018
    center_headingFLOAT133.40–360
    pitchFLOAT-5.0-90–90
    fov_per_imageINT9030–120
    num_imagesINT32–5
    overlap_percentageINT3010–70
    historical_date_idoptSTRINGEnter a panorama ID to load a historical panorama from a specific date

    Outputs (2)

    NameTypeDescription
    imageIMAGE
    metadataSTRING