cn_03_kemmy_Aspect Manager
Stop retyping 832×1216 into Empty Latent Image
- width
- height
Resolution bookkeeping is the least glamorous part of ComfyUI. You know SDXL likes 1024×1024 and its trained ratios, you know Flux wants multiples of 64, and you still type 1216 and 832 into Empty Latent Image by hand, again in the upscale node, then forget which one you changed. Aspect Manager holds your resolution list once and fans the two numbers out as wires.
What you actually get
The pack is tiny: one Python node, a storage helper, an aiohttp route for saving presets, and one JS file that draws the panel. No third-party dependencies, MIT licensed, and small enough to read in five minutes - which is the pitch. The heavier alternative, ResolutionMaster, does the same job with an interactive canvas, model-specific snapping and megapixel math. Aspect Manager does none of that: you type the numbers, it remembers them, and it does the arithmetic when you leave a side blank. If you want a node that enforces Flux's 64-divisibility for you, this isn't it.
It's also brand new - first version on the Comfy Registry 2026-09-25, zero downloads, publisher account three weeks old. No track record. Treat it as a small readable tool, not a standard.
The mechanism, and the one input
Under the panel it's a plumbing node, the same family as ComfyUI's PrimitiveInt (docs/knowledge/comfyui-node-plumbing.md): one value source fanned out as a wire instead of typing the same numbers five times. This one just carries a preset library with it.
Its schema is minimal. The only declared input is state_json: a multiline STRING widget holding JSON with current (name/width/height/ratio), selected_id, and a snapshot of the selected preset. The Width / Height / Ratio / Name fields you see are a DOM widget drawn by web/aspect_manager.js; every keystroke writes back into that hidden string. Outputs are width and height, both INT - wire them into Empty Latent Image, a resize node, anything that takes a width and height. In API-format JSON you'll see one string in, two ints out, which is exactly what it is.
The ratio parser takes 4:3, 16/9, 1.5:1 - colon, slash or an x - and the calculated side is rounded to the nearest whole pixel. The backend re-reads current.width/current.height each run, and IS_CHANGED returns the state string, so changing a preset correctly invalidates the cache downstream instead of silently reusing the last latent.
The bit I'd keep it for is the workflow snapshot: the selected preset is embedded in the workflow, so a workflow you send someone reproduces the same dimensions even if their install has never heard of your preset library.
Installing
ComfyUI Manager: search Kemmy Aspect Manager and install (registry id cn-03-kemmy-comfyui-aspect-manager, publisher kemmy). Manual, which is what the README documents:
cd ComfyUI/custom_nodes
git clone https://github.com/kemmy2302/cn_03_kemmy_ComfyUI-AspectManager
Restart ComfyUI and add it from kemmy → Dimensions → cn_03_kemmy_Aspect Manager. There's no requirements.txt and nothing to download - pyproject.toml lists zero dependencies, and the aiohttp/PromptServer imports are already in ComfyUI. The panel is a frontend DOM widget, so use a ComfyUI frontend from the last year or two; an ancient fork gives you a bare node with no UI.
Presets land in ComfyUI/user/kemmy_aspect_manager/presets.json, pre-seeded with five SDXL-family entries (1024², 832×1216, 768×1344, 1216×832, 1344×768) - all legitimate SDXL training ratios, which is the point.
Where people get burned
It does not snap anything. The README says so outright, and it means a 16:9 calculation from width 1344 hands you 756 - fine on SDXL-family checkpoints, not a multiple of 64, which is what Flux.1 wanted. Do the rounding yourself, because nothing downstream will catch it. Generating off a model's native resolution is still the number-one cause of duplicated anatomy and stretched limbs (docs/knowledge/troubleshooting.md).
width must be a positive integer. Leave a side blank, hit Queue before the field ever lost focus, and the backend gets an empty string and errors. Click Calculate missing side first. Same error if you type 1024.5 or 0.
"Both dimensions are already set." The calculator refuses when both sides have values - deliberate, but it confuses people. Clear the side you want recalculated.
Blank panel, or Save preset does nothing. The panel reads and writes through /kemmy-aspect-manager/presets. If that route didn't register, the status line falls back to Using workflow snapshot: ... and saving fails. Check that request in devtools; a 404 there is the tell. Saving also stalls if the ratio field is malformed, since it needs a calculable side before it stores anything.
The library is per-install, not per-workflow. Each Aspect Manager node caches its own copy of the list at load, so a preset saved from one node leaves the other stale until you hit Reload. And Delete only touches the shared file - workflows you already saved keep their embedded snapshot and keep running.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| state_json | STRING | {"version": 1, "selected_id": null, "current": {"name": "", "width": 1024, "height": 1024, "ratio": "1:1"}, "snapshot": []} | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |