feat(ui): MAIN and ADVANCED pages, Anvil main page around Mode, Split and Sub level

Producers found the panels crowded: every control had the same weight. The
header now carries a MAIN / ADVANCED switch (common-ui header_paged). The
main page keeps the controls a first result needs; the advanced page shows
everything, as before.

- Anvil: Mode (Replace or Enhance), Split and Sub level, plus Octave, Ghost,
  Keep and Output. Kick lock, Dynamics, Drive, Glide, Phase, Gate and the
  pitch switches move to Advanced. The note readout says when the original
  sub plays because tracking is unsure.
- Lathe, Temper, Knurl, Planish, Braze: tracking and fine-tuning controls
  (Gate, Smooth, Snap, Harmonics, Push at, Floor, Bright, Normalize, band
  gains, Phase) move to Advanced. Lathe labels the octaves of the note in Hz
  on the harmonic axis.
- Forge passes the page to its module pages.
- Weld: the main page shows the level won back at full height, Mode,
  Response and Output; the phase plot, Sections, Low, High and Gate move to
  Advanced.
- editor-check renders the advanced pages with --advanced.
This commit is contained in:
nvrl committed 2026-11-06 21:16:11 +01:00
1 parent d6939a753a
commit 01fd3241eb
10 files changed
+594 -227

No files matched your search

+25 -5
View File
@@ -24,6 +24,8 @@ fn main() {
}
let patina = plugin == "patina" || args.iter().any(|arg| arg == "--resonance");
let compact = std::env::args().any(|arg| arg == "--compact");
// Render the ADVANCED page of editors that have one.
let advanced = std::env::args().any(|arg| arg == "--advanced");
let anvil = plugin == "anvil";
let crucible = plugin == "crucible";
let lathe = plugin == "lathe";
@@ -105,7 +107,10 @@ fn main() {
}
}
let mut anvil_settings = anvil_core::Settings::default();
let mut anvil_state = anvil_ui::State::default();
let mut anvil_state = anvil_ui::State {
advanced,
..anvil_ui::State::default()
};
if anvil {
anvil_settings.ghost = 60.;
anvil_settings.kick_lock = true;
@@ -136,6 +141,7 @@ fn main() {
}
let mut lathe_settings = lathe_core::Settings::default();
let mut lathe_state = lathe_ui::State::default();
lathe_state.advanced = advanced;
if lathe {
// A growl-like map: cut the hollow region, lift the 5th, darker top.
lathe_settings.gains[1] = -4.;
@@ -168,7 +174,10 @@ fn main() {
bright: 12.,
..Default::default()
};
let mut temper_state = temper_ui::State::default();
let mut temper_state = temper_ui::State {
advanced,
..temper_ui::State::default()
};
if temper {
let mut engine = temper_core::Engine::new(48000., 2).unwrap();
engine.set_settings(temper_settings).unwrap();
@@ -183,7 +192,10 @@ fn main() {
temper_state.accept_frame(engine.take_analyzer());
}
let mut knurl_settings = knurl_core::Settings::default();
let mut knurl_state = knurl_ui::State::default();
let mut knurl_state = knurl_ui::State {
advanced,
..knurl_ui::State::default()
};
if knurl {
// An F1 saw bass with the default Fry pattern, jitter and grit.
let mut engine = knurl_core::Engine::new(48000., 2).unwrap();
@@ -208,6 +220,7 @@ fn main() {
forge_core::Stage::Temper,
];
let mut forge_state = forge_ui::State::default();
forge_state.advanced = advanced;
forge_state.page = match args
.iter()
.position(|a| a == "--page")
@@ -237,6 +250,7 @@ fn main() {
..Default::default()
};
let mut planish_state = planish_ui::State::default();
planish_state.advanced = advanced;
if planish {
// A distorted F1 saw bass: loud body, thin top, so both directions work.
let mut engine = planish_core::Engine::new(48000., 2).unwrap();
@@ -255,7 +269,10 @@ fn main() {
width: 30.,
..Default::default()
};
let mut braze_state = braze_ui::State::default();
let mut braze_state = braze_ui::State {
advanced,
..braze_ui::State::default()
};
if braze {
// A reese-like F1 saw at 140 BPM, 2.3 beats into the bar.
let mut engine = braze_core::Engine::new(48000., 2).unwrap();
@@ -324,7 +341,10 @@ fn main() {
ballast_state.accept_frame(engine.take_analyzer());
}
let mut weld_settings = weld_core::Settings::default();
let mut weld_state = weld_ui::State::default();
let mut weld_state = weld_ui::State {
advanced,
..weld_ui::State::default()
};
if weld {
// Two layers of an F1 saw bass. The sidechain layer is polarity-flipped and runs
// through an allpass at 400 Hz, as an EQ in its chain would leave it. The real