Project API
The Project class is the main entry point for working with ModelCub projects programmatically.
Overview
from modelcub import Project
# Create new project
project = Project.init("my-project")
# Load existing project
project = Project.load("my-project")
# Access properties
print(project.name)
print(project.config.defaults.device)
# Use as context manager (auto-saves)
with Project.load("my-project") as project:
project.config.defaults.batch_size = 32Static Methods
Project.init(name, force=False, path=None)
Create a new ModelCub project.
Parameters:
name(str): Project name (also used as directory name if path not specified)force(bool, optional): Overwrite existing project. Default:Falsepath(str, optional): Custom directory path. Default:./<name>/
Returns:
Project: Initialized project instance
Raises:
RuntimeError: If project initialization fails
Example:
from modelcub import Project
# Create project in ./my-project/
project = Project.init("my-project")
# Create in custom location
project = Project.init("my-project", path="/path/to/project")
# Overwrite existing project
project = Project.init("my-project", force=True)Project.load(path='.')
Load an existing ModelCub project.
Parameters:
path(str, optional): Path to project directory. Default:"."(current directory)
Returns:
Project: Loaded project instance
Raises:
ValueError: If path is not a valid ModelCub project
Example:
from modelcub import Project
# Load from current directory
project = Project.load()
# Load from specific path
project = Project.load("./my-project")
project = Project.load("/absolute/path/to/project")Project.exists(path)
Check if a ModelCub project exists at the given path.
Parameters:
path(str): Path to check
Returns:
bool:Trueif valid project exists
Example:
from modelcub import Project
if Project.exists("my-project"):
project = Project.load("my-project")
else:
project = Project.init("my-project")Properties
Project Information
project.name
Project name from configuration.
Type: str
project = Project.load()
print(project.name) # "my-project"project.created
Project creation timestamp (ISO 8601 format).
Type: str
project = Project.load()
print(project.created) # "2024-10-10T14:30:00Z"project.version
Project version.
Type: str
project = Project.load()
print(project.version) # "1.0.0"project.path
Project root directory path.
Type: Path
project = Project.load()
print(project.path) # PosixPath('/path/to/my-project')Configuration
project.config
Access project configuration object.
Type: Config
Example:
project = Project.load()
# Read config
print(project.config.defaults.device) # "cuda"
print(project.config.defaults.batch_size) # 16
print(project.config.defaults.image_size) # 640
# Modify config
project.config.defaults.device = "cpu"
project.config.defaults.batch_size = 32
# Save changes
project.save_config()Registries
project.datasets
Access dataset registry.
Type: DatasetRegistry
Example:
project = Project.load()
# List all datasets
datasets = project.datasets.list_datasets()
# Get specific dataset
dataset_info = project.datasets.get_dataset("my-dataset")
# Check if dataset exists
if project.datasets.exists("my-dataset"):
print("Dataset found")project.runs
Access training runs registry.
Type: RunRegistry
Example:
project = Project.load()
# List all runs
runs = project.runs.list_runs()
# Get specific run
run_info = project.runs.get_run("run-id-123")Directory Paths
project.modelcub_dir
Path to .modelcub/ directory.
Type: Path
project = Project.load()
print(project.modelcub_dir) # /path/to/project/.modelcubproject.data_dir
Path to data directory.
Type: Path
print(project.data_dir) # /path/to/project/dataproject.datasets_dir
Path to datasets directory.
Type: Path
print(project.datasets_dir) # /path/to/project/data/datasetsproject.runs_dir
Path to training runs directory.
Type: Path
print(project.runs_dir) # /path/to/project/runsproject.reports_dir
Path to reports directory.
Type: Path
print(project.reports_dir) # /path/to/project/reportsproject.cache_dir
Path to cache directory.
Type: Path
print(project.cache_dir) # /path/to/project/.modelcub/cacheproject.backups_dir
Path to backups directory.
Type: Path
print(project.backups_dir) # /path/to/project/.modelcub/backupsproject.history_dir
Path to version control history directory.
Type: Path
print(project.history_dir) # /path/to/project/.modelcub/historyMethods
Configuration Management
project.save_config()
Save configuration to disk.
Returns: None
Example:
project = Project.load()
# Modify settings
project.config.defaults.batch_size = 32
project.config.defaults.device = "cpu"
# Save changes
project.save_config()project.reload_config()
Reload configuration from disk.
Returns: None
Example:
project = Project.load()
# Config was modified externally
project.reload_config()
# Now has latest values from disk
print(project.config.defaults.batch_size)project.get_config(key, default=None)
Get configuration value by dot-notation key.
Parameters:
key(str): Dot-notation key (e.g.,"defaults.device")default(any, optional): Default value if key not found
Returns:
- Configuration value or default
Example:
project = Project.load()
# Get nested config values
device = project.get_config("defaults.device")
batch_size = project.get_config("defaults.batch_size")
# With default value
workers = project.get_config("defaults.workers", default=8)project.set_config(key, value)
Set configuration value by dot-notation key.
Parameters:
key(str): Dot-notation key (e.g.,"defaults.device")value(any): Value to set
Returns: None
Raises:
ValueError: If key path is invalid
Example:
project = Project.load()
# Set config values
project.set_config("defaults.device", "cuda")
project.set_config("defaults.batch_size", 32)
project.set_config("defaults.image_size", 1024)
# Don't forget to save!
project.save_config()Project Management
project.delete(confirm=False)
Delete the project directory.
Parameters:
confirm(bool): Must beTrueto actually delete
Returns: None
Raises:
RuntimeError: If confirm is notTrueor deletion fails
Example:
project = Project.load("my-project")
# Delete project (requires explicit confirmation)
project.delete(confirm=True)
# Check it's gone
assert not Project.exists("my-project")Context Manager
The Project class supports context manager protocol for automatic config saving.
Example:
from modelcub import Project
# Auto-saves config on context exit
with Project.load("my-project") as project:
project.config.defaults.batch_size = 32
project.config.defaults.workers = 16
# Config automatically saved here
# Verify changes persisted
project = Project.load("my-project")
assert project.config.defaults.batch_size == 32Complete Examples
Creating and Configuring a Project
from modelcub import Project
# Create new project
project = Project.init("cv-pipeline")
# Configure defaults
project.config.defaults.device = "cuda"
project.config.defaults.batch_size = 32
project.config.defaults.image_size = 640
project.config.defaults.workers = 8
# Save configuration
project.save_config()
print(f"Project created at: {project.path}")Loading and Inspecting a Project
from modelcub import Project
# Load existing project
project = Project.load("cv-pipeline")
# Print project info
print(f"Name: {project.name}")
print(f"Created: {project.created}")
print(f"Version: {project.version}")
print(f"Path: {project.path}")
# Print config
print("\nConfiguration:")
print(f" Device: {project.config.defaults.device}")
print(f" Batch Size: {project.config.defaults.batch_size}")
print(f" Image Size: {project.config.defaults.image_size}")
# List datasets
datasets = project.datasets.list_datasets()
print(f"\nDatasets: {len(datasets)}")
for ds in datasets:
print(f" - {ds['name']}: {len(ds.get('classes', []))} classes")Using Dot-Notation Config Access
from modelcub import Project
project = Project.load()
# Get multiple config values
device = project.get_config("defaults.device")
batch_size = project.get_config("defaults.batch_size")
data_path = project.get_config("paths.data")
# Set multiple config values
project.set_config("defaults.device", "cpu")
project.set_config("defaults.batch_size", 64)
project.set_config("defaults.workers", 16)
# Save all changes
project.save_config()Safe Project Deletion
from modelcub import Project
# Load project
project = Project.load("old-project")
# Confirm before deletion
if input(f"Delete {project.name}? [y/N]: ").lower() == 'y':
project.delete(confirm=True)
print("Project deleted")
else:
print("Deletion cancelled")See Also
- Dataset API - Dataset operations
- Model API - Model training
- CLI Reference - Command-line interface