Nodes/ComfyTV/Mirror
ComfyUI Node

Mirror

The instant flip that needs no GPU and no Run button

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Mirror
  • image
  • image
force_run_token0
project_id
parent_output_id0
flip_horizontalfalse
flip_verticalfalse

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.

CategoryComfyTV/Image

Inputs (6)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
flip_horizontalBOOLEANfalseFlip left↔right.
flip_verticalBOOLEANfalseFlip top↔bottom.
imageoptCOMFYTV_IMAGE

Outputs (1)

NameTypeDescription
imageCOMFYTV_IMAGE