Getting Started
This guide will help you get started with the Kumiho Python SDK.
Installation
Install the Kumiho SDK using pip:
pip install kumiho
For development, install with the optional dev dependencies:
pip install kumiho[dev]
Authentication
Before using the SDK, you need to authenticate with Kumiho Cloud.
Using the CLI
The easiest way to authenticate is using the built-in CLI:
kumiho-auth login
This will:
Prompt for your Kumiho Cloud email and password
Cache your credentials in
~/.kumiho/kumiho_authentication.jsonAutomatically exchange for a Control Plane JWT
Programmatic Authentication
You can also authenticate programmatically if you have a Firebase ID token:
import kumiho
# Connect with explicit token
kumiho.connect(id_token="your-firebase-id-token")
Or use environment variables:
export KUMIHO_AUTH_TOKEN="your-control-plane-jwt"
import kumiho
# SDK reads from environment automatically
kumiho.connect()
Basic Concepts
Projects
Projects are the top-level containers for organizing your assets:
import kumiho
kumiho.connect()
# Create a new project
project = kumiho.create_project(
name="my-project",
description="My VFX Project"
)
# Get an existing project
project = kumiho.get_project("kref://my-project")
Spaces
Spaces organize assets within a project (e.g., by type, department, or episode):
# Create a space
space = project.create_space("characters")
# List spaces in a project
spaces = project.get_spaces()
Items
Items represent individual assets with their metadata:
# Create an item in a space
item = space.create_item(
item_name="hero",
kind="model"
)
# Or create directly from a project with a path
item = project.create_item(
item_name="hero",
kind="model",
parent_path="/my-project/characters"
)
# Get an item from a space
item = space.get_item("hero", "model")
# Or get from a project with a path
item = project.get_item("hero", "model", parent_path="/my-project/characters")
# Get an item by Kref
item = kumiho.get_item("kref://my-project/characters/hero.model")
Revisions
Revisions track changes to items over time:
# Create a new revision with metadata
revision = item.create_revision(
metadata={
"artist": "jane",
"notes": "Updated rigging for better deformation"
}
)
# Get a specific revision
revision = kumiho.get_revision("kref://my-project/characters/hero.model?v=2")
# Update metadata later
revision.set_metadata({"render_engine": "arnold"})
Artifacts
Artifacts are file references attached to a revision. Files stay on your local storage—Kumiho only tracks the location:
# Add a file artifact
artifact = revision.create_artifact(
name="hero_model.fbx",
location="smb://server/projects/hero/hero_model.fbx"
)
# Add metadata to the artifact
artifact.set_metadata({
"size": "1024000",
"checksum": "sha256:abc123...",
"format": "fbx"
})
# Get a specific artifact
artifact = kumiho.get_artifact(
"kref://my-project/characters/hero.model?v=1&r=hero_model.fbx"
)
Edges
Edges track relationships between assets for lineage:
import kumiho
# Get the target revision first
texture = kumiho.get_revision("kref://my-project/textures/hero_skin.texture?v=1")
# Create a dependency edge with optional metadata
edge = revision.create_edge(
target_revision=texture,
edge_type=kumiho.DEPENDS_ON,
metadata={"usage": "skin material"}
)
# Get outgoing edges
edges = revision.get_edges()
# Get incoming edges (what depends on this revision)
dependents = revision.get_edges(direction=kumiho.INCOMING)
Bundles
Bundles group related items together with an audit trail of membership changes:
# Create a bundle in a project or space
bundle = project.create_bundle("release-bundle")
# Or: bundle = space.create_bundle("character-bundle")
# Add items to the bundle
hero_model = space.get_item("hero", "model")
hero_rig = space.get_item("hero", "rig")
bundle.add_member(hero_model)
bundle.add_member(hero_rig)
# Get a bundle by name
bundle = project.get_bundle("release-bundle")
# Or: bundle = space.get_bundle("character-bundle")
# Or by kref: bundle = kumiho.get_bundle("kref://my-project/assets/release-bundle.bundle")
# List bundle members
members = bundle.get_members()
for member in members:
print(f" {member.item_kref}")
# View membership change history
history = bundle.get_revision_history()
Kref URIs
Kumiho uses a URI scheme called “Kref” to reference assets:
kref://project/space/item.kind?v=N&r=artifact_name
Components:
project: Project namespace: Space name within the projectitem: Item namekind: Item kind (model, texture, animation, etc.)v=N: Revision number (optional)r=artifact_name: Artifact name (optional)
Examples:
kref://my-project # Project
kref://my-project/characters # Space
kref://my-project/characters/hero.model # Item (latest revision)
kref://my-project/characters/hero.model?v=2 # Specific revision
kref://my-project/characters/hero.model?v=2&r=model # Specific artifact
Error Handling
The SDK raises specific exceptions for different error conditions:
from kumiho import KumihoError
try:
project = kumiho.get_project("kref://non-existent")
except KumihoError as e:
print(f"Error: {e}")
Best Practices
Use context managers: The SDK manages connections automatically, but you can use
kumiho.connect()explicitly for long-running scripts.Batch operations: When creating many assets, consider using transactions or batch APIs (coming soon).
Store file metadata: Always include checksums and sizes for artifacts to enable integrity verification.
Use meaningful names: Project, space, and item names become part of Kref URIs, so use URL-safe, descriptive names.
Track lineage: Use edges to track dependencies between assets for full provenance.
AI Assistant Integration (MCP)
The Kumiho SDK includes a Model Context Protocol (MCP) server that lets AI assistants like GitHub Copilot and Claude interact with your Kumiho assets directly.
Quick Setup
Install with MCP support:
pip install kumiho[mcp]
Authenticate:
kumiho-auth loginAdd to VS Code settings.json:
{ "mcp": { "servers": { "kumiho": { "command": "kumiho-mcp" } } } }
Once configured, you can ask your AI assistant questions like:
“List all my Kumiho projects”
“What assets depend on the hero model?”
“Create a new revision for kref://film-2024/characters/hero.model”
For full documentation, see the MCP Integration Guide.
Next Steps
Read the Concepts guide for deeper understanding
Learn about MCP Integration for AI assistant support
Explore the API Reference for all available methods
Check out Examples