Signal IR is the contract layer for turning any imported or generated file into typed signals before timeline, node graph, render, or export adapters decide how to use it.
The current implementation is the integrated architecture slice for issue #134:
src/signals/definesSignalKind,SignalAsset,SignalRef,SignalArtifact,SignalGraph,SignalOperatorDescriptor, guards, normalization helpers, and mappings from legacy media/node graph types.src/runtime/capabilities/defines fail-closed runtime capabilities such asfile.read,artifact.write,network.fetch,gpu.compute, andtimeline.mutate.src/extensions/defines provider manifests and a registry for discovering importer/analyzer/operator/renderer/exporter providers by file signature, signal kind, runtime, or capability.src/importers/defines the universal import orchestrator. CSV files becometable/metadata/binarySignalAssets, unsupported files become binary SignalAssets, and known legacy video/audio/image/model/vector paths remain on the established media pipeline.src/artifacts/defines content-addressed SHA-256 artifact storage with project-localCache/artifacts/...storage, IndexedDB manifest indexing, and an IndexedDB byte fallback for imports that happen outside an open project folder.src/runtime/worker/defines the capability-ready worker job host/client protocol for long-running runtime providers.src/runtime/wasm/defines the Wasm importer host adapter for direct and jco-style component exports.src/runtime/renderers/signalTimelineRendererAdapter.tsis the builtin timeline renderer dispatcher. It routes renderable SignalAssets to existing model or gaussian-splat clip paths when their artifacts can be materialized as files, and falls back to the text summary adapter otherwise.src/runtime/renderers/signalTextRendererAdapter.tsdefines the fallback text renderer adapter. It materializes SignalAssets as timeline text clips that summarize the selected signal ref and metadata, so previews, nested compositions, save/load, and export reuse the existing text render path.wit/masterselects/runtime.witdefines the versioned Wasm Component ABI starter package for importer providers.
The universal importer is connected to the Media Panel import flow. Signal imports appear as signal project items, can be organized, renamed, labeled, deleted, saved, and loaded with the project. Signal assets are draggable to video tracks through builtin renderer adapters. Renderable mesh/geometry artifacts with OBJ/glTF/GLB payloads create real model clips. Renderable point-cloud/geometry artifacts with PLY/SPLAT/KSPLAT/SPZ/SOG/LCC/ZIP payloads create gaussian-splat clips. Everything else falls back to the text-summary adapter. The resulting timeline clip keeps signalAssetId, signalRefId, and signalRenderAdapterId metadata while rendering through established clip render paths.
SignalAsset represents an imported file, generated asset, operator result, timeline output, or node graph output.
SignalRef represents a typed output of an asset or operator. Its kind can describe concrete media (texture, audio, mesh, point-cloud, table, document, vector) or control/data signals (metadata, event, time, number, boolean, string).
SignalArtifact represents persisted content-addressed output. The artifact contract includes a hash, size, MIME type, encoding, storage location, producer, source references, and creation time.
SignalOperatorDescriptor describes importer, analyzer, operator, renderer-adapter, and exporter providers without binding those providers to the main thread.
The compatibility mappings keep current concepts bridgeable:
| Existing type | Signal kinds |
|---|---|
| Video | texture, audio, metadata |
| Audio | audio, metadata |
| Image / Solid | texture, metadata |
| Text | text, texture, metadata |
| Model | mesh, geometry, metadata |
| Gaussian Splat / Avatar | point-cloud, geometry, metadata |
| Lottie / Rive | vector, texture, metadata |
| Composition | timeline, scene, metadata |
| CSV | table, metadata, binary |
| Unknown file | binary, metadata |
Unknown files now become valid binary SignalAssets instead of being rejected by the Media Panel import path.
Signal timeline placement is adapter-driven:
| Adapter | Signal refs | Timeline source |
|---|---|---|
masterselects.renderer.signal-model |
mesh, geometry, scene, binary with .obj, .gltf, or .glb artifacts |
model |
masterselects.renderer.signal-gaussian-splat |
point-cloud, geometry, scene, binary with .ply, .splat, .ksplat, .spz, .sog, .lcc, or .zip artifacts |
gaussian-splat |
masterselects.renderer.signal-text-summary |
fallback for all signal kinds | text |
The file-based adapters require the artifact bytes to exist in the project artifact cache or IndexedDB. memory or external artifacts that cannot be resolved still produce a usable text-summary clip instead of failing the drop/import workflow.
Capabilities default to denial. A provider can only run a job if its manifest grants every requested capability. Unknown providers and unknown capabilities fail closed.
No new generated-code or plugin path should execute in the main browser context. Worker and Wasm execution are the runtime boundaries for provider work; the current builtin CSV and binary importers are deliberately small host-side adapters used to connect the architecture before external providers are loaded.