Studio and Graph
Fundamentals
The reference for the application itself: its window, its panels, the graph editor, what travels on a wire, and how your work is saved.
This is the reference for the application itself - the window, its panels, the graph canvas, and the files it reads and writes - not for any individual node. Node behaviour is documented node by node elsewhere; these pages explain the shell everything runs inside, once, so the node pages do not have to repeat it. For a fast walkthrough instead of a reference, see Getting Started.
- The Window - the menu bar, the main toolbar, the document tab strip, and the Welcome screen.
- Panels - the six dockable panels, what each one shows, and how docking and layout behave.
- Working in the Graph - navigating the canvas, the Add Node menu, comment boxes, search, the minimap, and subgraphs.
- Nodes and Wires - reading a node card, the out-of-date rule, and the rules that govern wiring.
- Pins and Data Types - what a pin is, and the full set of data types that travel across wires.
- Files, Autosave and Recovery - the .mmgraph format, saving, autosave, crash recovery, and node presets.
Studio and Graph › Fundamentals
The Window
The menu bar, the toolbar, the document tabs and the welcome screen, entry by entry.
The menu bar sits at the very top of the window, above the main toolbar and the document tab strip. Four pull-down menus, in this order: File (tooltip: "File operations"), Edit (tooltip: "Edit operations"), Window (tooltip: "Switch panels") and Help (tooltip: "Help and about").
This build has no Ctrl+S, Ctrl+N or Ctrl+O. New Graph, Open and Save exist only as menu entries and toolbar buttons - no File menu entry carries a keyboard shortcut.
Three groups, in this order: Graph, Node Sharing, Application.
Opening a file that is already open in another document tab does not open a second copy - it focuses the existing tab and shows the toast Already open: {filename}. Opening one of the shipped example graphs, from anywhere including Open... or Recent Files, never opens the shipped file in place - see the Welcome screen section below.
Recent Files lists up to five entries, newest first. Each row's label is the file's plain filename; its tooltip is the full absolute path. Clicking a row opens that file. If the file no longer exists, the app removes it from the list and shows the toast File no longer exists: {full path} - the list prunes itself rather than leaving dead entries behind. A file is added to the list both when it is opened and when it is saved, and reopening a file already in the list moves it to the top instead of duplicating it. When the list is empty, it shows a single, permanently disabled entry: No recent files.
This is the same list that fills the Welcome screen's Recent files column (see below).
Four groups: Selection, Clipboard, Organize, Application. Shortcuts are rebindable in Settings; the defaults are listed below.
One group, Panels. All five entries are check-box toggles whose tick reflects whether that panel's tab is currently open. None of them has a tooltip.
Target Viewport is deliberately absent from this menu. It manages itself and cannot be closed - see Panels. The Window menu is the only in-app way to reopen a panel you closed, aside from three gestures that auto-foreground one: activating a tool foregrounds Details, clicking a document tab foregrounds Graph, and a viewport capture foregrounds Viewport.
Eight entries, no section headings.
Main toolbar
A slim toolbar directly under the menu bar, in two sections separated by a divider. No button is ever disabled, and none has a keyboard shortcut.
Document tab strip
A separate row, below the toolbar, listing open .mmgraph documents - not panels.
- The tab label is the document's display name, bold when active. An asterisk
* is appended while the document has unsaved changes.
- The active tab gets a thin accent-coloured bar underneath it.
- Clicking a tab foregrounds the Graph panel (reopening it if it is closed), then switches documents.
- The x close button closes that document. Tooltip: "Close this graph"
- The + button, at the trailing end of the strip, opens a new untitled document. Tooltip: "Open a new graph in a tab"
A new tab's name is decided in this priority order: an explicit title if one was given, otherwise the graph's stored display name (from the .mmgraph file), otherwise the file's base name, otherwise Untitled-N, where N increases by one for each new untitled tab in the session.
Closing the last document does not leave you with nothing - a fresh untitled document is created automatically.
Switching tabs while a tool has unbaked edits prompts you first:
You have unsaved tool edits on the current node.
Yes - accept and bake the changes before switching.
No - discard the changes and switch.
Cancel - stay on this tab.
A similarly shaped prompt appears when closing a document or the app instead - see Files, Autosave and Recovery.
Welcome screen
The Welcome screen opens automatically at startup, unless you have ticked Don't show this again, and it never appears when the app was launched by double-clicking a .mmgraph file. It waits behind any startup modal (such as a graphics-device warning) before appearing. Reopen it any time with Help > Welcome.
It has two columns.
Start from an example (left column) lists one scrollable button per shipped example, its title in bold and its description underneath. Every button carries the same tooltip:
"Copies the shipped example into your Starters folder and opens the copy. The original in the app's Resources folder is never touched, and clicking again gives you another fresh copy rather than reusing the one you have been working in."
Opening an example always gives you a private copy. Clicking an example closes the Welcome window, then creates and opens a fresh copy in %LOCALAPPDATA%/MeshMorpher/Starters/. Clicking the same example again does not reuse that copy - it makes another one, suffixed -2, -3, and so on.
Below the list, a Browse the example files... button is visible only when the shipped .mmgraph files are actually on disk. It is the only button in the dialog that does not close it; its tooltip: "Shows the folder holding the example graphs as ordinary .mmgraph files, so they can be read, copied or shared. It is part of the installation, so treat it as read-only - open an example from the list above to get an editable copy."
Recent files (right column) mirrors the same list as File > Recent Files. When it is empty, it reads "Nothing yet. Graphs you open or save show up here." Otherwise it lists one button per recent file - filename in bold, folder underneath, full path in the tooltip - and clicking one goes through the same self-healing path as the menu entry. A bottom button, Open other graph... (tooltip: "Browse for a .mmgraph file."), closes the dialog and opens the normal Open dialog instead.
The footer holds three controls:
Studio and Graph › Fundamentals
Panels
What each of the six panels shows, how docking and layout behave, and how to get a closed panel back.
The six panels
All six panels live under one workspace category, Panels, and none of them can be turned into a floating sidebar drawer - they can only be docked, tabbed together, or torn off into a floating window.
Details
With nothing selected, Details reads:
Select a node to edit its properties
With exactly one comment box selected, it becomes a Comment Box editor: Text (multi-line), Color (with a Pick... button), Position (X/Y), Size (W/H), and a Delete Comment button.
A multi-selection clears the panel. With a single node selected, Details adds an Actions section of clickable node actions - this is where action nodes run, see the Introduction - plus a per-node timing readout once the node has run.
A property that is currently driven by a connected pin is locked, with this tooltip:
Driven by the "{0}" pin - disconnect it to edit this value.
Scene
Columns: a visibility check box, Object (the object's name plus a role line), and an Isolate button. The header strip reads {N} object(s) and carries a Show All button.
Roles: Edit target, Target pane, Reference (view only), Animation (view only), Extra (view only).
When the list is empty:
No objects in the preview.
The preview shows the mesh pins of the node selected in the graph. Select a node that carries a mesh to populate this list.
When it is not empty, a footer reads:
Rows come from the selected graph node's mesh pins, so this list changes with the graph selection. Tools edit the "Edit target" row only.
Other exact strings:
Visibility and isolate state reset every time the active document tab changes - they belong to the document, not to the app as a whole.
Docking
The panel area is a real dock area: panels can be resized, reordered, docked anywhere, tabbed together, and torn off into floating windows, in the packaged app and inside the editor alike.
Default arrangement: left column is Viewport, with Target Viewport as a closed second stack beside it; right column is Graph on top (70%) over a stack of Details / Agentic / Scene below (30%), with Details foregrounded.
Layout is remembered. The dock layout is written to MMAppLayout.json and flushed on window close, window deactivate (alt-tab) and window move. A saved layout that fails to parse falls back to the built-in default. Window position, size and maximised state are remembered too, though not while the window is minimised, and a saved size below 320x240 is rejected on the next launch. When Mesh Morpher is hosted inside the Unreal Editor, window geometry is not persisted.
Closing a panel does not destroy its state. Every panel wraps an existing widget, so closing its tab destroys only the tab shell - the panel and everything in it survives, and reopening it shows it exactly as you left it. Reopen a closed panel from the Window menu. Nothing reopens a closed panel on a passive event such as selecting a node - only three explicit gestures do: activating a tool foregrounds Details, clicking a document tab foregrounds Graph, and a viewport capture foregrounds Viewport. Floating panel windows are destroyed only on a real app or tab close, never on alt-tab.
Target Viewport manages itself. It opens by itself whenever the selected node has a "Secondary" preview mesh input pin - connected or not - or explicitly asks for it, and it removes itself when the selection changes to a node that does not. It starts empty until something is wired in, on purpose, so it does not pop open and shut while you make the connection. It has no close button, cannot be closed by middle-click, the tab-well menu or Ctrl+W, and does not appear in the Window menu at all.
There is no command to reset the layout back to the default arrangement. If your panels end up somewhere inconvenient, redock them by hand.
Studio and Graph › Fundamentals
Working in the Graph
Moving around the canvas, adding nodes, commenting, searching, and collapsing work into subgraphs.
Canvas navigation
Zoom ladder: the wheel steps through a fixed set of levels rather than a smooth range: 0.10, 0.15, 0.25, 0.375, 0.50, 0.625, 0.75, 0.825, 0.875, 0.925, 0.95, 0.975, 1.00, 1.125, 1.25, 1.50, 1.75, 2.00.
Framing never magnifies past 1:1. Pressing F snaps its target zoom down to the nearest level on that same ladder and caps it at 1.00, so framing a small selection never zooms in past actual size. Comments are only included in the frame when you frame the whole graph, not when you frame a selection.
Right-click empty canvas, or drop a wire onto empty canvas, to open it. Its header reads Add Node normally, or Compatible with {0} when it was opened by dropping a wire, where {0} is the pin category you dragged from (one of struct, float, int, bool, object, string, name, text, enum, byte, real, double, int64, vector3, wildcard, texture2d or generate_settings).
How search matches: typing in the search field filters live. A node matches if your text appears, case-insensitively, in its displayed title, its short name, its raw class name, its category path (so typing a category name surfaces everything under it - see the category map in the Introduction), or its tooltip. An installed node preset (see Files, Autosave and Recovery) matches on its title, author, category or description instead.
Below the search field: an Add Comment entry; an Insert Simulation Template submenu of ready-made cloth, garment and flesh setups, shown only when simulation nodes are enabled for this install and you did not open the menu by dropping a wire; an Installed Nodes submenu listing every node preset installed on this machine, shown only when at least one is installed (and never offered in wire-drop mode, because a preset's pin surface is not known without placing it); and finally the full node catalogue, a nested tree built from each node's category path, sorted alphabetically, with every category collapsible.
Compatible-with filtering: when you drag a wire out and drop it on empty canvas, only nodes that have at least one pin of the opposite direction whose category is compatible with the pin you dragged from are listed - including the schema's scalar-override coercion exception, and, for struct pins, only nodes whose pin names the same struct type. The picker never offers a node the connection would then refuse, and never refuses one the connection would have accepted.
Auto-wiring: picking a node this way wires it in the same gesture. The graph tries an exact struct-shape match first - so dragging from a Mesh pin prefers offering a Mesh pin over a Selection pin on the new node - then falls back to a category-only match.
Create one with C, Edit > Add Comment, the Add Node menu's Add Comment entry, or a node's right-click Add Comment Around Selection (see Nodes and Wires). A new box is titled Comment, coloured from the theme's info colour, and sized at least 60x40 free-standing (80x80 once you start resizing it).
Double-click the title bar to rename it in place. Drag anywhere on the body to move the box - this also moves every node it encloses. Drag an edge or corner to resize it. Right-clicking a comment does nothing special - the click falls through to the canvas, so pan and Add Node still work; text, colour, position, size and a Delete Comment button all live in the Details panel instead.
Comments live only at the top level of a graph - they are not drawn inside a subgraph card.
Find panel
Open it with Ctrl+F. It floats over the top-right of the canvas, with a field hinting Find node by title, class or comment; your previous query is pre-selected when you reopen it.
Press Enter in the field to jump to the best hit (not whatever the list happens to have selected); press Down to move focus into the results list instead. Esc closes the panel from the field, the list or the canvas. Each result row shows the node's title with its class name underneath, plus (in subgraph) when the node lives inside a collapsed card. The status line reads No matching nodes, or {0} of {1} nodes, and the list is capped at 50 results.
Clicking or entering a result selects that node, steps into any subgraph cards needed to reach it, and frames it - the panel stays open afterwards so you can try the next hit. Typing in the field never affects the canvas itself, so searching for a node named "Cone" cannot accidentally create a comment box.
Minimap
Bottom-right corner of the canvas, with a toggle button underneath labelled Hide Map or Show Map depending on its state. Tooltip: "Show or hide the graph overview map. Remembered between sessions." It is visible by default, and the setting is remembered between sessions.
It draws every node and comment as a small box (never smaller than 2 px), the selected node outlined, and a rectangle showing the current view. Click or drag on the map to jump the canvas there; right-click, middle-click and the wheel are swallowed so they never reach the canvas underneath, and a double-click is routed to the same jump rather than being able to split a wire beneath the map. The toggle button never takes keyboard focus, so clicking it does not steal focus from the canvas.
Copy, paste and duplicate
Ctrl+C or Edit > Copy copies the selection to the OS clipboard in an internal format, carrying every selected node's properties and pin bytes, the wires between them, and any selected comments. Copying a collapsed subgraph card copies its contents recursively. Only wires whose both ends are inside the selection are copied, and a selection larger than 512 MB is refused silently (logged, not shown).
Paste accepts either that internal format or a shared text envelope (from Copy as Shareable Text - see Nodes and Wires); if the clipboard holds a shared envelope, pasting opens the Import Node Preset dialog instead of placing nodes directly. A clipboard the app does not recognise shows the toast Paste failed / The clipboard does not contain a MeshMorpher node selection or a shared node's text.
Pasting from the menu is not the same as pasting with the keyboard. Edit > Paste always lands the pasted nodes near the top-left of the visible canvas, at a fixed graph position. Pressing Ctrl+V instead pastes at the view centre.
Ctrl+D or Edit > Duplicate copies the selection and pastes it at the view centre, offset by (40, 40) - duplicates appear in the middle of the view rather than beside the original.
Subgraphs
Collapsing: select nodes and right-click Collapse to Subgraph (or Collapse {N} Nodes to Subgraph). Wires that cross the boundary become pins on the new card; nothing already inside is rewired, and this is the only way to create a meaningful subgraph card - there is no equivalent entry in the Add Node menu.
Entering: double-click the card, or right-click it and choose Edit Subgraph Contents. Only that card's contents are drawn while you are inside it, your selection is cleared, and the editor restores that subgraph's own last pan and zoom rather than reframing.
Breadcrumb: a small bar at the top-left of the canvas reads GraphName > Card > Card, with every crumb except the current one a clickable button (tooltip: "Go back to this level."). The root crumb uses the graph's display name, or "Graph" if it has none; a card whose node has been deleted shows "Subgraph". The bar is entirely absent at the top level of the graph.
Leaving: press Esc, or click a breadcrumb - either way, the card you just stepped out of is left selected.
Promoted pins: right-click an interior pin's connector and choose Promote to Subgraph Pin to add a connector for it on the card, with or without a wire attached - see Nodes and Wires for the full set of pin-menu entries.
Nodes you create while inside a card - from the picker, a paste, a drop, or an Agentic tool - are adopted into that card even though the tools themselves always add at the top level first; you never lose track of something you just placed.
Deleting a subgraph card deletes its contents. It is still one undo step, so Ctrl+Z restores everything, but there is no separate "delete card only" option.
Copying a card copies its contents the same way. Select All, marquee-select and Frame all operate only on the subgraph scope you are currently viewing, never reaching into cards you have not entered.
Studio and Graph › Fundamentals
Nodes and Wires
The node card and its message strip, the rule that keeps an out-of-date result, and every reason a connection is refused.
The node card
The title bar is coloured by the node's category, may carry a small class icon, and shows the node's title - ellipsised if it is too long to fit, with the full title in its tooltip.
A small round ? button sits in the top-right corner of the title bar. Its tooltip: "View node documentation". Clicking it opens the Node Documentation window (see The Window) on that specific node's page.
The message strip is a coloured footer across the bottom of the card, visible only when the node has a message or a stale output to report. It has four severities: None, Info, Warning and Error, each with its own strip colour from the app's theme. The strip text always ellipsises to one line; the strip itself is the hover target, and its tooltip carries the full message.
The out-of-date rule, in full
When an input to a node changes after that node has already produced a result, Mesh Morpher does not throw the old result away. The message strip shows:
Inputs changed - re-run to update
in the warning colour, even though nothing has actually gone wrong. Hovering it shows the full tooltip:
This node's '{0}' output was computed from earlier input and is now out of date. It has been kept rather than overwritten - re-run the node to update it.
where {0} is the name of the affected output pin, or a comma-joined list if more than one pin is affected.
What this means in practice: the node's previous output is kept exactly as it was computed, not silently replaced by the new, unprocessed input. Press the node's own button under Details > Actions to recompute it and clear the flag.
The out-of-date flag is transient - it is never written into the .mmgraph file. See Files, Autosave and Recovery for what the file does and does not store.
Wiring rules
Connections are always stored output to input - see Pins and Data Types.
Ctrl+drag to move a wire: holding Ctrl and dragging from a wired connector picks up the far end of that wire instead of starting a new one. Nothing is broken until you release: the new connection is made first and the old one removed second, so dropping somewhere the connection is rejected leaves the original wire intact. Dropping back onto the pin you grabbed is a no-op. Dropping on empty canvas cancels the move without opening the Add Node menu, so the move can never accidentally duplicate the link. Because the gesture is decided the moment you press the mouse button, releasing Ctrl partway through cannot turn it into something destructive. The undo entry is labelled Move Link.
Dropping a wire on empty canvas instead opens the Add Node menu filtered to compatible nodes and auto-wires whatever you pick - see Working in the Graph.
Right-click a pin
If a pin has no wires and cannot be promoted to a subgraph pin, right-clicking it falls through to the canvas menu instead of showing an empty one.
Right-click a node
Right-clicking a node that is not already selected selects it first. The menu's title is the node's own title, or {N} Nodes when several are selected.
A node whose class this build cannot resolve is locked to select, inspect and delete only - Copy, Cut, Duplicate, Connections and Share are all left off its menu (this is the first of the two placeholder states below).
Two placeholder states
A node whose type this build does not have
When a saved graph references a node class this build cannot resolve, it loads as a placeholder instead of being dropped. Its title reads {LeafClassName} (unavailable), or plainly Unavailable Node if even the class name is missing, coloured a desaturated grey rather than error red. Its tooltip:
This node's type is not available in this build:
{ClassPath}
Its settings, pin layout and connections have been preserved exactly and will be written back unchanged when you save, so nothing is lost. The node cannot run, and its properties cannot be edited, until a build that provides the type opens the file.
This usually means the graph was made with a newer version, or with a feature that is not present here.
A node whose settings could not be restored
If a node's saved settings cannot be read back, it is badged red instead, with the tooltip: "This node's settings could not be restored from the saved file. Re-pick the source file or re-apply the node's settings."
Studio and Graph › Fundamentals
Pins and Data Types
Every kind of value a wire can carry, from meshes and DNA to weight maps and plain numbers.
What a pin is
A pin is a single typed connector on a node - an input, on the node's input side, or an output, on its output side. Connections are always stored output to input: the graph auto-orients a new wire based on which end is the output and which is the input, so it does not matter which pin you actually drag from. Most input pins accept a single wire, and dropping a second one replaces the first, though a few are declared to accept more than one - see Nodes and Wires for the full wiring rules.
A pin's category is what decides whether it can be wired to another pin at all. Drag a wire out into empty space and the Add Node menu that opens is filtered to nodes with a compatible pin, with its header reading Compatible with {0} - see Working in the Graph.
Pin types
The table below covers every data type currently used by a pin in the library. Counts are pin totals across the whole node library in the current build, not a fixed catalogue - they rise as nodes are added.
Mesh and geometry
Character types
Maps, textures and assets
Asset pins mostly belong to the editor-only nodes described in the Introduction, which read or write Unreal Engine assets: an engine asset has nowhere to live in Studio, which has no project underneath it.
Plain value types
Number covers what the schema internally calls float and double, and Whole Number covers int, int32 and int64 - those are implementation details, not labels you will see in the app itself.
Studio and Graph › Fundamentals
Files, Autosave and Recovery
What a .mmgraph holds, why opening one never runs anything, how autosave protects you, and how node presets are shared.
The .mmgraph document
A graph is saved as a .mmgraph file (file-dialog filter: Mesh Morpher Graph (*.mmgraph)). The current format is version 6; the loader also reads version 5 and upgrades it in memory, but always writes version 6 back out, and files older than version 5 will not load at all.
What is stored in it:
- the graph's stable internal ID
- the graph's display name - the same name set by Edit > Rename Graph... (see The Window), which is why the tab label and the Save dialog's suggested filename both survive a reopen
- graph variables
- comment boxes: id, text, position, size and colour
- every node: its class, its id, its canvas position, and its full property data (compressed since format version 6)
- every connection
- every pin's byte payload - meshes, textures and other bulk data live inside the document itself, addressed by a table of contents at the end of the file so large pins can be loaded lazily rather than all at once
What is deliberately not stored:
- the file's own path on disk, and whether the document has unsaved changes - both are decided fresh each time the file is opened
- a node's message, its severity, and its out-of-date badge - these describe your current editing session, not the saved document (see Nodes and Wires)
- undo history
- selection, pan, zoom, and which subgraph card you were inside
- runtime objects a node builds for itself, such as a decoded texture or a dynamic material - these are rebuilt when the file is opened
- app-level settings such as panel layout, window geometry, recent files, theme and minimap visibility - see the table at the end of this page
Opening a document never runs a node, reads an external file, or writes a pin. Loading a graph is contractually a restore, never a recompute. It must never write a pin's payload, mark the graph dirty, or trigger a render; and it must never read an external source file such as your FBX or PNG - re-reading the source is your job, via an explicit action button on the node. The app holds a flag for the whole duration of a load, so that an accidental violation trips a loud internal error rather than silently changing a saved result. There is one narrow exception: a Load Texture From File node caches its own source bytes, so the rule still holds for it, and only a graph saved before that cache existed falls back to reading the file from disk.
A node whose class this build cannot resolve is not dropped when the file loads - it is preserved as the placeholder described in Nodes and Wires, holding its original class and property bytes exactly, and writes them back unchanged the next time you save.
Save behaviour
Save always asks for a destination. There is no quick-save that writes silently over the current file.
Saving to a different file from the one the document came from gives the graph a new internal ID, so the old file and the new one never fight over the same autosave slot. The Save dialog's suggested filename follows the graph's display name, not its on-disk filename - so renaming a graph and then saving suggests the new name - but saving into a path with a different base name does not rename the graph back. On success you see the toast Saved {filename}; on failure, Save failed: {error}.
Unsaved-changes prompts
Closing a document tab, or the app, with unsaved changes:
"{name}" has unsaved changes.
Yes - save before closing.
No - close and discard the changes.
Cancel - keep it open.
Closing the app while a tool has unbaked edits:
You have unsaved tool edits on the current node.
Yes - accept and bake the changes before closing.
No - discard the changes.
Cancel - keep the app open.
Switching document tabs with unbaked tool edits shows a similarly shaped prompt with different wording - see The Window.
If the document already has a file on disk, Yes writes straight to it with no further dialog; a document that has never been saved goes through the normal Save dialog instead, and the window only actually closes once the graph is clean. A save that fails never lets the close proceed. Once every open tab has been resolved this way, any leftover autosave sidecars and scratch files for those documents are swept up, so nothing can resurrect itself on the next launch.
Autosave
Mesh Morpher autosaves every 300 seconds (5 minutes) by default, checked every 30 seconds; the interval is controlled by the console variable mm.AutosaveIntervalSeconds ("Seconds between autosave passes over dirty graphs. 0 disables autosave."). Every document with unsaved changes is snapshotted on each pass; a clean document has its snapshot deleted instead. A document whose mesh is mid brush-stroke is skipped for that one pass only - other open documents are still protected.
Where snapshots go:
- a document that has been saved at least once:
<its path>.autosave, next to the real file (for example MyGraph.mmgraph.autosave)
- a document that has never been saved:
%LOCALAPPDATA%/MeshMorpher/Autosave/<GraphId>.mmgraph.autosave
Every autosave write is atomic - written to a temp file, then swapped in - so an interrupted write can never corrupt the last good snapshot.
If autosave fails, you are told, not just logged. The message appears once per destination: Autosave failed for "{file}" ({reason}). This graph is NOT protected against a crash - save it somewhere writable.
Nothing is written from inside a crash handler by design - what survives a crash is only the last periodic snapshot that made it to disk.
The restore prompt on open
If a file's autosave sidecar is newer than the file itself, opening it asks first, in a dialog titled "Restore Autosave":
An autosave of "{filename}" is newer than the file itself (likely from an interrupted session).
Yes - open the autosave (Save afterwards to keep it).
No - open the file as last saved.
Yes opens the autosave content but keeps the real file as the document's home, and leaves the document dirty so you have to consciously Save to keep the recovered work. No back-dates the sidecar rather than deleting it - your autosaved bytes are kept on disk, but the prompt will not reappear on every future open. If the autosave cannot be staged for opening at all, the last saved version opens instead, with the toast "The autosave could not be prepared for opening, so the last saved version was opened instead. The autosave file has been left untouched."
Separately, unsaved pin edits are recovered from a per-graph scratch file: if any are found for a graph you are opening, a dialog titled "Recover Unsaved Edits" asks: {N} unsaved pin edit(s) from a previous session were found for this graph. Recover them?
At launch, after a crash
Documents that had never been saved when a previous session crashed are restored automatically into new tabs, with the toast Restored {N} unsaved graph(s) from autosave. A snapshot that cannot be read is not deleted - it is renamed with an .unreadable suffix and reported: {N} autosave snapshot(s) could not be read and were set aside as '.unreadable' in the Autosave folder. They are kept in case they can be salvaged, and will not be retried.
Node presets (.mmnode)
A .mmnode file is one or more nodes exported out of a graph, with a title, author, category, tags and description you fill in - file-dialog filter Mesh Morpher Node (*.mmnode). It uses its own file signature, deliberately distinct from a graph's, so opening the wrong file type gives a clear error rather than a confusing one.
Exporting
From a node's right-click menu (see Nodes and Wires): Export Node Preset... writes a file, Save to My Presets... installs straight into your local library. Both open the same dialog, with fields for Title (pre-filled with the node's title, or {N} Nodes for a multi-selection), Author (pre-filled with your OS user name), Category / Tags, and a multi-line Description. A live summary line reads {N} node(s), {bytes} bytes, or Cannot export: {reason} if the selection cannot be exported at all.
Exporting to a file opens an OS save dialog titled "Export Node Preset", defaulting to {Title}.mmnode; on success it toasts Exported / {Title} -> {path}. Installing to your library checks for an existing preset with the same identity first, and if one exists, offers Replace, Keep Both or Cancel, noting: "Either choice only affects My Presets. Any node you already placed from the current install is an independent copy in its own graph and is not touched."
Importing
Four routes, all ending at the same Import Node Preset dialog:
- File > Import Node...
- Drag a single
.mmnode file onto the app window or onto the graph canvas
- Paste a shared text envelope with
Ctrl+V
- Settings > Nodes > Import...
The dialog shows the preset's title, author, description, category and tags, what it contains (Contains: {N} node(s) - {friendly class names}), and a short file fingerprint. If the preset carries a Python script, it shows this warning:
"This preset contains a Python script. Nothing runs when you install or place it - scripts only ever run when you press Run. Read the script before you run it, the same way you would a downloaded file. Settings > Scripting can disable scripting entirely on this machine."
And this note always appears at the bottom of the dialog:
"Placing a node embeds a complete copy in your graph. Uninstalling later never changes graphs you have already saved, and a .mmgraph you share opens correctly for people who do not have this preset installed."
Two buttons decide what happens: Install ("Add this preset to My Presets, so it shows up in the Add Node menu on this machine.") and Add to This Graph Only ("Place this preset's node(s) here without installing anything." - disabled when there is no graph open to place it into).
Managing installed presets
Settings > Nodes lists everything installed, with Import... and Refresh buttons, and a per-preset Uninstall. Uninstall is disabled for presets that shipped with the app, with the tooltip "This preset shipped with the app and cannot be uninstalled."; for anything you installed yourself, its tooltip reads "Remove this preset from My Presets. Graphs you already placed it into are not affected." Confirming shows:
Uninstall "{Title}"?
This removes it from My Presets and the Add Node menu. Any graph you already placed it into keeps its own independent copy and is not affected.
Uninstalling a preset never changes a graph you already used it in. Placing a node from a preset always embeds a full, independent copy in that graph - the graph does not keep referring back to the installed preset afterwards.
The shipped presets live inside the app's own install; your own live at %LOCALAPPDATA%/MeshMorpher/NodePresets/ - you can drop a downloaded .mmnode there by hand, and subfolders are scanned recursively.
Where settings and user files live