Nodes/PSD Figure Creator/PSD Figure Creator
ComfyUI Node

PSD Figure Creator

Pose your PSD like a puppet instead of gambling on a ControlNet

By ketle-man·Created 3 months ago·Updated 2 months ago· 1
PSD Figure Creator
  • background_image
  • image
  • mask
psd_filename
layer_config{}
output_width512
output_height512
image_data

The pitch in one line: you rig a layered character PSD like a 2D puppet, pose it with your mouse, and get a clean IMAGE + MASK out the other end. No ControlNet skeleton, no IP-Adapter, no prompt roulette. If you already own a layered character file - a game sprite, a visual-novel character sheet, an illustration someone exported with the layers intact - this is the most deterministic posing tool you can bolt onto a ComfyUI workflow, because nothing is sampled. The pose you drag is the pose you get.

It's worth being clear about the philosophy here, because it sits at the opposite end of the spectrum from most of what r/comfyui recommends for characters these days. The community's pose answer moved to edit models and pose ControlNets, and those are great at re-inventing a pose. This node is for when you have the exact pose you want and just need it composited faithfully. Think of it as the "manual puppet" end of the character-consistency stack: you do the posing, ComfyUI gets a ready, transparent, correctly-layered frame to feed img2img, an editor model, or straight into a video pipeline.

How it works

psd-tools parses and composites the file server-side, while the actual rigging happens in a full-screen browser editor - the node's own web UI, registered from web/. Everything you do in that editor (visibility toggles, custom layer groups, rig points, poses, even a keyframe timeline) is serialized into a single layer_config JSON string. The node re-runs whenever that config changes (IS_CHANGED hashes it), so posing is just: drag, and the preview updates.

Rig points are the heart of it. R is rotation-only, MR moves and rotates, LSW is a layer switch (rotate a handle to step through up to 12 layer slots in 30° increments - this is how you swap one arm for another), and PSW stores full poses on a switch. There's even a keyframe panel: record poses at frames, and the node lerps positions linearly and interpolates angles by the shortest path. You can export the result as WebM or a transparent animated GIF. Yes, it can animate, and the animation gets saved right into the workflow JSON. That's a lot of feature for a node that shows up under the unassuming image/psd category.

The inputs that matter

  • psd_filename - path relative to ComfyUI/input/psd/. Note the subfolder: files dropped in plain input/ won't be found.
  • layer_config - the JSON from the editor. You never hand-write it; the editor does, and it travels with the workflow JSON.
  • output_width / output_height - default 512; set 0 for the native PSD size. Set just one and the other scales proportionally.
  • background_image - optional upstream IMAGE composited as the bottom layer (letterboxed, aspect preserved).

Outputs are image (RGB) and mask (alpha channel). That mask is the sleeper feature - wire it into a VAE encode or an inpainting setup and you can drop your posed character onto any generated background without cutting a single edge.

Installing it

ComfyUI Manager → search "PSD Figure Creator", or clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/ketle-man/PSD-Figure-Creator
pip install "psd-tools>=1.9.0"

Restart ComfyUI and it appears under image/psd → PSD Figure Creator. The full dependency list is literally that one psd-tools line - no model downloads, no torch extras. The only "asset" you need is your own PSD, and a ready-made sample rig ships in user_data/ if you want to poke before committing.

Where people get burned

  • Missing PSD on a new PC. PSDs live in ComfyUI/input/psd/ and the library lives in the node's user_data/ - you have to copy both separately. If a workflow loads but the file is gone, you'll see "Failed to fetch layer info"; press Setup and re-select via Open PSD (v0.5.2+).
  • Console spam. [INFO] Unknown image resource 1092 / Unknown tagged block: <Tag.CAI> - these are informational psd-tools notices about metadata it doesn't recognize (like Photoshop's Generative Fill tag), not errors. The file still composites fine; ignore them.
  • Stale captures. The Capture → Queue Prompt button bakes the canvas to a base64 PNG through the image_data input. Change a layer after capturing and the baked frame is what queues - re-capture or edit in the node.
  • Upgrading from the old PSD Loader (≤ v2.16): swap the "PSDLoader" node name in your workflow JSON for "PSDFigureCreator".

One honest caveat: this is a niche, single-author node (6 impressions at the time of writing), so don't expect a big tutorial ecosystem. But the README is genuinely thorough - clipping-mask handling, parent hierarchies, the whole layer_config schema are documented. For the job it does, nothing else in the ecosystem does it as directly.

Categoryimage/psd

Inputs (6)

NameTypeDefaultDescription
psd_filenameoptSTRING
layer_configoptSTRING{}
output_widthoptINT5120–8192
output_heightoptINT5120–8192
image_dataoptSTRING
background_imageoptIMAGE

Outputs (2)

NameTypeDescription
imageIMAGE
maskMASK