VRGDG Multi Cycling Text Picker
Twenty Prompt Roulettes in One Node, for When Scenes Shouldn't All Match
- combined_formatted_text
- results_json
- formatted_text_1
- formatted_text_2
- formatted_text_3
- formatted_text_4
- formatted_text_5
- formatted_text_6
- formatted_text_7
- formatted_text_8
- formatted_text_9
- formatted_text_10
- formatted_text_11
- formatted_text_12
- formatted_text_13
- formatted_text_14
- formatted_text_15
- formatted_text_16
- formatted_text_17
- formatted_text_18
- formatted_text_19
- formatted_text_20
VRGDG_MultiCyclingTextPicker is up to twenty independent "choose one item from this list" pickers packed into a single node, each with its own preset, list, selection mode, and formatting - all joined into one output. It's the node that keeps a long music video from repeating the same camera move, lighting setup, and interaction every single scene.
Here's the boredom problem it solves. If every scene prompt says "slow push-in, warm lighting, walking through tall grass," every scene looks the same, and a 16-scene video becomes one scene rendered sixteen times. The fix is variety from a controlled pool: scene 1 gets a push-in, scene 2 a tracking shot, scene 3 an orbit, and so on - but only from the pool you approved. This node is that pool, and it cycles through it.
Inputs worth knowing
Each picker (preset_1 … preset_20) has the same set of controls. The ones you'll actually touch:
picker_count- how many pickers are active (0–20). Set 0 and the whole thing is disabled, which the tooltip notes is the way to turn off "advanced prompt details."preset_N- a canned label/list. Picker 1 ships with a Camera Motion preset preloaded, and it's a good list: push-ins, tracking, dolly, orbit, crane. Others default toCustomfor your own list.items_N- the actual list of choices. It parses lines, blank-line chunks, commas, pipes, JSON/Python lists, even objects withitems/values/motionskeys. That flexibility means you can paste in a JSON array from another tool and it just works.selection_mode_N-index(choose by theindex_Nstep number, deterministic), or seeded random modes (with/without repeats).pick_count_N- how many items to grab at once (default 1). Pick two andtwo_item_template_N("start with {item1} then follow with {item2}") formats them into a sentence.label_N- an optional label ("Camera Motion:") prefixed to that picker's output.joiner- how active picker outputs combine intocombined_formatted_text: newline, blank line, comma, or pipe.
Outputs: combined_formatted_text (everything joined, ready for the prompt creator), results_json (the selections as structured data), and one formatted_text_1…formatted_text_20 per picker if you want to route them individually.
The workflow payoff
In this pack, the picker sits between the LLM and the scene prompts: the LLM writes the narrative, and the picker injects per-scene variation that stays inside your guardrails - a slow pan here, a crane rising move there, never a wildcard mid-scene meltdown. The seeded random modes plus per-picker seeds mean you can make a run reproducible when you need it and chaotic when you don't.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl
Restart ComfyUI; it's under VRGDG/General. ComfyUI Manager: search vrgamedev. No extra downloads.
Honest note
This node is a lot of surface area for what it does - twenty pickers of widgets will sprawl across your canvas, and you'll likely only use 3–6. Don't feel obligated to fill them. And remember the picker only knows the lists you give it: a boring list produces boring variety, so curate the pools (the shipped Camera Motion preset is genuinely decent, and a good template for how to write your own). It's a variety machine, not a creativity machine.
Inputs (162)
| Name | Type | Default | Description |
|---|---|---|---|
| picker_count | INT | 00–20 | How many independent cycling text pickers to use. Set 0 to disable advanced prompt details. |
| joiner | COMBO | How to combine the active formatted_text outputs into combined_formatted_text. | |
| preset_1 | STRING | Camera Motion | Picker 1: choose a preset label/list, or Custom for your own label and editable list. |
| items_1 | STRING | Slow push-in Track right Track left Dolly backward Handheld follow Over-the-shoulder push-in Slow pan right Slow pan left Tilt up Tilt down Arc around subject Orbit shot Low-angle tracking shot Crane rising move Slow zoom-in | Picker 1: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. |
| label_1 | STRING | Camera Motion | Picker 1: optional label placed before this picker output. |
| selection_mode_1 | STRING | index | Picker 1: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_1 | STRING | start with {item1} then follow with {item2} | Picker 1: sentence template used when this picker selects exactly two items. |
| pick_count_1 | INT | 11–50 | Picker 1: how many items to select from this picker at once. |
| preset_2 | STRING | Custom | Picker 2: choose a preset label/list, or Custom for your own label and editable list. |
| items_2 | STRING | Picker 2: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_2 | STRING | Picker 2: optional label placed before this picker output. | |
| selection_mode_2 | STRING | index | Picker 2: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_2 | STRING | start with {item1} then follow with {item2} | Picker 2: sentence template used when this picker selects exactly two items. |
| pick_count_2 | INT | 11–50 | Picker 2: how many items to select from this picker at once. |
| preset_3 | STRING | Custom | Picker 3: choose a preset label/list, or Custom for your own label and editable list. |
| items_3 | STRING | Picker 3: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_3 | STRING | Picker 3: optional label placed before this picker output. | |
| selection_mode_3 | STRING | index | Picker 3: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_3 | STRING | start with {item1} then follow with {item2} | Picker 3: sentence template used when this picker selects exactly two items. |
| pick_count_3 | INT | 11–50 | Picker 3: how many items to select from this picker at once. |
| preset_4 | STRING | Custom | Picker 4: choose a preset label/list, or Custom for your own label and editable list. |
| items_4 | STRING | Picker 4: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_4 | STRING | Picker 4: optional label placed before this picker output. | |
| selection_mode_4 | STRING | index | Picker 4: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_4 | STRING | start with {item1} then follow with {item2} | Picker 4: sentence template used when this picker selects exactly two items. |
| pick_count_4 | INT | 11–50 | Picker 4: how many items to select from this picker at once. |
| preset_5 | STRING | Custom | Picker 5: choose a preset label/list, or Custom for your own label and editable list. |
| items_5 | STRING | Picker 5: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_5 | STRING | Picker 5: optional label placed before this picker output. | |
| selection_mode_5 | STRING | index | Picker 5: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_5 | STRING | start with {item1} then follow with {item2} | Picker 5: sentence template used when this picker selects exactly two items. |
| pick_count_5 | INT | 11–50 | Picker 5: how many items to select from this picker at once. |
| preset_6 | STRING | Custom | Picker 6: choose a preset label/list, or Custom for your own label and editable list. |
| items_6 | STRING | Picker 6: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_6 | STRING | Picker 6: optional label placed before this picker output. | |
| selection_mode_6 | STRING | index | Picker 6: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_6 | STRING | start with {item1} then follow with {item2} | Picker 6: sentence template used when this picker selects exactly two items. |
| pick_count_6 | INT | 11–50 | Picker 6: how many items to select from this picker at once. |
| preset_7 | STRING | Custom | Picker 7: choose a preset label/list, or Custom for your own label and editable list. |
| items_7 | STRING | Picker 7: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_7 | STRING | Picker 7: optional label placed before this picker output. | |
| selection_mode_7 | STRING | index | Picker 7: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_7 | STRING | start with {item1} then follow with {item2} | Picker 7: sentence template used when this picker selects exactly two items. |
| pick_count_7 | INT | 11–50 | Picker 7: how many items to select from this picker at once. |
| preset_8 | STRING | Custom | Picker 8: choose a preset label/list, or Custom for your own label and editable list. |
| items_8 | STRING | Picker 8: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_8 | STRING | Picker 8: optional label placed before this picker output. | |
| selection_mode_8 | STRING | index | Picker 8: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_8 | STRING | start with {item1} then follow with {item2} | Picker 8: sentence template used when this picker selects exactly two items. |
| pick_count_8 | INT | 11–50 | Picker 8: how many items to select from this picker at once. |
| preset_9 | STRING | Custom | Picker 9: choose a preset label/list, or Custom for your own label and editable list. |
| items_9 | STRING | Picker 9: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_9 | STRING | Picker 9: optional label placed before this picker output. | |
| selection_mode_9 | STRING | index | Picker 9: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_9 | STRING | start with {item1} then follow with {item2} | Picker 9: sentence template used when this picker selects exactly two items. |
| pick_count_9 | INT | 11–50 | Picker 9: how many items to select from this picker at once. |
| preset_10 | STRING | Custom | Picker 10: choose a preset label/list, or Custom for your own label and editable list. |
| items_10 | STRING | Picker 10: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_10 | STRING | Picker 10: optional label placed before this picker output. | |
| selection_mode_10 | STRING | index | Picker 10: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_10 | STRING | start with {item1} then follow with {item2} | Picker 10: sentence template used when this picker selects exactly two items. |
| pick_count_10 | INT | 11–50 | Picker 10: how many items to select from this picker at once. |
| preset_11 | STRING | Custom | Picker 11: choose a preset label/list, or Custom for your own label and editable list. |
| items_11 | STRING | Picker 11: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_11 | STRING | Picker 11: optional label placed before this picker output. | |
| selection_mode_11 | STRING | index | Picker 11: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_11 | STRING | start with {item1} then follow with {item2} | Picker 11: sentence template used when this picker selects exactly two items. |
| pick_count_11 | INT | 11–50 | Picker 11: how many items to select from this picker at once. |
| preset_12 | STRING | Custom | Picker 12: choose a preset label/list, or Custom for your own label and editable list. |
| items_12 | STRING | Picker 12: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_12 | STRING | Picker 12: optional label placed before this picker output. | |
| selection_mode_12 | STRING | index | Picker 12: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_12 | STRING | start with {item1} then follow with {item2} | Picker 12: sentence template used when this picker selects exactly two items. |
| pick_count_12 | INT | 11–50 | Picker 12: how many items to select from this picker at once. |
| preset_13 | STRING | Custom | Picker 13: choose a preset label/list, or Custom for your own label and editable list. |
| items_13 | STRING | Picker 13: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_13 | STRING | Picker 13: optional label placed before this picker output. | |
| selection_mode_13 | STRING | index | Picker 13: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_13 | STRING | start with {item1} then follow with {item2} | Picker 13: sentence template used when this picker selects exactly two items. |
| pick_count_13 | INT | 11–50 | Picker 13: how many items to select from this picker at once. |
| preset_14 | STRING | Custom | Picker 14: choose a preset label/list, or Custom for your own label and editable list. |
| items_14 | STRING | Picker 14: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_14 | STRING | Picker 14: optional label placed before this picker output. | |
| selection_mode_14 | STRING | index | Picker 14: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_14 | STRING | start with {item1} then follow with {item2} | Picker 14: sentence template used when this picker selects exactly two items. |
| pick_count_14 | INT | 11–50 | Picker 14: how many items to select from this picker at once. |
| preset_15 | STRING | Custom | Picker 15: choose a preset label/list, or Custom for your own label and editable list. |
| items_15 | STRING | Picker 15: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_15 | STRING | Picker 15: optional label placed before this picker output. | |
| selection_mode_15 | STRING | index | Picker 15: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_15 | STRING | start with {item1} then follow with {item2} | Picker 15: sentence template used when this picker selects exactly two items. |
| pick_count_15 | INT | 11–50 | Picker 15: how many items to select from this picker at once. |
| preset_16 | STRING | Custom | Picker 16: choose a preset label/list, or Custom for your own label and editable list. |
| items_16 | STRING | Picker 16: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_16 | STRING | Picker 16: optional label placed before this picker output. | |
| selection_mode_16 | STRING | index | Picker 16: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_16 | STRING | start with {item1} then follow with {item2} | Picker 16: sentence template used when this picker selects exactly two items. |
| pick_count_16 | INT | 11–50 | Picker 16: how many items to select from this picker at once. |
| preset_17 | STRING | Custom | Picker 17: choose a preset label/list, or Custom for your own label and editable list. |
| items_17 | STRING | Picker 17: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_17 | STRING | Picker 17: optional label placed before this picker output. | |
| selection_mode_17 | STRING | index | Picker 17: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_17 | STRING | start with {item1} then follow with {item2} | Picker 17: sentence template used when this picker selects exactly two items. |
| pick_count_17 | INT | 11–50 | Picker 17: how many items to select from this picker at once. |
| preset_18 | STRING | Custom | Picker 18: choose a preset label/list, or Custom for your own label and editable list. |
| items_18 | STRING | Picker 18: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_18 | STRING | Picker 18: optional label placed before this picker output. | |
| selection_mode_18 | STRING | index | Picker 18: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_18 | STRING | start with {item1} then follow with {item2} | Picker 18: sentence template used when this picker selects exactly two items. |
| pick_count_18 | INT | 11–50 | Picker 18: how many items to select from this picker at once. |
| preset_19 | STRING | Custom | Picker 19: choose a preset label/list, or Custom for your own label and editable list. |
| items_19 | STRING | Picker 19: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_19 | STRING | Picker 19: optional label placed before this picker output. | |
| selection_mode_19 | STRING | index | Picker 19: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_19 | STRING | start with {item1} then follow with {item2} | Picker 19: sentence template used when this picker selects exactly two items. |
| pick_count_19 | INT | 11–50 | Picker 19: how many items to select from this picker at once. |
| preset_20 | STRING | Custom | Picker 20: choose a preset label/list, or Custom for your own label and editable list. |
| items_20 | STRING | Picker 20: list of text choices. Supports lines, blank-line chunks, comma, pipe, JSON/Python lists, or objects with items/values/motions. | |
| label_20 | STRING | Picker 20: optional label placed before this picker output. | |
| selection_mode_20 | STRING | index | Picker 20: choose by wrapped index, seeded random, or seeded random no-repeat. |
| two_item_template_20 | STRING | start with {item1} then follow with {item2} | Picker 20: sentence template used when this picker selects exactly two items. |
| pick_count_20 | INT | 11–50 | Picker 20: how many items to select from this picker at once. |
| index_1opt | INT | 0-999999–999999 | Picker 1: step number used to choose from this picker list. |
| seed_1opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 1: seed used by random modes. |
| index_2opt | INT | 0-999999–999999 | Picker 2: step number used to choose from this picker list. |
| seed_2opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 2: seed used by random modes. |
| index_3opt | INT | 0-999999–999999 | Picker 3: step number used to choose from this picker list. |
| seed_3opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 3: seed used by random modes. |
| index_4opt | INT | 0-999999–999999 | Picker 4: step number used to choose from this picker list. |
| seed_4opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 4: seed used by random modes. |
| index_5opt | INT | 0-999999–999999 | Picker 5: step number used to choose from this picker list. |
| seed_5opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 5: seed used by random modes. |
| index_6opt | INT | 0-999999–999999 | Picker 6: step number used to choose from this picker list. |
| seed_6opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 6: seed used by random modes. |
| index_7opt | INT | 0-999999–999999 | Picker 7: step number used to choose from this picker list. |
| seed_7opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 7: seed used by random modes. |
| index_8opt | INT | 0-999999–999999 | Picker 8: step number used to choose from this picker list. |
| seed_8opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 8: seed used by random modes. |
| index_9opt | INT | 0-999999–999999 | Picker 9: step number used to choose from this picker list. |
| seed_9opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 9: seed used by random modes. |
| index_10opt | INT | 0-999999–999999 | Picker 10: step number used to choose from this picker list. |
| seed_10opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 10: seed used by random modes. |
| index_11opt | INT | 0-999999–999999 | Picker 11: step number used to choose from this picker list. |
| seed_11opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 11: seed used by random modes. |
| index_12opt | INT | 0-999999–999999 | Picker 12: step number used to choose from this picker list. |
| seed_12opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 12: seed used by random modes. |
| index_13opt | INT | 0-999999–999999 | Picker 13: step number used to choose from this picker list. |
| seed_13opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 13: seed used by random modes. |
| index_14opt | INT | 0-999999–999999 | Picker 14: step number used to choose from this picker list. |
| seed_14opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 14: seed used by random modes. |
| index_15opt | INT | 0-999999–999999 | Picker 15: step number used to choose from this picker list. |
| seed_15opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 15: seed used by random modes. |
| index_16opt | INT | 0-999999–999999 | Picker 16: step number used to choose from this picker list. |
| seed_16opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 16: seed used by random modes. |
| index_17opt | INT | 0-999999–999999 | Picker 17: step number used to choose from this picker list. |
| seed_17opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 17: seed used by random modes. |
| index_18opt | INT | 0-999999–999999 | Picker 18: step number used to choose from this picker list. |
| seed_18opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 18: seed used by random modes. |
| index_19opt | INT | 0-999999–999999 | Picker 19: step number used to choose from this picker list. |
| seed_19opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 19: seed used by random modes. |
| index_20opt | INT | 0-999999–999999 | Picker 20: step number used to choose from this picker list. |
| seed_20opt | INT | 0-18446744073709550000–18446744073709550000 | Picker 20: seed used by random modes. |
Outputs (22)
| Name | Type | Description |
|---|---|---|
| combined_formatted_text | STRING | — |
| results_json | STRING | — |
| formatted_text_1 | STRING | — |
| formatted_text_2 | STRING | — |
| formatted_text_3 | STRING | — |
| formatted_text_4 | STRING | — |
| formatted_text_5 | STRING | — |
| formatted_text_6 | STRING | — |
| formatted_text_7 | STRING | — |
| formatted_text_8 | STRING | — |
| formatted_text_9 | STRING | — |
| formatted_text_10 | STRING | — |
| formatted_text_11 | STRING | — |
| formatted_text_12 | STRING | — |
| formatted_text_13 | STRING | — |
| formatted_text_14 | STRING | — |
| formatted_text_15 | STRING | — |
| formatted_text_16 | STRING | — |
| formatted_text_17 | STRING | — |
| formatted_text_18 | STRING | — |
| formatted_text_19 | STRING | — |
| formatted_text_20 | STRING | — |