Nodes/DenRakEiw Nodes/πŸ“₯ Instagram Video Downloader *DRE
ComfyUI Node

πŸ“₯ Instagram Video Downloader *DRE

Instagram Reels as a VIDEO Node, Because Copy-Pasting URLs Shouldn't Be a Workflow Step

By DenRakEiwΒ·Created about a year agoΒ·Updated 26 days agoΒ· 36
πŸ“₯ Instagram Video Downloader *DRE
    • video
    • file_path
    β—„urlβ–Ί
    β—„subfolderinstagramβ–Ί
    β—„filenameβ–Ί
    β—„resolutionβ–Ύβ–Ί
    β—„cookies_from_browserβ–Ύβ–Ί

    Sooner or later your video workflow needs footage you didn't generate. A reel you want to restyle, a clip you want to continue with a v2v pass, a reference take whose framing you want to copy. The usual move is: download it with some other tool, save an mp4, drag it into Load Video. This node deletes the middle of that.

    It takes an Instagram URL and hands back a VIDEO - the same type your sampler produces - plus the path on disk as a string. Wire it into Save Video or Get Video Components and the reel is frames in a graph.

    What it actually does

    It's a thin wrapper over yt-dlp, called in-process. No API, no key, no credits, no upload - just an HTTPS fetch from Instagram's CDN using the tool everyone uses to archive video.

    • The URL is host-checked. Anything that isn't instagram.com or a subdomain raises Not an Instagram URL, so you can't point it somewhere unexpected.
    • subfolder must be a relative path inside ComfyUI's output folder. Absolute paths and .. are rejected, so the worst a typo does is fail a run.
    • Files land in ComfyUI/output/<subfolder>/, with restrictfilenames and noplaylist on.
    • The download is returned as a VideoFromFile - the modern ComfyUI video I/O object, not a filepath pretending to be one. That's what makes it composable.

    This is the ingest half of a Wan or LTX pipeline. The graph could always generate video; it had no door for video that already exists.

    The inputs that matter

    Five widgets, and you'll touch three on a normal run.

    url - the reel, post or story link. Paste the share URL; https://www.instagram.com/reel/... is the shape.

    subfolder - defaults to instagram. Keep it, and "where did that download go" stays a one-second question.

    filename - empty is the good default here. yt-dlp then names the file uploader_shortcode, which is unique and traceable. Fill it in only to deliberately overwrite the last download.

    resolution - best, 1080p, 720p, 480p. It caps, it doesn't upscale: 1080p means highest available at or below 1080, with a fallback if nothing matches.

    cookies_from_browser - none, chrome, firefox, edge, brave. The tooltip is the author being straight with you: "Instagram blocks most downloads unless you are logged in. Pick the browser you are logged in with." none works for some public reels and fails on plenty; stories fail almost always.

    Outputs are video and file_path - the second a STRING, for when something downstream wants the literal location.

    Installing it

    It ships in the DenRakEiw Nodes pack, so install the pack. In ComfyUI Manager, search the pack title DenRakEiw Nodes, install, restart. By hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/DenRakEiw/DenRakEiw_Nodes
    cd DenRakEiw_Nodes
    pip install -r requirements.txt
    # restart ComfyUI
    

    Heads up on that requirements file: it's the whole pack's, so it drags in diffusers, transformers, kornia, color-matcher and opencv-python for nodes you may never touch. The downloader needs exactly one line - yt-dlp>=2026.8.19, next to the author's own note: "Keep this current; Instagram and other sites break old versions regularly."

    When it doesn't work

    Nothing appears in the node menu. Read the console. The pack prints βœ— InstagramVideoDownloader failed: ... (pip install yt-dlp), but that hint is a guess. The two real causes are missing yt_dlp, or a ComfyUI old enough that comfy_api.input_impl doesn't exist - which is where VideoFromFile lives. On the second, pip won't save you; update ComfyUI, because the VIDEO type is part of the newer video API.

    "Login required" / "Sign in to confirm you're not a bot". Set cookies_from_browser to the browser you're actually logged into Instagram with. This is the flakiest part of any yt-dlp setup. Firefox is the most reliable source; Chrome and Edge on Windows have had stretches where their cookie encryption changed and extraction broke. Try another browser before editing code.

    It worked last month, now it doesn't. Update yt-dlp in the environment ComfyUI runs from:

    pip install -U yt-dlp
    

    Instagram changes endpoints, the extractor gets patched, and stale yt-dlp is the usual reason a downloader "broke for no reason".

    Merging complaints. best and 1080p prefer separate video and audio streams, and yt-dlp needs ffmpeg to glue them into the mp4. If it complains ffmpeg isn't installed, put ffmpeg on PATH - or pick 720p/480p, where single-file variants are likelier.

    A carousel gave you one video, or Instagram returned no downloadable video. noplaylist is on, so a multi-video post resolves to a single item, and a photo-only post resolves to nothing. That's the node reporting honestly, not a bug.

    Categorydenrakeiw/video

    Inputs (5)

    NameTypeDefaultDescription
    urlSTRINGβ€”
    subfolderSTRINGinstagramβ€”
    filenameSTRINGβ€”
    resolutionCOMBO4 options: best, 1080p, 720p, 480p
    cookies_from_browserCOMBOInstagram blocks most downloads unless you are logged in. Pick the browser you are logged in with.

    Outputs (2)

    NameTypeDescription
    videoVIDEOβ€”
    file_pathSTRINGβ€”