Eses Composition Guides
The Node That Draws Rule-of-Thirds Lines and Does Nothing Else (That's the Point)
- image
- mask
- image
- mask
Eses Composition Guides is a node that does absolutely nothing to your image, and that's the entire job. You pipe an image in, it draws rule-of-thirds lines, phi grids, golden triangles, and a one-point perspective grid over a live preview on the node, and then hands your image right back, byte for byte untouched. Think of it as the architect's trace paper you never had, bolted into the middle of a workflow.
Why would you want that? Because a huge share of "something's off" in generations is framing, not anatomy or lighting. Models happily produce a face dead-center in a portrait you wanted at a third, or a horizon slapped straight through the middle of a landscape. You can eyeball that, but eyeballing gets you through twenty rerolls; a live overlay gets you to a settled composition before you burn the credits. It slots in right after your KSampler (or your img2img pass) as a planning aid - the structural ControlNet conversation in the modidex notes is about imposing composition on the model; this is the much simpler task of checking it, and it costs you nothing in the pipeline.
How it works is worth knowing, because it's why the node feels fast. The Python side does almost nothing: if the image is bigger than preview_resolution_limit (default 1024), it downscales a copy, base64-PNGs it, and ships it to the frontend over a ComfyUI websocket event. All the actual drawing - every line, every triangle, every blend mode - happens in the browser, on an HTML5 canvas that's drawn into the node's own foreground. That's why toggling a guide is instant and never re-runs the graph, and why the node is genuinely non-destructive. The two outputs (image and mask) are literally the inputs echoed straight back, so you can drop this node inline anywhere and it's free.
The inputs that actually matter:
grid- on by default atgrid_lines_x/grid_lines_y3×3, which is exactly the rule of thirds. This is the one you'll use 80% of the time.phi_grid- the golden-ratio grid (φ ≈ 1.618), for when you want your subject on a harmony point instead of a third. Companion to the author's separate Fibonacci-spiral pack if you want the spiral too.perspective- the differentiator.perspective_x/perspective_y(normalized 0–1, default 0.5) drag the vanishing point anywhere, andperspective_linesfans lines out from it. Genuinely useful for architectural shots and street scenes with converging lines; most "composition" nodes don't have this.pyramidandgolden_trianglesare dropdowns (Off / Up-Down-Left-Right / both sets). Nice-to-haves, fiddlier to read at a glance.grid_color_rgbtakes an RGBA string like255,0,0,128, andblend_modeis one of 17 canvas blend modes - pickmultiplyon bright skies orlighteron dark ones so lines stay visible.
Install is trivial. ComfyUI Manager → search "ComfyUI-EsesCompositionGuides", or:
cd ComfyUI/custom_nodes
git clone https://github.com/quasiblob/ComfyUI-EsesCompositionGuides
Restart ComfyUI and it appears under Eses Nodes/Visualization. requirements.txt is empty; it needs nothing beyond the PyTorch you already have. One real gotcha: this repo ships a custom license ("My ComfyUI Nodes License") - free for personal use, but read LICENSE.txt before any commercial work, and the README explicitly asks you to. The author maintains a whole family of "Eses Nodes," and they all share it.
Where people trip: the preview doesn't appear until you hit Run once - it's the first "Connect Image and run workflow" text you see on the node, and it still catches everyone. If your preview feels laggy on 4K renders, drop preview_resolution_limit; if guides look blurry on a big image, raise it (it only affects the preview, never your output). The node-collapse bug that used to hide the canvas was fixed in 1.0.1, so keep it updated via Manager.
One honest caveat: the annotated image lives only on the node. Want to share a "here's my composition analysis"? Screenshot it - there's no export. For a tiny pass-through utility, that's about the only thing I'd add.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| preview_resolution_limit | INT | 1024256–8192 | — |
| grid_color_rgb | STRING | 255,255,255,255 | — |
| line_thickness | FLOAT | 1.00.1–32 | — |
| blend_mode | COMBO | 17 options: source-over, lighter, screen, multiply, overlay, darken, +11 | |
| grid | BOOLEAN | true | — |
| grid_lines_x | INT | 32–64 | — |
| grid_lines_y | INT | 32–64 | — |
| diagonals | BOOLEAN | false | — |
| phi_grid | BOOLEAN | false | — |
| pyramid | COMBO | 4 options: Off, Up / Down, Left / Right, Both | |
| golden_triangles | COMBO | 4 options: Off, Both, Set 1 (TL-BR), Set 2 (TR-BL) | |
| perspective | BOOLEAN | false | — |
| perspective_lines | INT | 82–32 | — |
| perspective_x | FLOAT | 0.5000–1 | — |
| perspective_y | FLOAT | 0.5000–1 | — |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |