GU Resolution Select
A resolution picker that knows about video, Midjourney, and portrait mode
- W
- H
GU Resolution Select is a small QoL node that gives you a long list of preset resolutions - image and video sizes, including Midjourney's - and emits clean width/height integers. You pick a preset or type your own, flip a portrait toggle if you want it tall instead of wide, and the node outputs W and H you can wire into Empty Latent Image or your video model's resolution inputs.
Nothing about it is fancy, which is exactly why it's nice to have. The unglamorous problem it solves: remembering that 1216x704 is the LTX sweet spot, or what the Wan-friendly sizes are, or that Midjourney's square is 1024x1024 - every time you start a workflow.
What it does
- width / height - the resolution, from presets or typed manually (256 to 3840, stepping by 64).
- portrait - the one toggle that matters. The preset list only contains landscape formats, so this swaps width and height on output. The README's warning is worth quoting: the swap is applied to manual entries too, with no sanity check - so set it and you get
height x width, whether that makes sense or not.
Outputs: W and H, both INTs.
Mechanically it's a two-line function - return height, width if portrait, else width, height. All the interesting parts live in the frontend: the preset list is implemented in the pack's JavaScript (jsnodes.js), which is why the node's Python side is so boring.
Why you'd reach for it
It's a formatting-convenience node, and it earns its place two ways. First, it centralizes "which resolutions do the models I use actually want" in one dropdown - the GU pack is built around video as much as images, so the preset list leans that way (LTX/WAN-style sizes alongside SDXL and Midjourney classics). Second, because it outputs two separate integers rather than a bundled latent or string, it slots into any node that takes W and H inputs without conversion. You can even wire the same node to a canvas size, a video frame count, and a label node at once - one decision, many consumers. That's the "value node" pattern from the KB's plumbing essay: one source, many wires, zero drift.
Install
ComfyUI Manager → search "GU Nodepack" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/alexguryev/ComfyUI-GU_Nodepack
cd ComfyUI-GU_Nodepack
pip install -r requirements.txt
No model downloads. Deps: psutil, requests, gu-funclib>=1.9.0. Windows-tested, single-user design.
The traps
The portrait toggle is the whole gotcha. Because it swaps with no validation, the order of operations is: pick your preset (or type values), then set portrait - setting it first and then changing the preset will swap whatever's there and you'll wonder why you're generating 512x1024 when you picked a landscape size. And the 64-step constraint means oddball sizes need to fit the grid or you'll be typing values that snap. It's a picker, not a validator - for model-specific resolution rules (like LTX/WAN frame-count requirements), pair it with GU Set Frames Video and check the model's own docs.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 1024256–3840 | — |
| height | INT | 1024256–3840 | — |
| portrait | BOOLEAN | false | Swap width and height values = set orientation to 'Portrait' (default is 'Landscape') |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| W | INT | — |
| H | INT | — |