Mirror
The instant flip that needs no GPU and no Run button
- image
- image
Mirror is the most unremarkable node in ComfyTV, and that's the point. You drop an image in, flip it, and the flipped result is ready downstream without a Run and without touching the GPU. In a pack that ships a whole video editor, a 3D scene stage and a particle simulator, the humble flip is the one you'll use constantly and never think about - which is exactly what browser-side tools should be.
It flips an upstream COMFYTV_IMAGE horizontally (flip_horizontal, left↔right) and/or vertically (flip_vertical, top↔bottom). Both are booleans, default off. Flip both and you've got a 180° rotation - visually, though the pack's own docs warn you not to treat that as a substitute for the Rotate stage, and they're right: stacking Mirror on top of Rotate when you meant one operation is how you end up debugging why your text is upside down.
When you'll reach for it
- Fixing selfie mirroring - that text on a sign or a logo that renders backwards.
- Symmetry checks on patterns, faces, or product shots. Flip and eyeball.
- The Image Picker's edit toolbar carries the same mirror action, so most of the time you'll trigger it there rather than hunting for a standalone node.
Because it's an "instant" stage, parameter changes update the preview immediately and the output is usable downstream with no queue involvement. The flip itself happens in the browser; nothing is re-rendered.
The schema, read correctly
The required inputs - force_run_token, project_id, parent_output_id - are ComfyTV plumbing, not settings. flip_horizontal and flip_vertical are the only two you set, and honestly the toggles on the node card are more pleasant than the schema suggests. There's a flip_horizontal default of false and the same for vertical; flip on what you want.
The image input is optional in the schema but you obviously want one connected - this node does nothing to nothing. The single output is image (COMFYTV_IMAGE), which you can chain into Crop, Upscale, or any generative stage. Which brings up the one real gotcha: downstream generative stages need a re-Run after you flip. Because ComfyTV stages consume snapshots, an instant transform upstream doesn't auto-re-render what came after it. Flip, then hit Run on the generative node you wired into.
Install
ComfyTV is one pack, one command:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI, find Mirror under ComfyTV → Image (ComfyUI Manager finds the pack as "ComfyTV" too). On Desktop/macOS, clone into the running instance by absolute path and confirm custom_nodes/ComfyTV/__init__.py sits at the top level - the classic failure is a nested folder plus a browser refresh instead of a backend restart. There are no extra Python dependencies to fight with; the pack adds none.
If you're on a mission to mirror without ComfyTV at all, you don't need this pack - but you're reading this because you're in the ComfyTV canvas anyway, and having the flip as a native stage that flows into the rest of your pipeline beats exporting to an editor mid-workflow every single time.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| flip_horizontal | BOOLEAN | false | Flip left↔right. |
| flip_vertical | BOOLEAN | false | Flip top↔bottom. |
| imageopt | COMFYTV_IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | COMFYTV_IMAGE | — |