Core and the app · crate
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.
- Repository
- Core and the app (kinogaki/studio-core)
- Folder
studio/core/document- Source
- 43 files, 8,481 lines
- Tests
- 14 files, 3,272 lines
What it is
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.
Objects. An object is a name unique beside its siblings, a transform and pivot, the outliner's flags, a tile position at its object level, its children and its body: core's Part, a package's ObjectBody or a Placeholder (an object no installed package reads, kept as its project held it). What a body is beyond that is its kind's (kinds); the document names no kind but the Part.
Sharing. Objects, bodies and networks are shared (Arc) between the document, undo snapshots and workers. Copying a scene copies one map of pointers; editing an object copies that object alone, and editing its network copies that network alone. Scenes compare by pointer first, so an unchanged snapshot costs nothing to compare.
The document (Document): the scene with its frame range, undo history and gestures, where the user is (Location), the selections and the packages' session slots. Document::transact is the one way the scene changes.
Packages. What is installed is core/network's registry (kinogaki_network::registry::install): one install per package admits its contexts, node types and data types there and its object kinds, stored values, slots and formats with them, which the document reads from the installed packages.
Depends on
| Crate | Repository | As | What it is |
|---|---|---|---|
kinogaki-anim | Core and the app | normal | Studio's animation channels. |
kinogaki-color-service | Core and the app | normal | 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-core-package | Core and the app | normal | Core's own SDK package (kinogaki.core): what Studio holds whatever plugins are installed. |
kinogaki-math | lib-math | normal | Kinogaki's vectors, points, matrices, quaternions and deterministic elementary functions. |
kinogaki-network | Core and the app | normal | Studio's core networks (design: core-owned networks; "Cooking DAG for nodes is studio core"). |
kinogaki-render-api | SDK | normal | 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 | SDK | normal | Kinogaki Studio's headless plugin API. |
For its tests alone
| Crate | Repository | As | What it is |
|---|---|---|---|
kinogaki-prism | lib-prism | tests | Prism documents for Kinogaki. |
kinogaki-testkit | Core and the app | tests | Kinogaki Studio's core testkit: toy packages written against the SDK alone, so core is tested with no real plugin. |
Third-party
| Crate | Version | Licence | Frozen in | As | Also used by |
|---|---|---|---|---|---|
thiserror | 2.0.21 | MIT OR Apache-2.0 | lib-ui/vendor | normal | kinogaki-lsystem, kinogaki-network, kinogaki-shared, kinogaki-ui-wgpu |
Used by
| Crate | Repository | As | What it is |
|---|---|---|---|
kinogaki-editor | Core and the app | normal | Kinogaki Studio's editor: the document and everything the window shows of it, as parts one frame borrows one by one. |
kinogaki-image-pipeline | Core and the app | normal | ImagePipeline: what renders become on screen and in files. |
kinogaki-project | Core and the app | normal | Studio's project files: a document as a Prism document. |
kinogaki-scene | Core and the app | normal | Studio's scene: the document cooked object by object. |
kinogaki-testkit | Core and the app | normal | Kinogaki Studio's core testkit: toy packages written against the SDK alone, so core is tested with no real plugin. |
Modules
clipboardCopy and paste of nodes and objects, after Houdini (P56).421 linesdocument(private)Document: the open document.418 linesdocument::edits(private)The document's edits that hosts and packages ask for by name: each oneDocument::transactstep (or part of the open gesture's).16 linesdocument::edits::clipboard(private)Copy, Cut, Paste and Duplicate where the user is: the picked items of the open network level, or the selected objects at an object level.116 linesdocument::edits::images(private)The scene's Image nodes' files as steps: a file embedded, embedded bytes written out (Scene::embed,Scene::extract).32 linesdocument::edits::import(private)Import where the user is: at an object level, a file's items as objects, the top-level ones selected, and a picture as an Image node in the root Images library; inside a network, a displayed File node reading the file, or an Image node reading a picture, or ...144 linesdocument::edits::keys(private)Keys of the open network's nodes' parameters and of objects' rows: setting and removing a key, and clearing a row's channel; and the edit rule on objects' rows: an animated row's edit is its key at the current time.259 linesdocument::edits::nodes(private)Edits of the network the location shows: adding, renaming, moving and deleting nodes, Freeze and Unfreeze, and Set Output.293 linesdocument::edits::objects(private)Scene-level edits: objects, their tree, names, flags and placements.268 linesdocument::edits::subnets(private)Subnets and assets in the open network: Collapse and Extract, the interface a subnet promotes, and Save as Asset, Make Unique, Make Main, Unpack, Update from Library and new instances.321 linesdocument::history(private)Undo: snapshots of the document, steps between them, and gestures.323 linesdocument::location(private)Where the user is in the scene, as one value: an object level, or a level of the network an object holds, or of the network a node of it holds (Description::inside, Houdini's matnet).238 linesdocument::picks(private)What is picked on the open network level: oneNodePicksfor whichever level is open, the same for every context (picks are the location's; no context filters them).110 linesdocument::placements(private)Placements: where the scene's objects are at the current time, and what their bodies hold, as a stamp;Placer: their world placements, placed again only where an edit moved them.156 linesdocument::slots(private)Session slots: state a package keeps per editing session, outside the project file (a component selection, a set of picks).117 linesdocument::transaction(private)Document::transact, the one way the scene changes, and theTransactionan edit is given.192 lineskindsObject kinds as the document reads them: core's Part, the kinds the installed packages declare (ObjectKindSpec), and the placeholder kind of an object no installed package reads.149 linesobject(private)Object: one scene object.339 linesobject::animated(private)An object's channels: keys on its placement's rows,translate,rotate,scaleandpivot, each a vector of three.99 linesobject::body(private)What an object is beyond what every object has: core's Part, a package's body, or a placeholder kept as read.90 linesobject::flags(private)The outliner's flag columns, per object: Lock, Visible, Template and Render (owner, 2026-10-16).109 linesobject::kind_rows(private)An object's kind rows: the values its kind holds in its body, keyed as<facet>.<name>beside its placement's rows.501 linesobject::sheet(private)An object's kind rows as its sheet shows them (Scene::kind_sheet): its Display Quality where its value is meshed for display, a render setup's own fields, then the rows of its kind's facet (Object::row, listed as kind_rows says).397 linesobject::transform(private)An object's local transform: scale, then rotation about X, Y and Z (degrees, each axis fixed in the parent's frame, Houdini's default SRT/XYZ order), then translation.108 linespathsScene paths: the one way a parameter names another node or object (Houdini's operator paths).76 linespaths::copies(private)Copies name the copies: a relative path from a copied node to something copied with it names that thing's copy (Houdini's rule).77 linespaths::fits(private)Whether a place is something a Reference row may name, in the SDK's terms (Fits): by object kind, by the data type of the result, or by the context of the network it holds or sits in.166 linespaths::follow(private)Paths follow what they name: after an edit that renames or moves things, every exact path is rewritten to name what it named before, absolute as absolute and relative as relative (Houdini's rule), an object row'sop:path among them.206 linespaths::opop:rows: where no wire reaches, a row of an object's kind that reads an image (a dome's) names an Image node byop:and its absolute path (OP, Houdini's spelling).202 linespaths::text(private)A path as text: absolute or relative, patterns, and the stored form.84 linespaths::walk(private)Walking the scene's tree of names: what each place holds, the place above it, and resolving and writing paths over them.322 linessceneScene: the objects, their tree under one root, and the project's settings.367 linesscene::adding(private)Adding objects:Scene::add, andAdding, many added in one go (an Import's).142 linesscene::assetsA scene's assets: the exact definitions its instances use, embedded in the project, one per name (Houdini's digital assets; the network side iskinogaki_network::Definition).395 linesscene::check(private)What every edit of a scene passes when it is committed, and what a locked object refuses.156 linesscene::files(private)The files on disk the scene's nodes name (Scene::files_named): what a host watches for changes, so a file written by another application is read again.35 linesscene::imagesThe scene's Image nodes as a whole: every one, wherever it is (Scene::images), a file embedded in them (Scene::embed) and embedded bytes written out for them (Scene::extract).161 linesscene::importA file's items as objects (Import): a group becomes a Part, a value an object of the kind that adopts it (ObjectKindSpec::adopts), each placed, shown and named as the file says.304 linesscene::names(private)Object names beside their siblings: a path names one object, so no two objects under one parent share a name.52 linesscene::tree(private)The scene's tree edits but adding (adding): remove, move, group, ungroup, duplicate and graft.259 linessettingsProject settings: what a unit is, which axis is up, the ground grid, how many decimals lengths show, and the installed packages' stored values of the project.141 linestimeThe scene's time: the frame range (start, end and frames a second) is the document's and undone with it; the current time is navigation, as the view is.100 lines
Public types and traits
At the crate root
Structs DocumentFlagsGridSettingsKindSheetNodePicksObjectPlacePlaceholderPlacementsPlacerProjectSettingsSceneSnapshotTransactionTransform
Enums BodyFlagGridModeLocationOpenedSwatch
Type aliases Worlds
Re-exported from other crates
From kinogaki_network NodeIdObjectId
By module: 45 public types and traits in 22 modules
clipboard ClipCopiedDestinationNetworkAtNodeLinkPasted
document Document
document::history Snapshot
document::location LocationOpened
document::picks NodePicks
document::placements PlacementsPlacer
document::transaction Transaction
kinds CreationKind
object Object
object::body BodyPlaceholder
object::flags FlagFlags
object::sheet KindSheetSwatch
object::transform Transform
paths HolderTarget
paths::follow Reference
paths::op ImageReadOpReadOpReference
scene PlaceSceneWorlds
scene::assets AssetAssetsMainPlace
scene::images ImageAt
scene::tree Duplicated
settings GridModeGridSettingsProjectSettings
time PacePlaybackSceneTimeTimeRange
Besides these, 14 public functions at module level.
