Nodes/arkennemasis Nodes/arkennemasis Web Shot (page -> picture, text, links)
ComfyUI Node

arkennemasis Web Shot (page -> picture, text, links)

Free page capture that gives you the words, not just the picture

By Hishamahmer·Created about a month ago·Updated a day ago· 6
arkennemasis Web Shot (page -> picture, text, links)
    • image
    • page_text
    • links
    • title
    • report
    url
    width430
    height932
    scale2.0
    wait_seconds3.0
    scroll_tobody > div.wp-site-blocks > header > div > div, article h1, main h1, h1
    scroll_adjust_top500
    mobiletrue
    browser
    browser_path
    user_agent
    timeout_seconds90
    text_limit12000
    link_limit60
    refresh

    The name undersells it. ArkWebShot isn't a screenshot node with extras - it's a web-reading node that happens to also take a picture. It drives the Chrome or Edge already installed on your machine, captures the page, and hands back the readable text and the links alongside the image. No API key, no per-shot billing, nothing to sign up for. That's rare enough in this space to be worth leading with.

    The job it's built for is the avatar pipeline's story hunt: read today's source pages, pull out the article text and headline links, and let the picking model choose. A plain screenshot can't do that - you can't feed a JPEG to a text picker. This node gives you the words and the links the picker needs and the picture the presenter stands in front of, all from one call.

    How it works

    url takes one URL per line, and here's the nice part: their text and links are concatenated, while the image comes from the first. Blank lines and lines starting with # are ignored, so a source can be commented out rather than deleted, and https:// is added when the scheme is missing. That's a small thing that saves you a class of "why did this 404" debugging.

    The viewport defaults to 430×932 at scale 2.0 - an iPhone 15 Pro Max at retina density. That's deliberate: a phone viewport makes the site serve its mobile layout, and 2.0 keeps the headline legible when the shot sits behind a vertical video. mobile emulation is on by default, with a phone user-agent.

    The mechanism that frames the story rather than the nav bar is scroll_to: a comma-separated list of CSS selectors tried in order - the first that exists is scrolled to, then scroll_adjust_top (500px by default) scrolls past it to land on the article title. The default selector list was arrived at against real pages, and you will occasionally need to tune it for a new publisher. wait_seconds (3) settles the page first, so you're not photographing a spinner.

    Outputs: image, page_text (trimmed by text_limit, default 12000 chars - the article is near the front, the nav is what gets cut), links (headline-sized anchors, link_limit 60), title, and report.

    Installing

    cd ComfyUI/custom_nodes
    git clone https://github.com/Hishamahmer/comfyui-arkennemasis
    pip install replicate httpx
    

    Restart ComfyUI. It needs a real Chrome or Edge on the machine; browser defaults to auto, which takes Chrome if installed and Edge otherwise, and browser_path is the escape hatch when your browser lives somewhere unusual. No keys, no accounts.

    Troubleshooting

    • It photographs the nav bar: scroll_to found nothing, or the selector doesn't exist on that site. Edit the selector list or leave it blank to shoot the top.
    • A spinner in the shot: raise wait_seconds. Too low and you capture the loading state.
    • One URL per line is the image source; multiple URLs give you text from all of them. If a page looks "missing," check whether it was a #-commented line.
    • For the picture itself, the pack's other node, ArkScreenshotOne, is the paid option that blocks cookie banners and ads server-side - ArkWebShot is the free one for reading.
    Categoryarkennemasis/Utility

    Inputs (15)

    NameTypeDefaultDescription
    urlSTRINGThe page to read. ONE PER LINE for several — their text and links are concatenated, and the image comes from the first. Blank lines and lines starting with # are ignored, so a source can be commented out rather than deleted. `https://` is added when the scheme is missing.
    widthINT43064–4096Viewport width in CSS pixels. 430 is an iPhone 15 Pro Max, which is what makes a site serve its phone layout.
    heightINT93264–8192Viewport height. The capture is the viewport, so this is the output height.
    scaleFLOAT2.00.5–4Device pixel ratio. 2.0 renders at retina density, so the headline stays legible behind a video.
    wait_secondsFLOAT3.00–60Settling time after load, before scrolling and the shutter. Too low and you photograph a spinner.
    scroll_toSTRINGbody > div.wp-site-blocks > header > div > div, article h1, main h1, h1CSS selectors tried IN ORDER; the first that exists is scrolled to. This is what puts the headline in frame instead of the nav bar. Leave blank to shoot the top.
    scroll_adjust_topINT500-4000–8000Pixels to scroll PAST the matched element. 500 with a site-header selector lands on the article title.
    mobileoptBOOLEANtrueEmulate a phone. Sites that branch on the user-agent or on touch support need this for their mobile layout.
    browseroptCOMBOWhich browser to drive. `auto` takes Chrome if it is installed and Edge otherwise.
    browser_pathoptSTRINGFull path to a browser executable, when it is somewhere this node does not look.
    user_agentoptSTRINGOverride the user-agent. Blank uses a phone UA when `mobile` is on, and the browser's own otherwise.
    timeout_secondsoptINT9010–600Hard limit. A hung browser fails here instead of stalling the queue silently.
    text_limitoptINT12000500–200000Characters of page text to keep. A whole site is mostly navigation; the article is near the front.
    link_limitoptINT600–500How many links to return. Links under 25 characters of anchor text are dropped as navigation, so what is left is mostly headlines.
    refreshoptCOMBOHow often to actually go and look. 'when the inputs change' caches forever — right when the page is a fixed article. 'once a day' refetches on the first run of each new date — right for a front page you are mining for today's story. 'every run' refetches always, and re-runs EVERYTHING downstream of it, including any render.

    Outputs (5)

    NameTypeDescription
    imageIMAGE
    page_textSTRING
    linksSTRING
    titleSTRING
    reportSTRING