📂 SF Asset Loader
Reload your saved .fury renders — image and latent together — for refinements and variations
- image
- latent
StudioFury's save format is the .fury file - a torch.saved dict holding both the decoded image and the latent it came from. Asset Loader is the node that gets them back. Give it a project, a category, and a name, and it returns the IMAGE and LATENT you saved, so you can refinish, inpaint, or run variations without re-rolling the whole generation from scratch.
That "latent with it" part is the reason this format exists. A plain PNG gives you pixels; a latent gives you a starting point you can img2img from at low denoise, or mask-inpaint, or interpolate. The pack's whole persistence story is "save the technical file, keep the flexibility." The loader even handles the format's own version drift - files saved before a certain version used a preview_image key, and it falls back to that automatically.
Mechanically it's a thin, careful I/O node. It calls the shared FuryFileManager, which loads with torch.load(..., weights_only=True) - a genuinely good call, since it blocks arbitrary code execution from malicious pickle files. Given the ecosystem's history (the KB's writeup of the ComfyUI_LLMVISION malware incident is worth reading if you haven't), seeing a custom-node author explicitly use weights_only is a green flag. It also validates that the file is a dict with an image key, and - nice touch - it doesn't crash on a miss: if the file isn't there, it returns a black placeholder image and an empty latent with a console warning.
The inputs that matter:
- project_name - must match the project you created in the Project Manager, since files live under
output/StudioFury/<project_name>/. - asset_type -
CharactersorScenes, matching the folder the saver wrote to. - asset_name - the entity/render name, like
Hero_01. Note: it expects the name without the.furyextension (it tries both the bare name and the extension, so either works).
The outputs: image (IMAGE) and latent (LATENT). Wire latent into an img2img or inpaint path for refinement, or image into a preview.
Install
Part of StudioFury: ComfyUI Manager → ComfyUI-Studio-Fury → Install → restart, or:
cd ComfyUI/custom_nodes/
git clone https://github.com/FuryNocturn/ComfyUI-Studio-Fury
Dependencies are torch/Pillow/numpy/aiohttp - nothing extra to install.
Gotchas
Two things. First, the "empty on miss" behavior is silent-ish: a typo in asset_name gives you a black image and an empty latent, and if you don't read the console you'll think the render itself was black. Second - and this is the same wiring gap that trips up Scene Composer - this loader returns raw IMAGE + LATENT, it does not write anything onto the SF_LINK bus. The Scene Composer expects assets under bus["loaded_assets"], so you can't just drop an Asset Loader's output into a Composer. For refinement workflows that's fine: take the latent, run it through your own KSampler at low denoise, save the result. That's honestly where this node earns its keep.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| project_name | STRING | My_Movie_01 | — |
| asset_type | COMBO | 2 options: Characters, Scenes | |
| asset_name | STRING | Hero_01 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| latent | LATENT | — |