refactor(manifold): trim remaining explanatory copy
This commit is contained in:
parent
ae256ecfbd
commit
3cf11ef9cf
2 changed files with 5 additions and 56 deletions
|
|
@ -134,12 +134,6 @@ const FEEDBACK_OPTS: { value: FeedbackModeUI; label: string }[] = [
|
||||||
{ value: 'geometric-dislike', label: 'Push away' },
|
{ value: 'geometric-dislike', label: 'Push away' },
|
||||||
{ value: 'explore-and-place', label: 'Explore & place' },
|
{ value: 'explore-and-place', label: 'Explore & place' },
|
||||||
];
|
];
|
||||||
const FEEDBACK_DESC: Record<FeedbackModeUI, string> = {
|
|
||||||
'geometric-dislike':
|
|
||||||
'Down carves the current sound away from what you like — directed repulsion (Mode 1).',
|
|
||||||
'explore-and-place':
|
|
||||||
'Down re-rolls the whole net into a scratchpad you audition; + places a liked sound (Mode 2).',
|
|
||||||
};
|
|
||||||
function ModelArchitecture() {
|
function ModelArchitecture() {
|
||||||
const engine = useEngine();
|
const engine = useEngine();
|
||||||
useEngineVersion(engine);
|
useEngineVersion(engine);
|
||||||
|
|
@ -265,11 +259,6 @@ function LearningDrawer(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
|
|
||||||
<SectionLabel>Down action · feedback mode</SectionLabel>
|
<SectionLabel>Down action · feedback mode</SectionLabel>
|
||||||
<Segmented value={ctx.feedbackMode} onChange={ctx.setFeedbackMode} options={FEEDBACK_OPTS} />
|
<Segmented value={ctx.feedbackMode} onChange={ctx.setFeedbackMode} options={FEEDBACK_OPTS} />
|
||||||
{depth === 'expanded' && (
|
|
||||||
<p style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
{FEEDBACK_DESC[ctx.feedbackMode]}
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<SectionLabel>Exploration</SectionLabel>
|
<SectionLabel>Exploration</SectionLabel>
|
||||||
<div style={{ display: 'flex', gap: 8, alignItems: 'center', flexWrap: 'wrap' }}>
|
<div style={{ display: 'flex', gap: 8, alignItems: 'center', flexWrap: 'wrap' }}>
|
||||||
|
|
@ -307,9 +296,6 @@ function LearningDrawer(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
<Button size="sm" variant="secondary" onClick={ctx.onClear}>
|
<Button size="sm" variant="secondary" onClick={ctx.onClear}>
|
||||||
Clear
|
Clear
|
||||||
</Button>
|
</Button>
|
||||||
<span style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)' }}>
|
|
||||||
forget every example & wipe the on-map marks
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<SectionLabel>Current model</SectionLabel>
|
<SectionLabel>Current model</SectionLabel>
|
||||||
|
|
@ -478,12 +464,6 @@ function InputsDrawer(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* ---- Internal (XY pad / manifold) ---- */}
|
{/* ---- Internal (XY pad / manifold) ---- */}
|
||||||
{inp.inputMode === 'internal' && depth === 'expanded' && (
|
|
||||||
<p style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
Drag the on-screen manifold / XY pad. Two axes feed the net directly — this is the default.
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* ---- Game Controller ---- */}
|
{/* ---- Game Controller ---- */}
|
||||||
{inp.inputMode === 'gamepad' && depth === 'expanded' && (
|
{inp.inputMode === 'gamepad' && depth === 'expanded' && (
|
||||||
<>
|
<>
|
||||||
|
|
@ -508,10 +488,6 @@ function InputsDrawer(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<p style={{ fontSize: 9, color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
Connect a controller and press any button to wake it. Sticks drive the input map;
|
|
||||||
buttons fire the verdicts above.
|
|
||||||
</p>
|
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
@ -627,7 +603,7 @@ const VISUAL_NAMES = [
|
||||||
* transport + tempo; the particle Mode names the outputs; MIDI/OSC/Editor show
|
* transport + tempo; the particle Mode names the outputs; MIDI/OSC/Editor show
|
||||||
* their own affordances. Replaces the removed Synth + Visual drawers.
|
* their own affordances. Replaces the removed Synth + Visual drawers.
|
||||||
*/
|
*/
|
||||||
function ModeConfig(ctx: ConsoleCtx, depth: DrawerDepth) {
|
function ModeConfig(ctx: ConsoleCtx) {
|
||||||
switch (ctx.outputMode) {
|
switch (ctx.outputMode) {
|
||||||
case 'synth':
|
case 'synth':
|
||||||
return (
|
return (
|
||||||
|
|
@ -652,17 +628,9 @@ function ModeConfig(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
case 'midi':
|
case 'midi':
|
||||||
// The full MIDI config (port picker, CC count, per-output CC/channel/name)
|
// The full MIDI config (port picker, CC count, per-output CC/channel/name)
|
||||||
// + preset bar render via OutputsBackendConfig in RoutingDrawer below.
|
// + preset bar render via OutputsBackendConfig in RoutingDrawer below.
|
||||||
return depth === 'expanded' ? (
|
return null;
|
||||||
<p style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
Each output sends a real Web MIDI CC. Pick a port and set CC# / channel per output.
|
|
||||||
</p>
|
|
||||||
) : null;
|
|
||||||
case 'osc':
|
case 'osc':
|
||||||
return depth === 'expanded' ? (
|
return null;
|
||||||
<p style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
Each output sends to an OSC path with a physical range, over the WebSocket bridge.
|
|
||||||
</p>
|
|
||||||
) : null;
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -725,10 +693,10 @@ function RoutingDrawer(ctx: ConsoleCtx, depth: DrawerDepth) {
|
||||||
<Chip tone="var(--danger)">muted {mutedN}</Chip>
|
<Chip tone="var(--danger)">muted {mutedN}</Chip>
|
||||||
<BackendStatusChip ctx={ctx} />
|
<BackendStatusChip ctx={ctx} />
|
||||||
</div>
|
</div>
|
||||||
{ModeConfig(ctx, depth)}
|
{ModeConfig(ctx)}
|
||||||
{/* Specialised per-backend config + named-preset bar (MIDI/OSC); hidden when condensed. */}
|
{/* Specialised per-backend config + named-preset bar (MIDI/OSC); hidden when condensed. */}
|
||||||
{expanded && <OutputsBackendConfig ctx={ctx} backend={modeDesc.backend} />}
|
{expanded && <OutputsBackendConfig ctx={ctx} backend={modeDesc.backend} />}
|
||||||
<SectionLabel>Outputs · M mute · S arm · off/fixed/live</SectionLabel>
|
<SectionLabel>Outputs</SectionLabel>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
|
|
|
||||||
|
|
@ -355,9 +355,6 @@ function MidiConfig({ ctx }: { ctx: ConsoleCtx }) {
|
||||||
</option>
|
</option>
|
||||||
))}
|
))}
|
||||||
</select>
|
</select>
|
||||||
<span style={{ fontSize: 'var(--fs-xs)', color: 'var(--fg-dim)' }}>
|
|
||||||
{ctx.midiCcCount} MIDI output card{ctx.midiCcCount === 1 ? '' : 's'}
|
|
||||||
</span>
|
|
||||||
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -394,11 +391,6 @@ function OscConfig({ ctx }: { ctx: ConsoleCtx }) {
|
||||||
</label>
|
</label>
|
||||||
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
||||||
</div>
|
</div>
|
||||||
<p style={{ fontSize: 9, color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
The Deno OSC bridge process must be running locally (see manifold/osc-bridge). The browser sends over
|
|
||||||
WebSocket; the bridge encodes OSC and forwards over UDP.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<SectionLabel>Per-output address · physical range</SectionLabel>
|
<SectionLabel>Per-output address · physical range</SectionLabel>
|
||||||
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
||||||
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
||||||
|
|
@ -474,12 +466,6 @@ function VcvConfig({ ctx }: { ctx: ConsoleCtx }) {
|
||||||
</label>
|
</label>
|
||||||
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
||||||
</div>
|
</div>
|
||||||
<p style={{ fontSize: 9, color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
The VCV Rack NISPS module AND the Deno OSC bridge (manifold/osc-bridge) must both be running. The browser drives
|
|
||||||
the module's inputs and forwards the verdict loop (thumbs up/down, explore-and-place) over the bridge, so the
|
|
||||||
module's embedded net trains in lock-step. Default module UDP port 7001.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<SectionLabel>Per-output polarity</SectionLabel>
|
<SectionLabel>Per-output polarity</SectionLabel>
|
||||||
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
||||||
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
||||||
|
|
@ -538,11 +524,6 @@ function CvConfig({ ctx }: { ctx: ConsoleCtx }) {
|
||||||
</button>
|
</button>
|
||||||
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
<span style={{ fontSize: 9, color: statusColor }}>{s.message}</span>
|
||||||
</div>
|
</div>
|
||||||
<p style={{ fontSize: 9, color: 'var(--fg-dim)', margin: 0, lineHeight: 1.6 }}>
|
|
||||||
Flash the uSEQ main + expander with <code>firmware/useq-celium</code>, connect over USB, then assign each
|
|
||||||
model output to a CV jack or gate. 11 CV (3 main + 8 expander) + 3 gates, streamed at 100 Hz.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<SectionLabel>Per-output channel · gate threshold</SectionLabel>
|
<SectionLabel>Per-output channel · gate threshold</SectionLabel>
|
||||||
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
<div style={{ maxHeight: 320, overflow: 'auto' }}>
|
||||||
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue