[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", "video", "interpolate", "audio", "mesh", "matte-native", "depth-native", "segment-native", "upscale-native", "motion-native", "rig-native", "splat-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"] # Real Kokoro speech synthesis via makepad-ai-speech. tts = ["dep:makepad-ai-speech"] # Real IndexTTS-2.5 character-voice TTS via makepad-ai-speech. indextts = ["dep:makepad-ai-speech", "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 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"] [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-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", 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"