Load Image from Asset
Pull an image from your ComfyTV project library without touching the input folder
- image
If you've spent any time in ComfyUI you know the drill: every image has to sit in the input folder before a loader can see it. ComfyTV's whole bet is that this is backwards - media should live in a project, not a directory. Load Image from Asset is the node that makes good on it. Drop it, click the body to open your project's asset library, pick an image, and it's wired into the graph. No file moves, no folder scan, no "did I drop it in the right instance" moment.
This is one of a family of asset loaders (image, video, audio, 3D model) that ship in ComfyTV's Input group. They're the ComfyTV-flavored version of the plain LoadImage you already know, and honestly the reason they exist is the project model: ComfyTV stages belong to a project, every output is kept with full history, and the asset library is where you park things you want to reuse across workflows. If you're not using projects yet, the classic ImageLoaderStage (reads from ComfyUI/input) is the lighter option.
How it works
Mechanically it's about as simple as a node gets: picking an asset in the node body writes its payload URL into an internal asset_url field, and the stage emits that URL as a COMFYTV_IMAGE. Everything downstream that takes a COMFYTV_IMAGE wire - the generate-to-video stages, the image editors, the compositor - consumes it from there.
You'll notice the schema is almost all "internal" inputs: project_id, parent_output_id, asset_url, asset_id, and category all carry tooltips saying they're populated by the frontend and only for lineage/debug. That's not a bug - these stages are driven from the node body and the ComfyTV sidebar, not by typing into widgets. The one you might actually touch is category, which is just the last-selected filter so the library opens where you left it.
The single output is image (type COMFYTV_IMAGE). That's what you wire into anything that wants a picture.
Installing ComfyTV
ComfyTV is one pack with ~190 stages, so installing this node means installing the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Then fully restart the ComfyUI backend (not just a browser refresh) and the stages appear under the ComfyTV category. ComfyUI Manager can also find it by searching "ComfyTV". Good news for a pack this size: it ships zero extra Python dependencies - it rides on the PyAV/FFmpeg, numpy, and scipy that ComfyUI already bundles. No model downloads for the loader stages either.
One genuine gotcha the README calls out: on macOS, ComfyUI Desktop, or multi-install setups, the relative cd above can land you in the wrong instance (symptom: clone succeeds, nodes never show up). Find the running instance's base path in its startup log and clone by absolute path, quoting it if it has spaces or parentheses. After cloning, confirm ComfyTV/__init__.py exists - if you see a nested ComfyTV/ComfyTV, move the inner folder up one level.
Common issues
- The library doesn't show the asset. Check which project you're in - the asset library is per-project. If the file is in ComfyUI's
inputfolder instead, use the plain Load Image stage instead of this one. - Nothing appears in the Add Node menu. Almost always the install-target problem above, or a browser-only refresh. Quit and relaunch the backend.
- Your classic workflow still works fine. This stage lives inside ComfyTV's project canvas; you can't wire a plain
LoadImageoutput into aCOMFYTV_IMAGEinput, and vice versa. They're different types on purpose - the pack keeps its own typed wires so stages chain predictably.
It's not the most exciting node in the pack, but it's the one that makes the project model feel natural. Once you're running multi-stage ComfyTV flows, every workflow starts with one of these pickers, and you'll miss it the day it's not there.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| asset_url | STRING | Internal — payload URL of the asset picked in the node body. Becomes this stage's output. | |
| asset_id | INT | 00–2147483647 | Internal — library id of the picked asset (lineage/debug only). |
| category | STRING | all | Internal — last-selected category filter, persisted so the node remembers it. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | COMFYTV_IMAGE | — |