Storage
Overview
Section titled “Overview”The Storage operator is a system-level helper that gives every LOPs operator a shared disk location for exporting files and a lightweight package registry to track what has been exported. It resolves the base storage folder from the LOPs system and maintains a .lops_storage_registry.json file that records which packages have been written to disk, their versions, paths, and source operators.
Key Features
Section titled “Key Features”- Centralized storage path — all operators resolve their export location from a single Storage Folder parameter, which defaults to the LOPs base folder
- Package registry — a persistent JSON registry that tracks exported packages by name, version, disk path, source operator, and timestamp
- Automatic persistence — registry changes are written to disk immediately on every register or unregister call
- Non-destructive unregister — removing a package from the registry does not delete the actual files on disk
Configuration
Section titled “Configuration”On the Storage page, the Storage Folder parameter controls where all LOPs exported files and packages are stored. By default it evaluates to the LOPs base folder (the same folder set on the main LOPs component). In most setups this does not need to be changed.
Pulse Refresh Registry to reload the package registry from the JSON file on disk. This is useful if the registry file was edited externally or if another instance of TouchDesigner modified it.
How Operators Use Storage
Section titled “How Operators Use Storage”Other operators interact with Storage through its promoted methods. The typical workflow is:
- An operator (e.g., a sidecar or bridge component) exports files to a subfolder inside the storage folder.
- The operator calls
RegisterPackageon Storage, providing a package name, version string, the absolute path to the exported folder, and optionally the TD operator path that performed the export. - Later, any operator can call
GetPackageInfo,GetPackageVersion, orGetPackagePathto check whether a package exists on disk and what version it is. ListPackagesreturns the full registry for inspection or debugging.UnregisterPackageremoves a package entry from the registry without deleting the files themselves.
Registry Format
Section titled “Registry Format”The registry is stored as .lops_storage_registry.json in the root of the storage folder. Each entry is keyed by package name and contains:
| Field | Description |
|---|---|
| version | Semver string for the exported package |
| path | Absolute disk path to the exported folder |
| source_operator | TD operator path that performed the export (if provided) |
| updated | Timestamp of the last registration |
Troubleshooting
Section titled “Troubleshooting”- Registry is empty after restart — The
Storage Folderparameter may not be resolving correctly. Confirm that the LOPs base folder is set on the main LOPs component. If the storage path is empty, the registry cannot be loaded or saved. - Registry shows stale entries — If files were manually deleted from disk, the registry still holds the old entries. Call
UnregisterPackageto clean them up, or edit the JSON file directly and pulseRefresh Registry. - Multiple TouchDesigner instances — The registry file is a simple JSON file with no file locking. If two instances write to it simultaneously, one write may overwrite the other. In multi-instance workflows, avoid registering packages from both instances at the same time.
Parameters
Section titled “Parameters”Storage
Section titled “Storage”op('storage').par.Storagefolder Folder Folder where VFS contents will be exported
- Default:
"" (Empty String)
op('storage').par.Updatelopstorage Pulse Export VFS contents to storage folder
- Default:
False
Changelog
Section titled “Changelog”v1.0.12026-03-27
- drop tool_vfs_claude_bridge reference and old Syncclaudebridge / version-check logic - add JSON-backed package registry (_registry, _load_registry, _save_registry) - add RegisterPackage, GetPackageInfo, GetPackageVersion, GetPackagePath, ListPackages, UnregisterPackage - registry persisted as .lops_storage_registry.json in storage folder
- Initial commit
v1.0.02025-10-06
Initial release of storage operator
Features:
- Virtual file system management for LOPs packages
- Claude Code Bridge integration with version checking
- Automatic version-based sync (only exports when VFS version > external version)
- Storagefolder parameter (expression-based, references op.LOP.Basefolder)
- Updatelopstorage function syncs all VFS packages to storage folder
Technical:
- Supports multiple tool_vfs operators for different packages
- Package-specific sync methods (currently: Syncclaudebridge)
- Version format: YYYY-MM-DD-hash (from git commit)
- Clean separation between dev tools and runtime operator