stem-splitter-core 1.2.0

Core library for AI-powered audio stem separation
Documentation
use crate::error::{Result, StemError};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
pub struct RegistryEntry {
    pub name: String,
    pub manifest: String,
}

#[derive(Debug, Deserialize)]
pub struct Registry {
    pub default: String,
    pub models: Vec<RegistryEntry>,
}

const REGISTRY_JSON: &str = include_str!("../../models/registry.json");

pub fn resolve_manifest_url(model_name: &str) -> Result<String> {
    let reg: Registry = serde_json::from_str(REGISTRY_JSON)?;
    let target = if model_name.is_empty() {
        reg.default
    } else {
        model_name.to_string()
    };

    reg.models
        .into_iter()
        .find(|m| m.name == target)
        .map(|m| m.manifest)
        .ok_or_else(|| StemError::Registry(format!("Model `{target}` not found in registry")))
}