forked from daydreamlive/DEMON
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.json
More file actions
139 lines (122 loc) · 9.99 KB
/
Copy pathconfig.json
File metadata and controls
139 lines (122 loc) · 9.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{
"_comment": "Initial settings for the DEMON installation. Edit and refresh — no rebuild needed. Slider max/step lives in types/engine.ts (SLIDER_META); only the per-control starting value is set here. Schema and defaults: web/lib/config.ts.",
"_variants_help": "Selected fields carry an `_xl` sibling (depth_xl, enabled_loras_xl in engine; a_xl, b_xl, blend_xl in prompts). When the active checkpoint scale is 5B (xl), the `_xl` value wins at applyConfig time. Other scales (2B / unknown) use the base value. Selection happens once at boot after /api/loras returns the checkpoint scale.",
"engine": {
"sde": false,
"lora": true,
"depth": 4,
"depth_xl": 2,
"vae_window": 0.36,
"crop": 0,
"steps": 8,
"fast_vae": false,
"_walk_window_help": "When true, route long sources through the walk_window_s (60s) DiT engine by cutting longer songs into 60 second latents and swapping at boundaries — keeps the 60s engine's faster parameter-update latency on multi-minute sources. No effect when source ≤ window_s.",
"walk_window": true,
"walk_window_s": 60,
"_lead_help": "Playback-lead tuning (server-side decode buffer). The lead is how far ahead of the live playhead each freshly decoded audio slice is placed; it adapts to observed per-tick compute. lead_floor_s is the minimum baseline lead — raise it for more robustness to GPU contention (screen capture, the WebGPU display, a second process) at the cost of latency; ~0.05 is snappy on an idle GPU but sawtooths under any contention, ~0.5 reproduces the old fixed behavior, 0.25 is the midway default. lead_ceiling_s caps how far contention can inflate the lead (defends against multi-second latency; keep >= ~1.1 to fully cover rebuild/refit stalls). lead_release_tau_s is the decay time-constant for a contention spike — lower releases faster; the server clamps it up to lead_ceiling_s if set lower (monotonic-decode invariant). Omit any field to use the server default.",
"lead_floor_s": 0.25,
"lead_ceiling_s": 1.35,
"lead_release_tau_s": 1.5,
"key": "G# minor",
"_time_signature_help": "Default meter numerator for the operator dropdown. One of 2, 3, 4, 6 (string) for 2/4, 3/4, 4/4, 6/8 respectively. Sidecar values still win on fixture hits; this is the seed for live uploads and the AlmostReadyDialog manual override.",
"time_signature": "4",
"_enabled_loras_help": "LoRAs to auto-enable on first catalog load. Each entry is either a string (the LoRA's filename stem or sidecar display name, case-insensitive — e.g. \"deep_house-v1\" or \"Deep House\") or an object {name, strength} to set an inline strength override. Without `strength`, the sidecar's recommended_strength wins (or controls.lora_default_strength as fallback). Empty array = count-rule (first two from the sorted catalog). `enabled_loras_xl` overrides this when the active checkpoint is 5B.",
"enabled_loras": [
{ "name": "Ambient", "strength": 0.7 },
{ "name": "Deep House", "strength": 0.75 }
],
"enabled_loras_xl": [
{ "name": "Funk", "strength": 1.15 },
{ "name": "Trap", "strength": 0.01 }
],
"_auto_prepend_lora_triggers_help": "When true (default), enabling a LoRA prepends its primary trigger word to Tags A + Tags B so the operator sees exactly what the encoder sees. Disabling a LoRA best-effort removes the trigger when it is still at the head of the prompt. Set to false for fully manual workflows where the operator types triggers themselves.",
"auto_prepend_lora_triggers": true,
"_show_incompatible_loras_help": "When true, the LoRA library shows every entry regardless of whether its sidecar base_model_scale matches the active checkpoint (2B / 5B). Default false auto-hides LoRAs trained for the other scale. LoRAs without a declared scale are shown either way.",
"show_incompatible_loras": false
},
"prompts": {
"a": "roti-4custic, roti-d33ph0us, acoustic deep house hybrid",
"b": "daft punk style, beautiful, four to the floor, angelic",
"blend": 0.0,
"a_xl": "roti-funkk, funky ass bassline",
"b_xl": "funky ass bassline of roti-tr4ph0p",
"blend_xl": 0.0
},
"controls": {
"denoise": 0.7,
"_lora_default_strength_help": "Initial value applied to any LoRA strength slider whose server-reported strength is 0 (current Python backend behavior). Auto-enabled LoRAs land here on first paint.",
"lora_default_strength": 0.7,
"hint_strength": 1.0,
"feedback": 0.0,
"feedback_depth": 1,
"shift": 3.5,
"_rcfg_help": "Residual CFG. 'off' = no guidance (turbo default, free). 'self' = virtual uncond from initial noise, ~1.06x cost. 'initialize' = uncond run once per slot then cached, ~1.07x. 'full' = standard two-pass CFG, ~2x.",
"rcfg_mode": "initialize",
"guidance_scale": 2.5,
"cfg_rescale": 0.0,
"ch_g0": 1.0,
"ch_g1": 1.0,
"ch_g2": 1.0,
"ch_g3": 1.0,
"ch_g4": 1.0,
"ch_g5": 1.0,
"ch_g6": 1.0,
"ch_g7": 1.0,
"ch13": 1.0,
"ch14": 1.0,
"ch19": 1.0,
"ch23": 1.0,
"ch29": 1.0,
"ch56": 1.0,
"dcw_enabled": true,
"dcw_mode": "double",
"dcw_scaler": 0.05,
"dcw_high_scaler": 0.02,
"dcw_wavelet": "haar"
},
"_channel_ranges_help": "Per-channel slider range + direction. {min,max} caps the value the slider/MIDI/keyboard can drive into the engine (also applied to scheduled-curve writes via clampToMeta). `reverse: true` flips the input mapping so dragging UP (or turning the MIDI knob clockwise) sends a LOWER engine value -- use for channels that sound better when turned down so the operator's instinct to push up produces the desired result. Stored values still live in [min, max]; reverse changes only the UI/input mapping, not the wire range. Omitted params fall back to SLIDER_META in types/engine.ts (max=3.0 by default, no min).",
"channel_ranges": {
"ch_g0": { "min": 0, "max": 2.2, "reverse": false },
"ch_g1": { "min": 0, "max": 2.0, "reverse": false },
"ch_g2": { "min": 0, "max": 2.3, "reverse": true },
"ch_g3": { "min": 0, "max": 2.0, "reverse": false },
"ch_g4": { "min": 0, "max": 2.5, "reverse": false },
"ch_g5": { "min": 0, "max": 2.0, "reverse": false },
"ch_g6": { "min": 0, "max": 2.0, "reverse": true },
"ch_g7": { "min": 0, "max": 2.0, "reverse": true },
"ch13": { "min": 0, "max": 2.0, "reverse": true },
"ch14": { "min": 0, "max": 2.3, "reverse": false },
"ch19": { "min": 0, "max": 2.5, "reverse": false },
"ch23": { "min": 0, "max": 2.45, "reverse": false },
"ch29": { "min": 0, "max": 2.0, "reverse": false },
"ch56": { "min": 0, "max": 2.0, "reverse": false }
},
"seed": 42,
"_audio_help": "Output audio chain. lufs_enabled toggles the loudness matcher on at boot (operator can still flip it via the LUFS button in-session). lufs_window_sec controls the meter's sliding window. 3s is the standard. Lower = faster response but noisier and prone to high-water spikes on transients. Practical floor ~1.5s. lufs_metric picks the metric: 'lufs' (BS.1770 K-weighted, broadcast standard) or 'dba' (IEC 61672 A-weighted, closer to perceived loudness on bright/distorted content). lufs_silence_floor_db disengages the matcher when the chunk at the playhead reads more than this far below target (gain ramps to 1.0 instead of computing a boost), so silent regions of the model output don't get amplified into audible noise; 30 is well outside real musical content, lower to 20 to disengage on quiet passages too. lufs_silence_floor_hysteresis_db is the Schmitt-trigger band: once disengaged, the matcher re-engages only when the chunk reads within (floor - hysteresis) dB of target, preventing flapping at the threshold. Widen if you still hear volume swells at silence boundaries. The matcher always seeds the high-water mark with the source's loudest short-term window at session start, so the louder of {source, denoised} defines the target from t=0 -- no need to wait for the meter to discover it.",
"audio": {
"lufs_enabled": false,
"lufs_window_sec": 1.5,
"lufs_metric": "lufs",
"lufs_peak_headroom": 4.0,
"lufs_silence_floor_db": 30.0,
"lufs_silence_floor_hysteresis_db": 6.0
},
"_effects_help": "Audio-reactive video shader pipeline (parallax + bloom-on-kick). Both effects pulse with the kick envelope; the perimeter ribbons + DEMON wordmark also pulse with kick via a CSS variable.",
"effects": {
"parallax_strength": 0.4,
"bloom_on_kick": 0.3,
"bloom_threshold": 0.15,
"warp_strength": 0.4
},
"_reset_seconds_help": "Idle timeout. After this many seconds of no interaction (pointer, key, or MIDI), every control reverts to the defaults above. Set to 0 to disable.",
"reset_seconds": 0,
"_denoise_session_gate_help": "On every session start (clicking Play) AND on song swaps, snap the engine's denoise value to 0 and play a visual-only display glide from the slider's prior value down to 0 over glide_ms. The engine value never moves with the glide; it's a 'hear the source first' onboarding cue, and the slide doubles as a hint that the top ribbon is a slider. The slide is only visible when denoise is non-zero at the moment of the gate (first session uses controls.denoise above; later sessions and swaps use wherever the operator left it). Set enabled to false to skip the snap and glide entirely. With the gate off, controls.denoise seeds first paint and the slider keeps the operator's last value across sessions and swaps.",
"denoise_session_gate": {
"enabled": true,
"glide_ms": 700
},
"_restart_song_on_swap_help": "When true, picking a different song mid-session restarts playback from frame 0 of the new song. When false, the worklet keeps the playhead's phase across the swap, so swapping at 1:30 into a 4:00 track starts the new track at 1:30. Default true matches the ScriptProcessor fallback's existing behavior.",
"restart_song_on_swap": false,
"_swap_source_mode_help": "Default inference source for uploaded-track swaps. One of full, instruments, vocals. Built-in fixtures keep using their full source unless the track is present in the upload library.",
"swap_source_mode": "instruments"
}