makepad/libs/ai/hub/Cargo.toml
Admin 31e5faaff5 ai-hub: local model runner, licence acknowledgements, a shared install panel; Beat This!, Basic Pitch and the Salamander drum-kit entries
LocalModels runs registry models in-process (install state, resumable downloads, recorded licence acknowledgements at $MAKEPAD_HOME/license_acks.json, weight paths by file role) and libs/ai/hub_ui is the install panel + licence modal every app can embed. New native ports: Beat This! (beats + downbeats) and Basic Pitch (note transcription) with their registry entries; the Salamander Drumkit samples (CC BY-SA 3.0, 37 files pinned by size and sha256) as a sample bank the downloader fetches like a model.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 02:51:44 +02:00

192 lines
9.9 KiB
TOML

[package]
name = "makepad-ai-hub"
version = "0.3.0"
edition = "2021"
description = "AI content generation service: wraps local GPU model runtimes (image/mesh/video/audio) behind an HTTP port, with on-demand HuggingFace model download"
license = "MIT OR Apache-2.0"
# Standalone workspace: this crate pulls in platform/network and the
# per-family model crates under libs/ai, so it stays out of the root
# workspace member list.
[workspace]
[features]
# Native backends only. Python/Torch oracles stay off unless a box
# explicitly enables `python-backends`.
default = [
"flux",
"paint",
"paint-cuda",
"llm",
"tts",
"indextts",
"speech",
"stt",
"video",
"interpolate",
"audio",
"mesh",
"matte-native",
"depth-native",
"segment-native",
"body-native",
"upscale-native",
"motion-native",
"rig-native",
"splat-native",
"beats-native",
"notes-native",
]
# Box-provisioned Python/Torch reference backends (FlashWorld, Music3,
# Depth-Anything-3, and the rig/motion oracles). Not in default: a native
# service must not advertise or instantiate a Python runtime.
python-backends = []
# Real Flux image generation via makepad-ai-flux.
flux = ["dep:makepad-ai-flux", "dep:makepad-ai-common"]
# The generative-PBR paint domain: mesh GLB + reference image -> PBR-textured
# GLB + semantic maps + provenance manifest. Ships the deterministic
# "paint-test" tier everywhere. Default also enables `paint-cuda`, so a
# Windows/Linux fleet box advertises Hunyuan Paint and downloads weights
# like any other registry model.
paint = ["dep:makepad-ai-paint", "dep:makepad-gltf", "dep:makepad-remesh", "dep:makepad-xatlas"]
# Windows/Linux CUDA Hunyuan executor (in default).
paint-cuda = ["paint", "makepad-ai-paint/cuda-taps"]
# Real LLM prompt expansion via makepad-ai-llm (Qwen3.5/3.6 GGUF).
llm = ["dep:makepad-ai-llm"]
# Speech sessions (AiHub::start_stt / start_tts): the OS engines as the
# stt.system / tts.system pipes plus the in-process / machine / LAN ladder.
speech = ["dep:makepad-system-speech"]
# Whisper speech-to-text (stt.whisper), in-process and on the wire.
stt = ["speech", "dep:makepad-ai-speech", "makepad-ai-speech/whisper"]
# Real Kokoro speech synthesis via makepad-ai-speech.
tts = ["dep:makepad-ai-speech", "makepad-ai-speech/kokoro"]
# Real IndexTTS-2.5 character-voice TTS via makepad-ai-speech.
indextts = ["dep:makepad-ai-speech", "makepad-ai-speech/indextts", "dep:makepad-ai-common"]
# Real MiniMax H3 video generation via makepad-ai-h3 plus the hardware
# video file encoder (makepad-video). Does NOT pull the UI platform crate.
video = ["dep:makepad-ai-h3", "dep:makepad-ai-common", "dep:makepad-video"]
# Native Practical-RIFE v4.26 frame interpolation as an optional post-stage
# of the video backend (`interpolate: 2|4`). Independent of `video`: the
# stage sits after the generator, so the stubbed CI video path exercises it
# too. Weights ride along with each H3 tier through the "interpolate" file
# role, so the domain never grows a second selectable model.
interpolate = ["dep:makepad-ai-rife", "dep:makepad-ai-common"]
# Real SA3 / MOSS / Woosh / ACE / Music3 audio via the sfx + music crates.
audio = ["dep:makepad-ai-sfx", "dep:makepad-ai-music", "dep:makepad-ai-common"]
# Real TRELLIS.2 image->GLB via makepad-ai-trellis plus the in-repo remesher.
# Also needs H3's noise helper and BiRefNet (via matte-native).
mesh = ["matte-native", "depth-native", "dep:makepad-ai-trellis", "dep:makepad-ai-h3", "dep:makepad-ai-common", "dep:makepad-remesh", "dep:makepad-gltf", "dep:makepad-xatlas"]
# Native BiRefNet image matting. Separate from `mesh` so a matte-only
# service does not pull TRELLIS/remesh.
matte-native = ["dep:makepad-ai-vision", "dep:makepad-ai-common"]
# Native DA3METRIC-LARGE metric depth. Independent of `mesh`.
depth-native = ["dep:makepad-ai-vision", "dep:makepad-ai-common"]
# Native SAM 3.1 multiplex segmentation. Independent of `mesh`.
segment-native = ["dep:makepad-ai-vision", "dep:makepad-ai-common"]
# Native SAM 3D Body pose estimation.
body-native = ["dep:makepad-ai-body", "dep:makepad-ai-common"]
# Native RealESRGAN x4plus general-image upscaling. Independent of `mesh`.
upscale-native = ["dep:makepad-ai-vision", "dep:makepad-ai-common"]
# Native HY-Motion decode -> rig retarget -> animated GLB.
motion-native = ["dep:makepad-ai-motion", "dep:makepad-ai-common", "dep:makepad-gltf", "dep:makepad-render"]
# Native TripoSplat image -> 3D gaussian splat. Needs BiRefNet (via
# matte-native) for the cutout and the FLUX.2 VAE encoder (via the flux
# family crate, which makepad-ai-splat depends on directly).
splat-native = ["matte-native", "dep:makepad-ai-splat", "dep:makepad-ai-common"]
# Native SkinTokens checkpoint conversion, inference, surface transfer and
# lossless skinned-GLB augmentation. The reference Torch/bpy backend remains
# separately available as `rig-oracle` through `python-backends`.
rig-native = ["dep:makepad-ai-rig", "dep:makepad-ai-common", "dep:makepad-gltf"]
# In-process registry/downloader/backend runner for desktop applications.
# Opt-in so featureless fleet clients do not pull the GPU model substrate.
local = ["dep:makepad-ai-common"]
# Native Beat This! audio -> beat/downbeat JSON analysis.
beats-native = ["dep:makepad-ai-beats", "dep:makepad-ai-common"]
# Native Spotify Basic Pitch audio -> notes/MIDI transcription. The model is
# tiny and has a CPU fallback, so this lane is available without a GPU.
notes-native = ["dep:makepad-ai-notes"]
[dependencies]
makepad-micro-serde = { path = "../../micro_serde" }
makepad-base64 = { path = "../../base64" }
makepad-network = { path = "../../../platform/network" }
makepad-strict-json = { path = "../../strict_json" }
# Reuse-group UDP bind for the fleet beacon listener (several apps on one
# machine listen at once); the client crate owns that socket helper.
makepad-asset-client = { path = "../../asset/client" }
makepad-zune-core = { path = "../../zune/zune-core" }
makepad-zune-png = { path = "../../zune/zune-png" }
# Vision-domain request images arrive as PNG or JPEG.
makepad-zune-jpeg = { path = "../../zune/zune-jpeg" }
makepad-zip-file = { path = "../../zip_file" }
# Music reference clips arrive as any audio file the in-repo decoders read
# (MP3 / FLAC / Ogg Vorbis here, WAV in crate::wav). No deps, no unsafe.
makepad-audio-decode = { path = "../../audio_decode" }
makepad-ai-common = { path = "../../ai/models/common", optional = true }
makepad-ai-flux = { path = "../../ai/models/flux", optional = true }
makepad-ai-h3 = { path = "../../ai/models/h3", optional = true }
makepad-ai-rife = { path = "../../ai/models/rife", optional = true }
makepad-ai-vision = { path = "../../ai/models/vision", optional = true }
makepad-ai-body = { path = "../models/body", optional = true }
makepad-ai-rig = { path = "../../ai/models/rig", optional = true }
makepad-ai-motion = { path = "../../ai/models/motion", optional = true }
makepad-ai-sfx = { path = "../../ai/models/sfx", optional = true }
makepad-ai-music = { path = "../../ai/models/music", optional = true }
makepad-ai-trellis = { path = "../../ai/models/trellis", optional = true }
makepad-ai-splat = { path = "../../ai/models/splat", optional = true }
makepad-ai-paint = { path = "../../ai/models/paint", optional = true }
makepad-remesh = { path = "../../remesh", optional = true }
makepad-gltf = { path = "../../gltf", optional = true }
makepad-xatlas = { path = "../../xatlas", optional = true }
makepad-render = { path = "../../render", optional = true }
makepad-ai-llm = { path = "../../ai/llm", optional = true }
makepad-ai-speech = { path = "../../ai/models/speech", default-features = false, optional = true }
makepad-ai-beats = { path = "../../ai/models/beats", optional = true }
makepad-ai-notes = { path = "../../ai/models/notes", optional = true }
makepad-system-speech = { path = "../../system_speech", optional = true }
makepad-video = { path = "../../../platform/video", optional = true }
# The `mkfl` motion payload: ONE definition, shared with the VJ's import
# converter (which fills the same box from a classical, model-free flow
# field). Default features off — the enhance stage owns its own codec seam
# and only needs the format.
makepad-video-flow = { path = "../../video_flow", default-features = false }
[dev-dependencies]
# Test-only: tests/service_e2e.rs drives the realtime websocket endpoint
# through the in-repo plain-TCP websocket client.
makepad-live-id = { path = "../../live_id" }
# Test-only: the h264 realtime round-trip test acts as its own client,
# encoding/decoding with the same hardware codec seam the service uses
# internally (behind the crate's own optional/default `video` feature).
makepad-video = { path = "../../../platform/video" }
# The standing "is chat slow right now?" check. Its own code is std-only —
# no HTTP or JSON crate — so what it measures is the box, not a client
# library, and it keeps working when the wire grows fields it has never
# heard of.
[[bin]]
name = "chat-bench"
path = "src/bin/chat_bench.rs"
# The standing "where does a long conversation go insane, and which subsystem
# did it?" gate. Two arms per rung — one cold request at depth against the same
# content grown turn by turn — so a failure names the incremental path or the
# position/arena math instead of just saying "long contexts are bad". Std-only
# for the same reason chat-bench is.
[[bin]]
name = "context-ladder"
path = "src/bin/context_ladder.rs"
# The OCR bench: every page image in a directory through the resident ocr
# backend (local weights) or through a box's wire, one HTML per page, and
# the numbers that decide the model — seconds per page, image/output tokens,
# retries — plus `--score` to rank transcriptions against a reference.
[[bin]]
name = "ocr-bench"
path = "src/bin/ocr_bench.rs"
# TTS -> STT through the hub's own speech sessions, scored as word error rate:
# the scoreboard for comparing engines and the end-to-end check of the ladder.
[[bin]]
name = "speech-roundtrip"
path = "src/bin/speech_roundtrip.rs"