ComfyUI Node

VSCO Scraper

Pull an entire VSCO gallery into ComfyUI (black bars and all)

By liquid-night·Created 5 months ago·Updated 5 months ago· 1
VSCO Scraper
    • images
    • vsco_data
    username
    output_dir
    max_images0
    include_videosfalse
    force_refreshfalse

    The name is honest: this node really does scrape a public VSCO profile and hand you the photos as a ComfyUI IMAGE tensor. No API key, no token, no paid endpoint - it opens a real Chrome window, watches the gallery scroll, and saves every image to disk before you ever touch it. If you've been copy-pasting screenshots of someone's feed into your workflow, this is the shortcut that makes that look silly.

    Why would you bother? VSCO is where the film-look photographers live, and a photographer's public gallery is basically a pre-curated style dataset. Building a style LoRA? The KB's lora-training doc has a line worth repeating: dataset curation beats every knob. Scrape 30–100 images from a profile whose look you want, and you've skipped the source-hunting phase entirely. Same deal if you want a gallery as img2img source material or a reference set to eyeball while you prompt. Just be honest with yourself up front: this is a brand-new, niche pack. If you google it, you'll find the repo and little else - budget a little debugging time.

    How it works

    VSCO sits behind Cloudflare bot protection, so there's no clean public API to curl. The pack's answer: launch real Chrome with remote debugging on port 9222, connect to it with Playwright over the Chrome DevTools Protocol, and intercept network responses as the page scrolls. It auto-scrolls the gallery, clicks "Load more" if it's there, snags media items out of the vsco.co/api responses, and downloads the actual images. ComfyUI's asyncio event loop can't run Playwright's sync API, so the browser dance happens on a worker thread.

    Downloaded files persist in output_dir, which is the smart part: on re-runs, if the cache already has enough images, Chrome never opens and the node just loads from disk.

    The inputs that matter

    • username (required) - the @ prefix is stripped for you, so @someone and someone both work.
    • max_images - 0 = all. Set it when you only want the first N, or when you want a faster first scrape. It also truncates the cache list, so it's a real limit, not a hint.
    • output_dir - where images land. Defaults to %TEMP%/vsco-downloads/<username>. Point it somewhere stable; the cache is the whole reason second runs are instant.
    • include_videos and force_refresh - leave videos off unless you want them, and use force_refresh only when the cache is stale and you want a clean re-scrape.

    Two outputs: images - a padded batch [B, H, W, C] - and vsco_data, a VSCO_SIZES bundle carrying the original (H, W) of every frame. The padding matters and it will surprise you: VSCO photos aren't uniform resolution, so the pack pads everything up to the batch maximum with black bars and remembers the true sizes. Feed that padded batch straight into a sampler and the bars are real pixels in your output. That's exactly why the pack ships the other two nodes - crop or select to get originals back.

    Installing

    In ComfyUI Manager, search "ComfyUI VSCO Scraper", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/liquid-night/comfyui-vsco-scraper
    

    Then restart ComfyUI and do the actual dependency work - this pack needs a real browser:

    pip install -r requirements.txt
    playwright install chromium
    

    You also need Google Chrome installed on the machine. If auto-detection misses it, set CHROME_EXE (there's also CHROME_PORT and CHROME_SOURCE_PROFILE, best documented in the README). No model downloads, no weights - just browser + Python, refreshingly lightweight.

    Where people get burned

    • First run wants you to do something. The pack opens Chrome and prints, in the ComfyUI console: "Open Chrome and navigate to https://vsco.co/<username>/gallery - scroll until photos appear, then return to ComfyUI." Do exactly that once; the session is cached in a temp Chrome profile.
    • Windows kills your Chrome. Before connecting, the pack runs taskkill /F /IM chrome.exe /T - that's every Chrome process on the machine. If you're mid-browsing, your session dies when the node first launches. Aggressive by design; save your tabs.
    • "Chrome didn't start - check CHROME_EXE." Custom installs, portable builds, non-standard paths: set the env var. On Linux it launches with --no-sandbox and SwiftShader software GL, so don't expect speed, and a truly headless box may still fight you.
    • The black bars aren't a bug. If your downstream images come out letterboxed, you skipped the crop step. On the plus side, the node shows a real progress bar during downloads and caches its output while your inputs stay unchanged - change any input and it re-executes fresh.

    It's a scraper in a world that increasingly hates scrapers, so treat it as a get-what-you-get tool: great when it works, and when it doesn't, the console messages are unusually helpful about what it wants from you.

    CategoryVSCO

    Inputs (5)

    NameTypeDefaultDescription
    usernameSTRING
    output_diroptSTRINGDirectory to save downloaded images. Defaults to system temp/vsco-downloads/<username>.
    max_imagesoptINT00–10000Maximum number of images to load as output. 0 = all.
    include_videosoptBOOLEANfalse
    force_refreshoptBOOLEANfalseRe-scrape even if images already exist on disk.

    Outputs (2)

    NameTypeDescription
    imagesIMAGE
    vsco_dataVSCO_SIZES