Nodes/arkennemasis Nodes/arkennemasis Story Pick (choose today's story)
ComfyUI Node

arkennemasis Story Pick (choose today's story)

The node that refuses to let a model invent today's story

By Hishamahmer·Created about a month ago·Updated a day ago· 6
arkennemasis Story Pick (choose today's story)
    • url
    • headline
    • why
    • report
    answer
    candidates
    override_url
    require_articletrue
    covered_urls

    The picking model in the arkennemasis avatar pipeline reads today's source pages and picks the story. LLMs being LLMs, it will occasionally pick a story that doesn't exist. ArkStoryPick is the guard between that model's answer and the render budget: it extracts the chosen story from the model's JSON, checks it's a real article from the list it was shown, and only then hands the URL on to the screenshot and the script.

    The failure it prevents is more expensive than it sounds. A hallucinated link doesn't fail at the picker - it fails three nodes later as a screenshot of a 404, after you've already burned a render. Catching it here is free.

    How it works

    The required answer input is the picking model's raw JSON, wired straight from its text socket. The node pulls out the URL, headline, and the model's reasoning (why), then runs three checks:

    • It's in the candidate list. Wire the links the model was shown into candidates, and the chosen URL is compared against them. If the model invented a URL, the run stops with "it was invented rather than chosen."
    • It's an article, not a section. With require_article on (the default), a bare domain or a section page is rejected - because a section page screenshots as a list of headlines and reads as navigation, which means the video ends up about nothing.
    • It's not already covered. covered_urls comes from ArkStoryHistory. The prompt asks the model not to repeat itself; this check makes sure it cannot.

    override_url is the operator's escape hatch. Set it and the model's choice is ignored entirely - for the day the automatic pick is wrong and you already know the story you want. The tooltips are honest about this being a deliberate manual override, not a fix for a misbehaving picker.

    Outputs

    url goes to the screenshot node and the script side. headline feeds the record and the caption. why is the model's reasoning, which is mostly for you to read and sanity-check. report tells you what passed and what it picked.

    Installing

    Same pack install:

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

    Restart ComfyUI (ComfyUI Manager works too, search arkennemasis). No models or keys for this node itself.

    Troubleshooting

    • "was not in the N links the model was shown" - the classic hallucination, correctly caught. Re-run; if it repeats, the source page returned no usable links and you should check the source with ArkWebShot.
    • "is a section or a homepage, not a story" - the model picked a listing page. Re-run, or set override_url to the article you want. require_article off is available but you'll regret it.
    • The checks read like failures but they're the feature. A picker that never rejects anything is just a wrapper around the model's guesses.
    Categoryarkennemasis/Avatar

    Inputs (5)

    NameTypeDefaultDescription
    answerSTRINGThe picking model's raw answer. Wire the LLM's `text` output straight in.
    candidatesoptSTRINGThe `links` the model was shown. The chosen URL is checked against these, so a hallucinated link fails HERE instead of as a screenshot of a 404 three nodes later.
    override_urloptSTRINGMake the video about THIS story instead. Set it and the model's choice is ignored — for the day the automatic pick is wrong.
    require_articleoptBOOLEANtrueReject a bare domain or a section page. A section page screenshots as a list of headlines and reads as navigation, so the video ends up about nothing.
    covered_urlsoptSTRINGURLs already covered, from ArkStoryHistory. A story in this list is REJECTED — the prompt asks the model not to repeat itself, and this makes sure it cannot.

    Outputs (4)

    NameTypeDescription
    urlSTRING
    headlineSTRING
    whySTRING
    reportSTRING