Architecture

What Studio is made of

The graph shows every part of Kinogaki Studio in layers, from the bottom up: the libraries, the SDK plugins compile against, core and the app. The plugins are a band of their own above: the app loads them at run time, and they reach Studio through the SDK and the kit (kinogaki-shared, the core crate that holds the SDK for them).

Each box opens its page: a library's or a plugin's repository, or a crate of the SDK or core, with its modules, public types, size and every dependency both ways. Point at a box to see the edges it has; an edge another path already implies is drawn only then.

Repositories
28
First-party crates
112
Rust lines
524k in src, 136k in tests
Third-party crates
67, frozen as source
Third-party Libraries SDK Core App Pluginsloaded at run time; point at one for its links third-party crates67 crates, frozen as source Kinogaki's color science and color management.lib-color2 crates · 11k lines Comp's operators and their GPU executor, beside Kinogaki Studio's Comp plugin (which holds the node types and compiles a network to a plan): plans of steps that turn a render engine's images (the beauty and its outputs, linear ACEScg, premultiplied, at each ...lib-composit2 crates · 3.0k lines The images, PNG and the compression under it for Kinogaki Studio, in Rust with no dependencies beyond std and no unsafe code.lib-image3 crates · 3.4k lines Kinogaki's math library, `kinogaki-math`: vectors, points, matrices, quaternions, affine maps, frames, and deterministic elementary functions.lib-math1 crate · 5.5k lines Kinogaki's own small crates: replacements for the helper crates in Kinogaki Studio's dependency tree.lib-misc-utils20 crates · 11k lines Scoped parallel phases over disjoint output slices for Kinogaki's libraries (crate `kinogaki-parallel`).lib-parallel1 crate · 558 lines `kinogaki-prism` reads and writes **Prism** documents, Kinogaki's native file format, in Rust.lib-prism1 crate · 6.1k lines The library of spectral data Kinogaki Studio's renderers share.lib-render1 crate · 461 lines The scripting language and engine behind Kinogaki Studio's Wrangle nodes: Studio's own version of VEX.lib-script7 crates · 17k lines Kinogaki's SVG library.lib-svg2 crates · 18k lines Kinogaki's UI framework: an immediate-mode UI (begun from egui 0.36.2, now owned code) with Kinogaki's own theme, icons, docking, numeric input and editor widgets.lib-ui5 crates · 97k lines Kinogaki's 3D viewport framework, shared by every geometry domain.lib-viewport3 crates · 13k lines Kinogaki Studio's edit contracts: what core and the kernels agree on when a value is selected and changed.edit5.5k lines Kinogaki Studio's standard geometry values.geometry19k lines MaterialX 1.39 for Kinogaki Studio: the material layer every engine, format and core share, in our own implementation (MaterialX's C++ library is a reference and a test oracle, never a dependency).mtlx4.6k lines Kinogaki's render interface: what a host (Studio) sends a render engine and what comes back, with no GPU or OS API.render-api9.2k lines Kinogaki Studio's headless plugin API.studio-api19k lines The SDK's test support (a dev-dependency only): [`assert_refused`] for admission tests, [`read_hostile`] for a format's tests of hostile files, [`format`](mod@format) for its scratch folders and round trips, [`workers`] as a host installs them, with `wgpu` an ...studio-api-testing2.9k lines Kinogaki Studio's UI layer for plugins.studio-ui-api8.7k lines The UI layer's test support (a dev-dependency only): headless fakes of the host's UI for plugin unit tests: [`RecordingUi`] and [`RecordingPainter`] record what a plugin asks to show and draw, and play back scripted user actions, with no window and no GPU ...studio-ui-api-testing2.6k lines Kinogaki Studio's value model: the one way the SDK says what a value is and holds.value2.7k lines Kinogaki's viewport packet contract: what a data type hands Studio's viewport to draw, with no GPU or UI API.viewport-api1.9k lines Studio's animation channels.anim492 lines B-reps as polygons, below the viewport, renders and file exchange alike: each body's mesh by the installed mesher, cached on its geometry ([`meshed`]), and a value's bodies joined into one polygons value ([`joined`]): each body's mesh, the faces' polygons ...brep-mesh466 lines A fresh id each time the crate naming it is compiled.build-id25 lines Compares two sets of UI reference captures (`tools/ui_captures.py compare BEFORE AFTER`).capture-diff357 lines Studio's color service: the OpenColorIO config (lib-color's built-in ACES 2.0 CG config, or a file), the working space, and the viewer's display, view, look, exposure and gamma.color-service991 lines Studio's core cooking engine, the same for every network kind (the owner's rule: the cooking DAG for nodes is core's).cook2.8k lines Core's own SDK package (`kinogaki.core`): what Studio holds whatever plugins are installed.core-package5.5k lines Studio's document: the scene, a tree of objects under one root, and the core network each object of a kind naming a context holds.document8.5k lines Kinogaki Studio's editor: the document and everything the window shows of it, as parts one frame borrows one by one.editor36k lines Geometry, curves and B-reps in the viewport, independent of any GPU API: the SDK's standard values as surface packets (over the SDK's display triangulation and shading normals, so Solid draws what Render renders), the one picker that answers rays and boxes ...geometry-view9.9k lines Studio's test harness: the real editor, its event routing and its background work, driven offscreen with only the packages a test names.harness1.6k lines `ImagePipeline`: what renders become on screen and in files.image-pipeline7.2k lines Studio's core networks (design: core-owned networks; "Cooking DAG for nodes is studio core").network11k lines Studio's plugin loader.plugin-host1.2k lines Studio's project files: a document as a Prism document.project6.0k lines The render side of Studio's standard geometry values: what render engines receive for them, whatever kernel made them.render-geometry880 lines Studio's scene: the document cooked object by object.scene8.7k lines Scripts over the standard values: lib-script's engine behind the SDK's [`ScriptEngine`], and what a script sees of each value.scripting2.5k lines The plugin SDK's UI layer over lib-ui: the SDK's [`Ui`](studio_ui_api::Ui) and [`Painter`](studio_ui_api::Painter), its sheets and the host's services, implemented over lib-ui.sdk-ui3.3k lines The crates Studio and its plugins share, built once as a Rust dylib.shared55 lines Timed spans of Studio's own work: where a frame, a cook or a render sync spends its time, without an instrumented build.spans208 lines Kinogaki Studio's core testkit: toy packages written against the SDK alone, so core is tested with no real plugin.testkit12k lines Kinogaki Studio: the editor in a window, after the plugins load.studio271 lines Comp for Kinogaki Studio: the node types that fill core's Comp context (Render Out, Levels, Grade, Hue / Saturation, Curves, Blur, Bloom, Merge, File Out; pictures come from core's Image node), the compiler from a network to a GPU plan, and the runner over ...Compnodes · 1.1k lines OpenEXR, with Cryptomatte, as a format plugin for Kinogaki Studio: an EXR file reads as one standard Image of the public studio-sdk, every part's channels its layers, and an Image writes as one EXR.OpenEXRformats · 4.8k lines FBX as a read-only format plugin for Kinogaki Studio: binary FBX 7.1–7.7 and ASCII FBX 7.x read into the standard values of the public studio-sdk, placed in the project's units and axes, every material in the MaterialX model its shader family records into.FBXformats · 5.2k lines glTF 2.0 and GLB for Kinogaki Studio, a format plugin on Studio's public studio-sdk: File ▸ Import and Export of `.gltf` and `.glb`, and the File node.glTFformats · 7.5k lines JPEG as a format plugin for Kinogaki Studio: a JPEG reads as one standard Image of the public studio-sdk, and an Image writes as one baseline JPEG.JPEGformats · 4.3k lines The Layout context for Kinogaki Studio: a page on the 2D canvas and the pieces arranged on it, images (core's Image node wired into Place Image: files, embedded files and live results) and text, written out as a picture.Layoutnodes · 1.1k lines MaterialX documents (`.mtlx`) as a format plugin for Kinogaki Studio: a document's materials read as Materials of the public studio-sdk, MaterialX networks of nodes with their files as Image nodes, and Materials write as one document.MaterialXformats · 141 lines Polygon modelling for Kinogaki Studio: the Mesh context, its object kind, its node types and its UI, with the toolset of Maya's Modeling menus and Houdini's polygon SOPs, and the Mesh kernel.Meshkernels/nodes · 49k lines Wavefront OBJ and MTL as a format plugin for Kinogaki Studio: an OBJ file reads as one standard Geometry of the public studio-sdk, its material libraries as MaterialX networks, and polygons and polylines write as one OBJ with the Materials they name as an MTL ...OBJformats · 4.7k lines Pixel is a realtime pixel-art render engine for Kinogaki Studio, Studio's second render engine.Pixelrenders · 8.7k lines PNG as a format plugin for Kinogaki Studio: a PNG reads as one standard Image of the public studio-sdk, and an Image writes as one PNG.PNGformats · 552 lines Spectre, Kinogaki Studio's spectral path tracer, and the render engine on the SDK around it.Spectrerenders · 25k lines Universal Scene Description as a format plugin for Kinogaki Studio: usda, usdc and usdz files read into the standard values of the public studio-sdk and written from them, stages composed, materials kept in every render context they are authored in.USDformats · 29k lines Workflowstests · 2 lines
depends on (arrows point at the dependency; an edge implied by others is left out)against the layers: a library depending on the SDKused by tests alone

Edges against the layers

The bands are the intended layers: libraries, then the SDK, then core, then the app. These crates of a lower band depend on crates of a higher one in the build (cargo metadata's resolve, with the features the workspace turns on).

CrateDepends onDeclared as
kinogaki-mathkinogaki-studio-apioptional, behind the feature studio-sdk
kinogaki-propertieskinogaki-studio-apioptional, behind the feature studio-sdk
kinogaki-viewport-corekinogaki-edita dependency
kinogaki-viewport-corekinogaki-geometrya dependency
kinogaki-viewport-corekinogaki-viewport-apia dependency
kinogaki-viewport-gpukinogaki-geometrya dependency

Plugins

Comp

Comp for Kinogaki Studio: the node types that fill core's Comp context (Render Out, Levels, Grade, Hue / Saturation, Curves, Blur, Bloom, Merge, File Out; pictures come from core's Image node), the compiler from a network to a GPU plan, and the runner over ...

2 crates · 1.1k lines

OpenEXR

OpenEXR, with Cryptomatte, as a format plugin for Kinogaki Studio: an EXR file reads as one standard Image of the public studio-sdk, every part's channels its layers, and an Image writes as one EXR.

2 crates · 4.8k lines

FBX

FBX as a read-only format plugin for Kinogaki Studio: binary FBX 7.1–7.7 and ASCII FBX 7.x read into the standard values of the public studio-sdk, placed in the project's units and axes, every material in the MaterialX model its shader family records into.

2 crates · 5.2k lines

glTF

glTF 2.0 and GLB for Kinogaki Studio, a format plugin on Studio's public studio-sdk: File ▸ Import and Export of .gltf and .glb, and the File node.

2 crates · 7.5k lines

JPEG

JPEG as a format plugin for Kinogaki Studio: a JPEG reads as one standard Image of the public studio-sdk, and an Image writes as one baseline JPEG.

2 crates · 4.3k lines

Layout

The Layout context for Kinogaki Studio: a page on the 2D canvas and the pieces arranged on it, images (core's Image node wired into Place Image: files, embedded files and live results) and text, written out as a picture.

2 crates · 1.1k lines

MaterialX

MaterialX documents (.mtlx) as a format plugin for Kinogaki Studio: a document's materials read as Materials of the public studio-sdk, MaterialX networks of nodes with their files as Image nodes, and Materials write as one document.

2 crates · 141 lines

Mesh

Polygon modelling for Kinogaki Studio: the Mesh context, its object kind, its node types and its UI, with the toolset of Maya's Modeling menus and Houdini's polygon SOPs, and the Mesh kernel.

5 crates · 49k lines

OBJ

Wavefront OBJ and MTL as a format plugin for Kinogaki Studio: an OBJ file reads as one standard Geometry of the public studio-sdk, its material libraries as MaterialX networks, and polygons and polylines write as one OBJ with the Materials they name as an MTL ...

2 crates · 4.7k lines

Pixel

Pixel is a realtime pixel-art render engine for Kinogaki Studio, Studio's second render engine.

2 crates · 8.7k lines

PNG

PNG as a format plugin for Kinogaki Studio: a PNG reads as one standard Image of the public studio-sdk, and an Image writes as one PNG.

2 crates · 552 lines

Spectre

Spectre, Kinogaki Studio's spectral path tracer, and the render engine on the SDK around it.

3 crates · 25k lines

USD

Universal Scene Description as a format plugin for Kinogaki Studio: usda, usdc and usdz files read into the standard values of the public studio-sdk and written from them, stages composed, materials kept in every render context they are authored in.

2 crates · 29k lines

Workflows

Tests alone: tests/workflows drives what a person does across the plugins the app ships, through the real editor offscreen.

1 crate · 2 lines

App

Core

kinogaki-anim

Studio's animation channels.

1 crate · 492 lines

kinogaki-brep-mesh

B-reps as polygons, below the viewport, renders and file exchange alike: each body's mesh by the installed mesher, cached on its geometry (meshed), and a value's bodies joined into one polygons value (joined): each body's mesh, the faces' polygons ...

1 crate · 466 lines

kinogaki-build-id

A fresh id each time the crate naming it is compiled.

1 crate · 25 lines

kinogaki-capture-diff

Compares two sets of UI reference captures (tools/ui_captures.py compare BEFORE AFTER).

1 crate · 357 lines

kinogaki-color-service

Studio's color service: the OpenColorIO config (lib-color's built-in ACES 2.0 CG config, or a file), the working space, and the viewer's display, view, look, exposure and gamma.

1 crate · 991 lines

kinogaki-cook

Studio's core cooking engine, the same for every network kind (the owner's rule: the cooking DAG for nodes is core's).

1 crate · 2.8k lines

kinogaki-core-package

Core's own SDK package (kinogaki.core): what Studio holds whatever plugins are installed.

1 crate · 5.5k lines

kinogaki-document

Studio's document: the scene, a tree of objects under one root, and the core network each object of a kind naming a context holds.

1 crate · 8.5k lines

kinogaki-editor

Kinogaki Studio's editor: the document and everything the window shows of it, as parts one frame borrows one by one.

1 crate · 36k lines

kinogaki-geometry-view

Geometry, curves and B-reps in the viewport, independent of any GPU API: the SDK's standard values as surface packets (over the SDK's display triangulation and shading normals, so Solid draws what Render renders), the one picker that answers rays and boxes ...

1 crate · 9.9k lines

kinogaki-harness

Studio's test harness: the real editor, its event routing and its background work, driven offscreen with only the packages a test names.

1 crate · 1.6k lines

kinogaki-image-pipeline

ImagePipeline: what renders become on screen and in files.

1 crate · 7.2k lines

kinogaki-network

Studio's core networks (design: core-owned networks; "Cooking DAG for nodes is studio core").

1 crate · 11k lines

kinogaki-plugin-host

Studio's plugin loader.

1 crate · 1.2k lines

kinogaki-project

Studio's project files: a document as a Prism document.

1 crate · 6.0k lines

kinogaki-render-geometry

The render side of Studio's standard geometry values: what render engines receive for them, whatever kernel made them.

1 crate · 880 lines

kinogaki-scene

Studio's scene: the document cooked object by object.

1 crate · 8.7k lines

kinogaki-scripting

Scripts over the standard values: lib-script's engine behind the SDK's ScriptEngine, and what a script sees of each value.

1 crate · 2.5k lines

kinogaki-sdk-ui

The plugin SDK's UI layer over lib-ui: the SDK's Ui and Painter, its sheets and the host's services, implemented over lib-ui.

1 crate · 3.3k lines

kinogaki-shared

The crates Studio and its plugins share, built once as a Rust dylib.

1 crate · 55 lines

kinogaki-spans

Timed spans of Studio's own work: where a frame, a cook or a render sync spends its time, without an instrumented build.

1 crate · 208 lines

kinogaki-testkit

Kinogaki Studio's core testkit: toy packages written against the SDK alone, so core is tested with no real plugin.

1 crate · 12k lines

SDK

kinogaki-edit

Kinogaki Studio's edit contracts: what core and the kernels agree on when a value is selected and changed.

1 crate · 5.5k lines

kinogaki-geometry

Kinogaki Studio's standard geometry values.

1 crate · 19k lines

kinogaki-mtlx

MaterialX 1.39 for Kinogaki Studio: the material layer every engine, format and core share, in our own implementation (MaterialX's C++ library is a reference and a test oracle, never a dependency).

1 crate · 4.6k lines

kinogaki-render-api

Kinogaki's render interface: what a host (Studio) sends a render engine and what comes back, with no GPU or OS API.

1 crate · 9.2k lines

kinogaki-studio-api

Kinogaki Studio's headless plugin API.

1 crate · 19k lines

kinogaki-studio-api-testing

The SDK's test support (a dev-dependency only): assert_refused for admission tests, read_hostile for a format's tests of hostile files, format for its scratch folders and round trips, workers as a host installs them, with wgpu an ...

1 crate · 2.9k lines

kinogaki-studio-ui-api

Kinogaki Studio's UI layer for plugins.

1 crate · 8.7k lines

kinogaki-studio-ui-api-testing

The UI layer's test support (a dev-dependency only): headless fakes of the host's UI for plugin unit tests: RecordingUi and RecordingPainter record what a plugin asks to show and draw, and play back scripted user actions, with no window and no GPU ...

1 crate · 2.6k lines

kinogaki-value

Kinogaki Studio's value model: the one way the SDK says what a value is and holds.

1 crate · 2.7k lines

kinogaki-viewport-api

Kinogaki's viewport packet contract: what a data type hands Studio's viewport to draw, with no GPU or UI API.

1 crate · 1.9k lines

Libraries

lib-color

Kinogaki's color science and color management.

2 crates · 11k lines

lib-composit

Comp's operators and their GPU executor, beside Kinogaki Studio's Comp plugin (which holds the node types and compiles a network to a plan): plans of steps that turn a render engine's images (the beauty and its outputs, linear ACEScg, premultiplied, at each ...

2 crates · 3.0k lines

lib-image

The images, PNG and the compression under it for Kinogaki Studio, in Rust with no dependencies beyond std and no unsafe code.

3 crates · 3.4k lines

lib-math

Kinogaki's math library, kinogaki-math: vectors, points, matrices, quaternions, affine maps, frames, and deterministic elementary functions.

1 crate · 5.5k lines

lib-misc-utils

Kinogaki's own small crates: replacements for the helper crates in Kinogaki Studio's dependency tree.

20 crates · 11k lines

lib-parallel

Scoped parallel phases over disjoint output slices for Kinogaki's libraries (crate kinogaki-parallel).

1 crate · 558 lines

lib-prism

kinogaki-prism reads and writes Prism documents, Kinogaki's native file format, in Rust.

1 crate · 6.1k lines

lib-render

The library of spectral data Kinogaki Studio's renderers share.

1 crate · 461 lines

lib-script

The scripting language and engine behind Kinogaki Studio's Wrangle nodes: Studio's own version of VEX.

7 crates · 17k lines

lib-svg

Kinogaki's SVG library.

2 crates · 18k lines

lib-ui

Kinogaki's UI framework: an immediate-mode UI (begun from egui 0.36.2, now owned code) with Kinogaki's own theme, icons, docking, numeric input and editor widgets.

5 crates · 97k lines

lib-viewport

Kinogaki's 3D viewport framework, shared by every geometry domain.

3 crates · 13k lines

How the parts work together