Build on an asset graph —
not a file dump.

Get stable identifiers, revision history, lineage edges, and events via SDKs — without standing up your own multi-tenant graph backend.

Quickstart in 2 minutes

Copy, paste, run. That is all.

quickstart.py
# Install
$ pip install kumiho

# Authenticate (uses cached credentials or env token)
import kumiho
kumiho.auto_configure_from_discovery()

# Create or resolve a project
project = kumiho.create_project("demo-project", "Demo Project")

# Organize assets by space
space = project.create_space("characters")

# Create an item (asset)
item = space.create_item("hero", kind="image")

# Register a new revision with metadata
revision = item.create_revision(
    metadata={
        "model": "sdxl",
        "prompt": "cinematic portrait, dramatic lighting",
        "seed": 18423,
        "tool": "ComfyUI"
    }
)

# Attach a file without uploading it
revision.create_artifact(
    name="output",
    location="/mnt/assets/hero_v01.png"
)

# Optionally link lineage
revision.create_edge(
    edge_type="CREATED_FROM",
    source_kref="kref://demo-project/characters/sketch.image?r=3"
)

print("Revision registered:", revision.kref)

This is the minimum to get lineage

Files remain in your storage

Every write emits events

Pick your pattern

Most developers map themselves to one of these

Plugin integration

Build plugins for DCCs, ComfyUI, or other creative tools. Capture context at generation time.

Maya • Houdini • Nuke • ComfyUI

Pipeline service

Batch ingest from render farms, processing queues, or CI/CD. Register outputs as they complete.

Render farm • Batch jobs • CI/CD

Product backend

Use Kumiho as the asset registry for your own app. Get versioning, lineage, and events out of the box.

Your app • SaaS • Internal tools

Technical details

The stuff you actually want to know

kref: Stable identifiers

Every asset gets a kref — a stable, human-readable URI:

kref://project/space/item.kind?r=revision

Reference assets across systems without brittle file paths. Krefs resolve to the latest revision by default, or pin to a specific version.

Revision immutability

Once created, revisions are immutable. You can:

  • Add metadata or artifacts to an existing revision
  • Create edges to/from a revision
  • Publish or archive a revision

You cannot modify content or delete history. This enables reproducibility and audit trails.

Edge types (depends_on, derived_from)

Edges express relationships between revisions:

DEPENDS_ONRuntime dependency — if source changes, target may need update
DERIVED_FROMLineage — target was created from source
REFERENCESSoft link — informational only

Traverse edges for impact analysis: "What depends on this?" or "What was this derived from?"

Event streaming

Every write operation emits an event:

  • item.created, revision.created, edge.created
  • revision.updated, revision.tagged, revision.deleted

Subscribe via webhooks or poll. Build reactive pipelines, feed AI agents, or trigger downstream automation.

Why not just use S3 + a database?

An honest comparison

What you needS3 + DBKumiho
Store bytes✓ Yes— BYO storage
Stable identifiersYou build it✓ kref built-in
Revision historyYou build it✓ First-class
Lineage / dependency graphYou build it✓ Native edges
Event streamingYou build it✓ Every write
Multi-tenant isolationYou build it✓ Built-in

Kumiho stores meaning, not bytes. You store the files. We track what they are and how they connect.

SDKs for real integrations

🐍

Python

pip install kumiho

⚙️

C++

vcpkg / CMake

🌐

REST API

FastAPI endpoints

🎯

Dart

pub add kumiho

Treat assets like objects with history.

Stop rebuilding revision tracking, lineage graphs, and event systems. Build your thing.

Developers — Build on an Asset Graph | Kumiho