Shima Noodman (Sprite Mascot)
A tiny animated mascot that reacts to your workflow
- any_input
- value
Shima Noodman (Sprite Mascot) is the pack's mascot node and the most purely decorative thing in Shima: it plays a sprite-sheet animation on the canvas, and the animation it plays is chosen by the value you feed it. Feed it a 1 and it plays its State 1 animation; feed it a 2 and it plays State 2; feed it nothing and it idles. Noodman is the little character that shows up in Shima's promo material and Discord - this node is how he lives inside your actual workflow.
Is it useful? Genuinely, in exactly one way: it's an animated status display you can't ignore. A mascot that flips from idle to an alert animation when a value crosses a threshold is a far more legible "something changed" signal than a log line, especially on a shared or streamed workflow where you want a visitor to notice without reading the console. Think of it as the 3-State Indicator's charming cousin - same input-driven state logic, much better at getting attention.
It's also just the most fun node in the pack, and Shima is a pack with a very specific vibe - hardware-style panels, control-room lamps, a whole aesthetic. If you're building a template workflow you'll present, Noodman is seasoning, not structure. Don't build your graph around it; drop it in as a garnish.
How it works
It loads a sprite sheet (a grid image) from Shima/assets/sprites/, and you tell it the grid layout with columns and rows. You then define three animation sequences as frame references - anim_idle, anim_state1, anim_state2 - using notation like A1,A2,A3 or A1-A5, where A is the row letter and the number is the column. The any_input value is judged by a trigger_type (Number Match, Math, String, Regex, Boolean, Hardware Sync - the same family of modes as the indicator nodes) against state_1_value and state_2_value, which picks which sequence plays. fps sets playback speed (0 freezes on the first frame), and stop_after_run halts the animation when the workflow finishes - or you can point watch_node_id at a specific node and it stops when that node finishes, which is how you get a mascot that "works" during a slow step and rests after.
The sprite sheets themselves live in the pack's assets/sprites/ folder. Drop your own .png/.jpg/.webp grid in there and it appears in the sprite_sheet dropdown on restart - same pattern as the sticker and backdrop assets.
The inputs that matter
sprite_sheet,columns,rows- which sheet and how the grid is laid out.trigger_type,state_1_value,state_2_value- how the input value picks a state.anim_idle,anim_state1,anim_state2- the three frame sequences.fps,stop_after_run,watch_node_id- playback behavior.scale- display size.
Optional input: any_input (any type) - leave it unconnected and it defaults to State 1. Output: value - the input passed through.
How to install it
In the Shima pack - ComfyUI Manager, search "Shima", or:
cd ComfyUI/custom_nodes
git clone https://github.com/KDB-USJP/shima_wf.git Shima
restart. The built-in sprite sheet ships with the pack; no downloads.
Common issues & troubleshooting
Mascot sits frozen. fps is 0 (freeze), or stop_after_run already stopped it, or watch_node_id points at a node that already finished. Bump fps and check the watch target.
Animation looks wrong / jumps around. Your columns/rows don't match the actual grid of the sheet, so frame references land on the wrong cells. Count the real grid, or use the built-in sheet to verify your sequence notation (A1-A5 = columns 1–5 of row A) before swapping in custom art.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| sprite_sheet | COMBO | Sprite Sheet_examples.png | Sprite sheet image from Shima/assets/sprites/ |
| columns | INT | 101–64 | Number of columns in the sprite grid |
| rows | INT | 101–64 | Number of rows in the sprite grid |
| trigger_type | COMBO | Number Match | How the input value determines which animation to play |
| state_1_value | STRING | 1.0 | Value that triggers State 1 animation |
| state_2_value | STRING | 2.0 | Value that triggers State 2 animation |
| anim_idle | STRING | A1 | Frame sequence for Idle/Off state (e.g. A1,A2,A3 or A1-A5) |
| anim_state1 | STRING | A1-A10 | Frame sequence for State 1 (e.g. B1-B10) |
| anim_state2 | STRING | B1-B10 | Frame sequence for State 2 (e.g. C1-C10) |
| fps | INT | 80–30 | Playback speed (0 = frozen on first frame) |
| stop_after_run | BOOLEAN | true | Stop animation when workflow execution finishes |
| watch_node_id | STRING | Node ID to watch — stops animation when that node finishes (overrides stop_after_run) | |
| scale | FLOAT | 1.00.1–10 | Display size multiplier |
| any_inputopt | * | Input value for state evaluation |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |