VRS Folder Import (Internal Batch)
You're not supposed to add this node — and that's the point
- STRING
Every now and then a node shows up in the search results with one input called ticket and no explanation, and people add it and get an error. Here's the error and why it's correct: Expired folder import ticket; start/resume from the VRS folder panel.
This node is machinery. It's the internal work item that the pack's VRS Folders panel queues to do a chunk of image encoding, and it lives under the category prompt/VRS/internal - the word "internal" is the entire documentation you're meant to need.
What's actually going on
The pack (RS-Seasonal-Prompt-Generator, by a solo Korean author writing bilingual docs) ships a local "personal reference memory": you point it at folders of your own images, it reads the metadata baked into them (NovelAI, A1111 parameters, supported ComfyUI prompt graphs), encodes each picture with a Gemma 4 E2B vision tower, and stores a vector plus tags into a versioned store you can later query by image. Nothing is trained. It's retrieval, not a fine-tune.
The catch is that encoding thousands of images is GPU work, and ComfyUI's queue is the only sane place to do GPU work - a background thread touching CUDA while you're mid-generation is how you get OOMs and corrupted outputs. So the panel doesn't encode anything itself. It injects a normal-looking API prompt into your own queue - a one-node workflow, class_type: VRSFolderImportBatch, with a freshly generated UUID as the ticket - at a queue priority that puts it at the front. Then it does it again for the next batch, and the next, until the folder is done or you hit stop.
That's the whole design: the work is politely queued, so ComfyUI's own scheduler decides when it runs.
How the node behaves
ticket is the only input: an opaque string. When it matches the ticket the service is currently expecting, run() executes one bounded batch - a handful of images, four by default, configurable up to 32 per queue item when you create a memory - and returns a JSON report. The node is an output node, so the report lands on it as UI text, and it's also the single STRING output.
The interesting part is that it's a well-behaved citizen:
- Before doing anything expensive it checks whether any other prompt is waiting - that is, any queue item whose ticket isn't this one. If your generation is pending, it returns
{"state": "yielded"}instantly and re-queues itself later, so you don't wait behind a folder scan. - If you hit Stop in the panel, it publishes what it has and returns
{"state": "stopped"}. - Results go into a SQLite checkpoint first and get published into a new searchable snapshot on accumulated image count, elapsed time, or completion. So a crash or a killed queue item costs you a batch, not the whole scan.
- If the vision model or runtime changed since the base snapshot, it refuses:
Vision model/runtime changed; create a new collection. That's a contract check, not a bug - vectors from a different encoder aren't comparable, and pretending otherwise would silently wreck retrieval quality.
What you do instead of using it
Open VRS Folders at the bottom left of ComfyUI. Create a memory, paste absolute folder paths as seen by the server (not your laptop, if ComfyUI is remote), optionally tick the include-output-directory box, pick the native Gemma safetensors file, and hit Start / Resume. Then walk away. The panel handles the ticket lifecycle, the re-queueing, the checkpointing and the publishing.
Two things people trip on, both from the docs: the panel does not download models - you must already have an unquantized native Gemma 4 E2B safetensors with vision_model.* weights in models/text_encoders/ (TIPO's Q4 GGUF and mmproj are a different thing and won't work here). And it does not auto-resume: after an error, a restart, or you deleting a queue item, reselect the memory and press Start / Resume, because nothing is going to pick itself back up.
If you did add it, or it's left in a workflow
Delete it, or at least save that workflow separately. Because the node always executes (IS_CHANGED returns NaN, so ComfyUI never caches it), leaving it in a workflow you re-queue means every submission attempts an import batch with a ticket that has long since expired - with the good news that the failure is loud and harmless, and the better news that a real ticket won't be hijacked by your stray node. The one thing it can't guard against is you, hand-editing the ticket string into something current.
For everybody else: this page is a map, not an instruction. Install the pack, open the panel, ignore the node that sounds like a cinema ticket.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| ticket | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |