makepad/apps/vj/Cargo.toml
Admin 705d6c73ed vj: the console — real transports and reverse, the music explorer's IMPORT, local store, lyrics and model plumbing, DJ-tab scroll knobs, title-click reset, crossfade fix, stem headroom, and music/sfx browse models
Squashed from work; the fine-grained history is under tag archive/work-2026-08-26:
- vj: the music explorer gets IMPORT, and catalog controls fold away in local mode
- vjfx: three lanes land — engine hooks + hold stage, the videomesh engine, and the audio picture
- vj: the thumbnail pipeline becomes one honest machine, and effects go livecodable
- vj: thumbnails become mp4 — hardware-coded sheets at measured-4K cells, and the bake stops racing the GPU
- store: the ceremony dies — batch publish, one transaction, and the engine stops re-reading its own log
- store: the ceremony dies — batch publish, one transaction, and the engine stops re-reading its own log
- vj: the console grows real transports, and the deck stops lying about reverse
- vj: reverse earns a memory, and the effects stop aging
- vj: video goes NV12 end to end, and the GPU does the unpacking
- vj: windows hands the main thread one megabyte, and the script tree wants two
- vj: the GPU learns to see motion — realtime frame tweening on every deck
- vj: the tweener learns — RIFE runs on the Mac and feeds the warp
- vj: the classical tweener grows up, and every deck gets a tween chip
- models: an interrupted install can never load broken
- vj: the transport becomes a platter — velocity in, position out, one map
- vj: the tween presenter reads the platter — one clock per deck, cued once at the frame on screen
- vj: the presenter switch lands without its scaffolding
- vj: the next pair's fields are fetched ahead of the change under the capacity law — a pair change costs an ordinary beat; macos: the layer's own display link paces the frame when the system offers it, the old path stays as fallback
- vj: AI3 subdivides adaptively — one, three or seven neural frames per pair, chosen from measured synth time against the pair's own period, with classical flow between them and a 7-3-1-FL fallback; the deck shows the depth
- vj: local store, lyrics and model plumbing, and the frame-interpolator's device parity check
- vj: DJ-tab scroll knobs, title-click reset, crossfade fix, stem headroom — plus the pre-Ampere CUDA fix (#1193)
- vj: the deck explorer lists music-tagged audio, the sfx surface filters by tag not category, the track list fills the window, and the modal host has no layout footprint

Co-authored-by: Rogier de Leeuw <vjroger@gmail.com>
2026-08-26 08:49:49 +02:00

66 lines
3.6 KiB
TOML

# Makepad VJ — live performance app over the Asset Server: video program
# tiles with a two-slot crossfaded output window, two DJ music decks with an
# equal-power crossfader, and a polyphonic one-shot SFX pad bank.
#
# All networking (discovery, auth, catalog/search, blob download, event
# subscription, verified cache) lives in makepad-asset-client; this
# crate contains only UI, playback/crossfade orchestration and presentation
# adapters.
[package]
name = "makepad-vj"
version = "0.1.0"
edition = "2021"
# src/bin/karaoke_align.rs makes this a two-binary package; without this,
# `cargo run -p makepad-vj` refuses to guess and demands --bin.
default-run = "makepad-vj"
[dependencies]
makepad-widgets = { path = "../../widgets" }
makepad-asset-data = { path = "../../libs/asset/data" }
# Own MP3 / Ogg Vorbis decoders for the music decks and SFX pads.
makepad-audio-decode = { path = "../../libs/audio_decode" }
# Four-stem source separation for the music decks' stem mix.
makepad-ai-stems = { path = "../../libs/ai/models/stems" }
# Whisper transcription of the separated vocals stem: karaoke subtitles.
makepad-voice = { path = "../../libs/voice" }
makepad-audio-lyrics = { path = "../../libs/audio_lyrics" }
# Stems + lyrics as server-stored side-channels: the encode/role/publish
# implementation shared with the asset-ui bake.
makepad-audio-sidechannels = { path = "../../libs/audio_sidechannels" }
makepad-asset-widgets = { path = "../../libs/asset/widgets" }
makepad-asset-client = { path = "../../libs/asset/client" }
# First-use model install (stem splitter + whisper): the asset-ai service's
# resumable, sha256-verified downloader. Featureless — the same slice the
# asset UI links — so none of the model backends come along.
makepad-asset-ai = { path = "../../libs/asset/ai", default-features = false }
# The chat pane itself — ONE component, shared with the asset UI and the
# game sandbox: the session on the server's chat broker, the worker thread,
# the transcript with tool chips and the rate meter.
makepad-asset-chat-ui = { path = "../../libs/asset/chat_ui" }
# 3D program lane: skinned-GLB playback via the renderer.
makepad-render = { path = "../../libs/render" }
makepad-show-control = { path = "../../libs/show_control" }
makepad-gltf = { path = "../../libs/gltf" }
# Gaussian-splat program slots: XrSceneView offscreen pass + ViewSplat.
makepad-xr = { path = "../../xr" }
# Procedural placeholder thumbnails for bundled effect presets.
jpeg-encoder = { path = "../../libs/jpeg-encoder", version = "0.6.1" }
# WebP import: decoded once at import time, published as owned png bytes.
makepad-webp = { path = "../../libs/webp" }
# FULLY-LOCAL MODE: the VJ hosts its own Asset Server in-process, on
# loopback, when no external store is reachable. Same crate asset-ui and the
# sandbox embed — the VJ stays a THIN CLIENT over it either way, talking
# HTTP to 127.0.0.1 exactly as it talks to a remote store.
makepad-asset-store = { path = "../../libs/asset/store" }
# Import: real first-frame thumbnails for mp4/mov, spectrogram/waveform
# pictures for audio, and the dimension probes for stills.
makepad-asset-importer = { path = "../../libs/asset/importer" }
# NEURAL frame tweening (flow_tween.rs RIFE producer): the in-house
# Practical-RIFE v4.26 port, running on the macOS Metal/BLAS device path.
makepad-ai-rife = { path = "../../libs/ai/models/rife" }
# VARIABLE-FRAMERATE IMPORT: the `mkfl` payload the player reads, the
# classical (model-free) optical flow that fills it, and the all-intra
# re-encode. Shared with the enhance backend, which fills the same box from
# RIFE — one format, one parser, two producers.
makepad-video-flow = { path = "../../libs/video_flow" }