arkennemasis Story Pick (choose today's story)
The node that refuses to let a model invent today's story
- url
- headline
- why
- report
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
linksthe model was shown intocandidates, 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_articleon (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_urlscomes 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_urlto the article you want.require_articleoff 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| answer | STRING | The picking model's raw answer. Wire the LLM's `text` output straight in. | |
| candidatesopt | STRING | The `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_urlopt | STRING | Make the video about THIS story instead. Set it and the model's choice is ignored — for the day the automatic pick is wrong. | |
| require_articleopt | BOOLEAN | true | Reject 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_urlsopt | STRING | URLs 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)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |
| headline | STRING | — |
| why | STRING | — |
| report | STRING | — |