Studio Resolution & Aspect Master (Resolution, Latent & Safe Snap)
The Resolution & Latent Node That Replaces Half Your Setup
- width
- height
- empty_latent
- aspect_ratio
- megapixels
- target_upscale_w
- target_upscale_h
- info_text
Here's the thing nobody tells you about the ComfyUI-StudioPromptDirector pack: the prompt-building nodes are fine, but this one is the keeper. StudioResolutionMaster is a resolution controller and empty-latent generator in one, and it quietly replaces the pile of manual Empty Latent Image setups and "wait, why is my resolution not divisible by 8?" math that eats beginners' evenings. If you install this pack and only ever use one node, make it this one.
It does four jobs that are normally four separate nodes. It holds calibrated presets, flips orientation, snaps to safe multiples, and - the genuinely useful part - generates the latent tensor itself, in the right channel depth for whatever model you're running. Eight outputs: width, height, empty_latent, aspect_ratio, megapixels, target_upscale_w, target_upscale_h, and info_text. The upscale targets are pre-computed 2x values, which is a small thing that saves you an extra multiply node when you chain into an upscaler.
The preset table
preset_aspect has 21 entries spanning the normal stuff (1:1 1024, 16:9 1344x768, 9:16, 4:5, 3:2, anamorphic 2.39:1, 21:9, 32:9, 720p/1080p) plus the HiDream-O1 4MP native presets - 2560x1440, 2048x2048, 2304x1728, 3104x1312, 1440x2560. Those 4MP presets are worth having because HiDream-O1 forces high resolution; the model is baked to prefer 2048x2048 and generates noise if you try to sneak 1024 through it. There's also a "Custom Resolution" mode that activates the custom_width / custom_height sliders.
The three settings that matter
latent_type- the trap, and the reason this node exists. FLUX/FLUX.2 uses a 16-channel latent, standard SD/SDXL/Wan/Krea/LTX uses 4-channel, and HiDream-O1 is a 3-channel pixel-space tensor (it has no VAE at all - the latent is pixels at full resolution). Pick the wrong one and your sampler feeds the VAE nonsense it can't decode.divisibility_snap- snaps dimensions to multiples of 8/16/32/64. This is the "VAE-safe" guard in the README, and it's legitimately useful: VAE decode shape errors are the most common resolution failure in ComfyUI, and the community standard is multiples of 16 universally, 64 for FLUX/Wan strict.orientation- a one-click width↔height swap for portrait/landscape, andscale_multiplierfrom 0.5x draft up to 4x "8K" - though for a beginner, 0.5x for fast drafts and 1.0x for real work covers most of it. The snap and scale math is applied in the right order (scale, then snap), so a 0.5x 1344x768 draft snaps to a clean 672x384, not 671x384.
Install
Pure Python, no dependencies, no model files - this is the rare ComfyUI pack that installs clean with nothing else to download:
cd ComfyUI/custom_nodes
git clone https://github.com/nexusfinancial-dev/ComfyUI-StudioPromptDirector.git
Or search "ComfyUI-StudioPromptDirector" in ComfyUI Manager and restart. It lands under the StudioPromptDirector category.
Wiring and gotchas
Wire width and height into your conditioning (and any width/height-aware nodes), and empty_latent into the sampler's latent input - it replaces the Empty Latent Image node outright. The info_text output is a plain-string status readout ("16:9 Cinema Landscape | 1344x768 (1.032 MP) | Scale: 1.0x | Snap: 16x | Latent: flux") that's handy to pipe into a text display so you know what the graph is doing. The failure modes are all downstream of the dropdowns: choose latent_type to match your checkpoint (16ch for FLUX, 4ch for SDXL/Wan/LTX, 3ch pixel-space for HiDream), and if a VAE throws a shape error, snap harder - that's exactly what the guard is for. It's not flashy, but it's the node that stops a whole class of beginner meltdowns.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| preset_aspect | COMBO | 16:9 Cinema Landscape (1344x768) | Select a calibrated cinematic or photographic aspect ratio preset |
| orientation | COMBO | Standard (As Defined) | 1-click toggle to swap width and height for instant portrait/landscape switching |
| scale_multiplier | COMBO | 1.0x (Native Resolution) | Resolution scale factor for draft previews or 4K/8K super-resolution targets |
| divisibility_snap | COMBO | Multiple of 16 (Universal Safe) | Automatically snaps pixel dimensions to safe multiples, completely preventing VAE decode shape errors |
| latent_type | COMBO | flux / flux2 (16-channel) | Channel depth for the built-in empty latent generator |
| batch_size | INT | 11–64 | Batch size for the generated empty latent |
| custom_widthopt | INT | 102464–8192 | Custom width used when 'Custom Resolution' preset is selected |
| custom_heightopt | INT | 102464–8192 | Custom height used when 'Custom Resolution' preset is selected |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| width | INT | — |
| height | INT | — |
| empty_latent | LATENT | — |
| aspect_ratio | FLOAT | — |
| megapixels | FLOAT | — |
| target_upscale_w | INT | — |
| target_upscale_h | INT | — |
| info_text | STRING | — |