Core Concepts
This guide explains the core concepts of Kumiho Cloud and how they relate to the Dart SDK.
Graph-Native Architecture
Kumiho Cloud is built on a graph database (Neo4j), which means relationships between assets are first-class citizens. Unlike traditional file-based systems, Kumiho tracks:
Dependencies: What assets does this asset depend on?
Lineage: What was this asset created from?
Usage: Where is this asset used?
┌───────────────────────────────────────────────────────┐
│ PROJECT │
│ ┌─────────────────────────────────────────────────┐ │
│ │ SPACE │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ ITEM │────▶│ ITEM │────▶│ ITEM │ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
│ │ │ │ │ │ │
│ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ │
│ │ │REVISION │ │REVISION │ │REVISION │ │ │
│ │ │ v1 │ │ v1 │ │ v1 │ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
│ │ │ │ │ │ │
│ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ │
│ │ │ARTIFACT │ │ARTIFACT │ │ARTIFACT │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────┘
Entity Hierarchy
Project
A Project is the top-level container representing a production, show, or workspace. Each project is isolated within a tenant’s graph database.
final project = await client.createProject(
'sci-fi-short',
description: 'Sci-fi short film VFX assets',
);
Key attributes:
name: URL-safe identifier (used in Kref URIs)description: Human-readable descriptionkref: Reference URI (kref://sci-fi-short)
Space
A Space organizes assets within a project. Common groupings include:
By type:
characters,environments,propsBy episode:
ep01,ep02By department:
modeling,animation,lighting
final space = await client.createSpace('/sci-fi-short', 'characters');
Key attributes:
name: URL-safe identifierpath: Full path in the hierarchy (e.g.,/sci-fi-short/characters)metadata: Custom key-value metadata
Item
An Item represents a single creative asset or AI artifact. Items have a kind that indicates what type of asset they are.
final item = await client.createItem(
'/sci-fi-short/characters',
'hero-robot',
'model',
);
Common item kinds:
model: 3D modelstexture: Textures and materialsanimation: Animation datarig: Character rigscomposite: Compositing setupsai_model: Trained AI modelsdataset: Training datasetsprompt: AI prompts
Key attributes:
name: URL-safe identifierkind: Category of the assetkref: Reference URI (kref://sci-fi-short/characters/hero-robot.model)
Revision
A Revision represents a specific iteration of an item. Revisions are immutable once published.
// Create a revision
final revision = await client.createRevision(item.kref);
// Create a revision with metadata
final revision = await client.createRevision(
item.kref,
metadata: {'artist': 'john', 'status': 'wip'},
);
Key attributes:
revisionNumber: Sequential version numbermetadata: Custom key-value metadatatags: Applied tags (e.g.,latest,published,approved)kref: Reference URI (kref://sci-fi-short/characters/hero-robot.model?r=1)
Artifact
An Artifact is a file reference attached to a revision. Kumiho follows a BYO-storage philosophy — files stay on your storage, only paths are tracked.
await client.createArtifact(
revision.kref,
'mesh',
'/mnt/assets/hero-robot.fbx',
);
await client.createArtifact(
revision.kref,
'textures',
's3://bucket/hero-robot/textures.tar',
);
Key attributes:
name: Artifact identifierlocation: File path or URI (file://, s3://, smb://, etc.)kref: Reference URI
Bundle
A Bundle groups related items or revisions together, useful for releases or delivery packages.
final bundle = await client.createBundle(
'/sci-fi-short',
'release-v1',
metadata: {'channel': 'beta'},
);
await client.addBundleMember(bundle.kref, item.kref);
await client.addBundleMember(bundle.kref, rigRevision.kref);
Kref URIs
Every object in Kumiho is addressable by a URI-style Kref (Kumiho Reference):
Entity |
Format |
Example |
|---|---|---|
Project |
|
|
Space |
|
|
Item |
|
|
Revision |
|
|
Artifact |
|
|
Edges (Relationships)
Edges represent relationships between revisions. Common edge types include:
Edge Type |
Description |
|---|---|
|
Asset requires another asset to function |
|
Asset was created from another asset |
|
Asset references another asset |
|
Asset contains another asset |
|
Asset was created using another asset |
// Create a dependency relationship
await client.createEdge(
modelRevision.kref,
textureRevision.kref,
EdgeType.dependsOn,
);
// Analyze impact of changes
final impact = await client.analyzeImpact(textureRevision.kref);
BYO Storage Philosophy
Kumiho does not store your files. Instead, it tracks references (artifacts) to files that remain on your storage:
Local filesystems:
file:///path/to/file.fbxNetwork shares:
smb://server/share/file.fbxCloud storage:
s3://bucket/path/file.fbx
This approach provides:
No egress costs: Files never leave your infrastructure
Flexibility: Use any storage that works for your pipeline
Control: Keep your data on your own storage solutions
Multi-Tenant Architecture
Kumiho Cloud is a multi-tenant SaaS platform:
Each organization is a tenant
Tenants are isolated in separate Neo4j databases
Regional deployment ensures data locality
The SDK automatically discovers your tenant’s region
// SDK handles tenant discovery automatically
final client = KumihoClient(host: 'api.kumiho.io', port: 443);
final tenantInfo = await client.getTenant();
print('Connected to tenant: ${tenantInfo.name}');