Save Exp Data (PHM)
Turn a dialed-in expression into a reusable preset
- save_exp
- file_name
Getting a good expression out of Expression Editor takes real fiddling - a dozen sliders nudged just right for a specific smirk or a specific gasp. You don't want to redo that work by hand every time you need the same look. Save Exp Data is the save button: wire an expression into it once, and it becomes a file you can pull back into any future workflow with LoadExpData.
What it does
It's the write half of a save/load pair for the pack's EXP_DATA type - the numeric vector Expression Editor's sliders and ExpData's code/value pairs both produce. Give it a filename, feed it an expression, run it, and that expression exists on disk from then on. Think of it as a preset system for facial expressions: dial in "confident smirk" once, and every future project just loads it by name.
Inputs and outputs
There isn't much to it. The required field is file_name (a plain string - you name the file, the node handles the format). The one optional input is save_exp, an EXP_DATA connection - normally wired straight from Expression Editor's save_exp output, though anything producing EXP_DATA (ExpData, PrintExpData) works too. The output is file_name, passed straight through, useful mainly if something downstream wants to log or display which preset you just wrote.
This node is an output node - running it is a terminal action with a side effect, the same pattern as Save Image: it writes the file and that's the point of executing it.
Where the files go
The README calls this out directly: saved expressions land in ComfyUI\output\exp_data\. That's the folder to check if you want to back up a set of presets, rename one, or hand a preset file to someone else working on the same project.
Installing it
The pack registers with ComfyUI Manager - search ComfyUI-AdvancedLivePortrait and install, or clone it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait
Restart ComfyUI afterward. There's no separate dependency for this node beyond the base pack install.
Where people get stuck
The main trap is leaving save_exp unconnected. Run this node with nothing wired into save_exp and you'll still get a file - just not the expression you meant to save. Always trace the wire back to an Expression Editor (or ExpData / PrintExpData) node that's actually producing the pose you want before hitting run.
The other one: there's no versioning. file_name is just a string, and saving with a name that already exists silently overwrites the old file. If you're comparing a couple of takes on the same expression, change the filename each time - nothing here will warn you before it clobbers a previous save.
Beyond that, this node's whole job is being the other half of LoadExpData - the two are meant to be used as a pair, and neither does much of anything on its own.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| file_name | STRING | — | |
| save_expopt | EXP_DATA | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| file_name | STRING | — |