Save the whole node graph (nodes, connections and the canvas name) to a portable JSON file and re-import it later — live callbacks are stripped on export and restored on import.
Where: Media Gen header → canvas picker → Export Canvas / Import Canvas (the canvas right-click menu offers both too) — Click Export Canvas to download JSON, or Import Canvas to load a saved graph
Key ideas
- Function-stripped export: Export walks every node's data and drops function-valued fields (the live onRender/setQuality callbacks), keeping only serializable settings, result URLs, and connections. The file is { version, exportedAt, flowName, nodes, edges } — those key names are the stored format and did not change with the rename.
- Rehydration on import: Import parses the JSON, checks it has nodes and connections, then re-attaches the live callbacks so render and generate buttons work again. An invalid file alerts 'Invalid canvas file format'.
- Window-exposed handlers: The handlers are also published on window (fmoMediaGenExportFlow, fmoMediaGenTriggerImport, fmoMediaGenGetFlowState) so external UI or automation can trigger export/import and read a JSON-safe snapshot. The handler names keep the original wording.
Steps
- Open the Media Gen project whose graph you want to save.
- Open the canvas picker in the header and click Export Canvas; a JSON file named '<canvas-name>-<timestamp>.json' downloads.
- To restore or share, click Import Canvas and pick a previously exported JSON file.
- The canvas replaces its nodes and connections with the imported graph and restores the saved name; the same file can be re-imported.
- Run any render or generation node again — restored callbacks make the buttons live.
FAQ
Are my rendered videos/images embedded in the JSON?
No — render outputs are stored as uploaded URLs on the node data, so the JSON references those URLs rather than embedding the media bytes. The graph stays light.
Can an AI agent read the graph without exporting a file?
Yes — the bridge's get_flow_state action returns { activeFlowId, nodes, edges } as a shallow JSON-safe projection (the same shape window.fmoMediaGenGetFlowState exposes), and get_node reads a single node by id.