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
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).
| Crate | Depends on | Declared as |
|---|---|---|
kinogaki-math | kinogaki-studio-api | optional, behind the feature studio-sdk |
kinogaki-properties | kinogaki-studio-api | optional, behind the feature studio-sdk |
kinogaki-viewport-core | kinogaki-edit | a dependency |
kinogaki-viewport-core | kinogaki-geometry | a dependency |
kinogaki-viewport-core | kinogaki-viewport-api | a dependency |
kinogaki-viewport-gpu | kinogaki-geometry | a 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 ...
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.
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.
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.
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.
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.
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.
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.
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 ...
Pixel
Pixel is a realtime pixel-art render engine for Kinogaki Studio, Studio's second render engine.
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.
Spectre
Spectre, Kinogaki Studio's spectral path tracer, and the render engine on the SDK around it.
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.
Workflows
Tests alone: tests/workflows drives what a person does across the plugins the app ships, through the real editor offscreen.
App
Core
kinogaki-anim
Studio's animation channels.
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 ...
kinogaki-build-id
A fresh id each time the crate naming it is compiled.
kinogaki-capture-diff
Compares two sets of UI reference captures (tools/ui_captures.py compare BEFORE AFTER).
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.
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).
kinogaki-core-package
Core's own SDK package (kinogaki.core): what Studio holds whatever plugins are installed.
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.
kinogaki-editor
Kinogaki Studio's editor: the document and everything the window shows of it, as parts one frame borrows one by one.
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 ...
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.
kinogaki-image-pipeline
ImagePipeline: what renders become on screen and in files.
kinogaki-network
Studio's core networks (design: core-owned networks; "Cooking DAG for nodes is studio core").
kinogaki-plugin-host
Studio's plugin loader.
kinogaki-project
Studio's project files: a document as a Prism document.
kinogaki-render-geometry
The render side of Studio's standard geometry values: what render engines receive for them, whatever kernel made them.
kinogaki-scene
Studio's scene: the document cooked object by object.
kinogaki-scripting
Scripts over the standard values: lib-script's engine behind the SDK's ScriptEngine, and what a script sees of each value.
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.
kinogaki-shared
The crates Studio and its plugins share, built once as a Rust dylib.
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.
kinogaki-testkit
Kinogaki Studio's core testkit: toy packages written against the SDK alone, so core is tested with no real plugin.
SDK
kinogaki-edit
Kinogaki Studio's edit contracts: what core and the kernels agree on when a value is selected and changed.
kinogaki-geometry
Kinogaki Studio's standard geometry values.
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).
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.
kinogaki-studio-api
Kinogaki Studio's headless plugin API.
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 ...
kinogaki-studio-ui-api
Kinogaki Studio's UI layer for plugins.
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 ...
kinogaki-value
Kinogaki Studio's value model: the one way the SDK says what a value is and holds.
kinogaki-viewport-api
Kinogaki's viewport packet contract: what a data type hands Studio's viewport to draw, with no GPU or UI API.
Libraries
lib-color
Kinogaki's color science and color management.
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 ...
lib-image
The images, PNG and the compression under it for Kinogaki Studio, in Rust with no dependencies beyond std and no unsafe code.
lib-math
Kinogaki's math library, kinogaki-math: vectors, points, matrices, quaternions, affine maps, frames, and deterministic elementary functions.
lib-misc-utils
Kinogaki's own small crates: replacements for the helper crates in Kinogaki Studio's dependency tree.
lib-parallel
Scoped parallel phases over disjoint output slices for Kinogaki's libraries (crate kinogaki-parallel).
lib-prism
kinogaki-prism reads and writes Prism documents, Kinogaki's native file format, in Rust.
lib-render
The library of spectral data Kinogaki Studio's renderers share.
lib-script
The scripting language and engine behind Kinogaki Studio's Wrangle nodes: Studio's own version of VEX.
lib-svg
Kinogaki's SVG library.
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.
lib-viewport
Kinogaki's 3D viewport framework, shared by every geometry domain.
How the parts work together
An edit becomes a frame
An edit changes the document on the UI thread, is cooked on a worker, and comes back as packets that the viewport uploads and draws.
Undo
Undo belongs to the document.
The render path
A render starts as the cooked values of a scene's objects and ends as pixels in a Render view, a page on the 2D canvas or a file.
The image store
Core's image store is ImageFiles in kinogaki-scene: the document's one store of image files, on disk or embedded in the project.
Import and export
Every file format Studio reads or writes comes from a format plugin, a package that registers an SDK FileFormat.
Saving and loading a .kino
A project file is one Prism document, written and read by kinogaki-project.
How a plugin is found, loaded and offered
A plugin is a Rust dylib compiled against the same build of the shared library that Studio runs with.
