Skip to content

Storage

v1.0.1New

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.

  • 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

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.

Other operators interact with Storage through its promoted methods. The typical workflow is:

  1. An operator (e.g., a sidecar or bridge component) exports files to a subfolder inside the storage folder.
  2. The operator calls RegisterPackage on Storage, providing a package name, version string, the absolute path to the exported folder, and optionally the TD operator path that performed the export.
  3. Later, any operator can call GetPackageInfo, GetPackageVersion, or GetPackagePath to check whether a package exists on disk and what version it is.
  4. ListPackages returns the full registry for inspection or debugging.
  5. UnregisterPackage removes a package entry from the registry without deleting the files themselves.

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:

FieldDescription
versionSemver string for the exported package
pathAbsolute disk path to the exported folder
source_operatorTD operator path that performed the export (if provided)
updatedTimestamp of the last registration
  • Registry is empty after restart — The Storage Folder parameter 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 UnregisterPackage to clean them up, or edit the JSON file directly and pulse Refresh 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.
Storage Folder (Storagefolder) op('storage').par.Storagefolder Folder

Folder where VFS contents will be exported

Default:
"" (Empty String)
Update LOP Storage (Updatelopstorage) op('storage').par.Updatelopstorage Pulse

Export VFS contents to storage folder

Default:
False
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