pachet commited on
Commit
9eca51b
·
1 Parent(s): bfc1297

Refine Theme Lab layout controls

Browse files
apps/theme_lab/static/app.js CHANGED
@@ -297,16 +297,31 @@ async function playCurrentTheme() {
297
  }
298
 
299
  function generationPayload() {
300
- return {
 
301
  engine: $("engineSelect").value,
302
  samples: Number($("samplesInput").value),
303
  length: Number($("lengthInput").value),
304
  key: $("generateKey").value,
305
  seed: Number($("seedInput").value),
306
  endpoint_strength: Number($("endpointInput").value),
307
- max_order: Number($("orderInput").value),
308
- transformer_steps: Number($("stepsInput").value),
309
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  }
311
 
312
  async function generate() {
@@ -409,6 +424,7 @@ function bindEvents() {
409
  $("playTheme").addEventListener("click", playCurrentTheme);
410
  $("stopPlayback").addEventListener("click", stopPlayback);
411
  $("generateButton").addEventListener("click", generate);
 
412
  $("refreshMidiOutputs").addEventListener("click", refreshMidiOutputs);
413
  $("midiOutputSelect").addEventListener("change", (event) => {
414
  state.midiOutputId = event.target.value;
@@ -420,6 +436,7 @@ function bindEvents() {
420
 
421
  async function init() {
422
  bindEvents();
 
423
  await loadStats();
424
  await loadThemes();
425
  }
 
297
  }
298
 
299
  function generationPayload() {
300
+ const engine = $("engineSelect").value;
301
+ const payload = {
302
  engine: $("engineSelect").value,
303
  samples: Number($("samplesInput").value),
304
  length: Number($("lengthInput").value),
305
  key: $("generateKey").value,
306
  seed: Number($("seedInput").value),
307
  endpoint_strength: Number($("endpointInput").value),
 
 
308
  };
309
+ if (engine === "markov") {
310
+ payload.max_order = Number($("orderInput").value);
311
+ } else {
312
+ payload.transformer_steps = Number($("stepsInput").value);
313
+ }
314
+ return payload;
315
+ }
316
+
317
+ function updateEngineControls() {
318
+ const engine = $("engineSelect").value;
319
+ for (const el of document.querySelectorAll(".markov-param")) {
320
+ el.classList.toggle("is-hidden", engine !== "markov");
321
+ }
322
+ for (const el of document.querySelectorAll(".transformer-param")) {
323
+ el.classList.toggle("is-hidden", engine !== "transformer");
324
+ }
325
  }
326
 
327
  async function generate() {
 
424
  $("playTheme").addEventListener("click", playCurrentTheme);
425
  $("stopPlayback").addEventListener("click", stopPlayback);
426
  $("generateButton").addEventListener("click", generate);
427
+ $("engineSelect").addEventListener("change", updateEngineControls);
428
  $("refreshMidiOutputs").addEventListener("click", refreshMidiOutputs);
429
  $("midiOutputSelect").addEventListener("change", (event) => {
430
  state.midiOutputId = event.target.value;
 
436
 
437
  async function init() {
438
  bindEvents();
439
+ updateEngineControls();
440
  await loadStats();
441
  await loadThemes();
442
  }
apps/theme_lab/static/index.html CHANGED
@@ -106,15 +106,15 @@
106
  <option value="transformer">Transformer</option>
107
  </select>
108
  </label>
109
- <label>
110
  <span>Samples</span>
111
  <input id="samplesInput" type="number" min="1" max="12" value="2" />
112
  </label>
113
- <label>
114
  <span>Length</span>
115
  <input id="lengthInput" type="number" min="4" max="64" value="24" />
116
  </label>
117
- <label>
118
  <span>Key</span>
119
  <select id="generateKey">
120
  <option>C</option>
@@ -127,19 +127,19 @@
127
  <option>Ab</option>
128
  </select>
129
  </label>
130
- <label>
131
  <span>Seed</span>
132
  <input id="seedInput" type="number" min="0" value="42" />
133
  </label>
134
- <label>
135
  <span>Endpoint</span>
136
  <input id="endpointInput" type="number" min="0" max="5" step="0.1" value="1.0" />
137
  </label>
138
- <label>
139
  <span>Order</span>
140
  <input id="orderInput" type="number" min="1" max="3" value="3" />
141
  </label>
142
- <label>
143
  <span>Transformer steps</span>
144
  <input id="stepsInput" type="number" min="10" max="1000" value="80" />
145
  </label>
 
106
  <option value="transformer">Transformer</option>
107
  </select>
108
  </label>
109
+ <label class="generator-param common-param">
110
  <span>Samples</span>
111
  <input id="samplesInput" type="number" min="1" max="12" value="2" />
112
  </label>
113
+ <label class="generator-param common-param">
114
  <span>Length</span>
115
  <input id="lengthInput" type="number" min="4" max="64" value="24" />
116
  </label>
117
+ <label class="generator-param common-param">
118
  <span>Key</span>
119
  <select id="generateKey">
120
  <option>C</option>
 
127
  <option>Ab</option>
128
  </select>
129
  </label>
130
+ <label class="generator-param common-param">
131
  <span>Seed</span>
132
  <input id="seedInput" type="number" min="0" value="42" />
133
  </label>
134
+ <label class="generator-param common-param">
135
  <span>Endpoint</span>
136
  <input id="endpointInput" type="number" min="0" max="5" step="0.1" value="1.0" />
137
  </label>
138
+ <label class="generator-param markov-param">
139
  <span>Order</span>
140
  <input id="orderInput" type="number" min="1" max="3" value="3" />
141
  </label>
142
+ <label class="generator-param transformer-param">
143
  <span>Transformer steps</span>
144
  <input id="stepsInput" type="number" min="10" max="1000" value="80" />
145
  </label>
apps/theme_lab/static/styles.css CHANGED
@@ -180,9 +180,7 @@ select {
180
  }
181
 
182
  .theme-list {
183
- display: grid;
184
  flex: 1;
185
- gap: 8px;
186
  min-height: 0;
187
  overflow: auto;
188
  padding-right: 2px;
@@ -190,16 +188,18 @@ select {
190
  }
191
 
192
  .theme-item {
193
- display: grid;
194
- gap: 5px;
195
  width: 100%;
 
196
  border: 1px solid var(--line);
197
  border-radius: 8px;
198
  background: #fff;
199
  color: var(--ink);
200
- padding: 10px;
 
201
  text-align: left;
202
  cursor: pointer;
 
203
  }
204
 
205
  .theme-item.active {
@@ -208,13 +208,30 @@ select {
208
  }
209
 
210
  .theme-item strong {
 
 
 
 
211
  line-height: 1.25;
 
 
 
 
 
 
 
 
 
 
 
 
212
  }
213
 
214
  .tag-row {
215
  display: flex;
216
  flex-wrap: wrap;
217
  gap: 5px;
 
218
  }
219
 
220
  .tag {
@@ -327,13 +344,17 @@ select {
327
 
328
  .generator-grid {
329
  display: grid;
330
- grid-template-columns: repeat(8, minmax(90px, 1fr));
331
  gap: 10px;
332
  }
333
 
 
 
 
 
334
  .generated-list {
335
  display: grid;
336
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
337
  gap: 12px;
338
  overflow: auto;
339
  }
@@ -353,17 +374,20 @@ select {
353
  }
354
 
355
  .sample-score {
356
- min-height: 150px;
 
357
  overflow: auto;
358
  border: 1px solid var(--line);
359
  border-radius: 6px;
 
360
  }
361
 
362
  .sample-score img {
363
  display: block;
364
- width: 100%;
365
- min-width: 420px;
366
- padding: 8px;
 
367
  }
368
 
369
  .code-line {
@@ -408,6 +432,11 @@ select {
408
  .generator-grid {
409
  grid-template-columns: repeat(2, minmax(120px, 1fr));
410
  }
 
 
 
 
 
411
  }
412
 
413
  @media (max-width: 520px) {
 
180
  }
181
 
182
  .theme-list {
 
183
  flex: 1;
 
184
  min-height: 0;
185
  overflow: auto;
186
  padding-right: 2px;
 
188
  }
189
 
190
  .theme-item {
191
+ display: block;
 
192
  width: 100%;
193
+ min-height: 0;
194
  border: 1px solid var(--line);
195
  border-radius: 8px;
196
  background: #fff;
197
  color: var(--ink);
198
+ padding: 9px 10px;
199
+ margin-bottom: 8px;
200
  text-align: left;
201
  cursor: pointer;
202
+ overflow: hidden;
203
  }
204
 
205
  .theme-item.active {
 
208
  }
209
 
210
  .theme-item strong {
211
+ display: -webkit-box;
212
+ overflow: hidden;
213
+ font-size: 14px;
214
+ font-weight: 700;
215
  line-height: 1.25;
216
+ text-overflow: ellipsis;
217
+ -webkit-box-orient: vertical;
218
+ -webkit-line-clamp: 2;
219
+ }
220
+
221
+ .theme-item p {
222
+ overflow: hidden;
223
+ margin-top: 3px;
224
+ font-size: 12px;
225
+ line-height: 1.25;
226
+ text-overflow: ellipsis;
227
+ white-space: nowrap;
228
  }
229
 
230
  .tag-row {
231
  display: flex;
232
  flex-wrap: wrap;
233
  gap: 5px;
234
+ margin-top: 6px;
235
  }
236
 
237
  .tag {
 
344
 
345
  .generator-grid {
346
  display: grid;
347
+ grid-template-columns: repeat(auto-fit, minmax(128px, 1fr));
348
  gap: 10px;
349
  }
350
 
351
+ .generator-param.is-hidden {
352
+ display: none;
353
+ }
354
+
355
  .generated-list {
356
  display: grid;
357
+ grid-template-columns: 1fr;
358
  gap: 12px;
359
  overflow: auto;
360
  }
 
374
  }
375
 
376
  .sample-score {
377
+ height: clamp(260px, 38vh, 420px);
378
+ min-height: 260px;
379
  overflow: auto;
380
  border: 1px solid var(--line);
381
  border-radius: 6px;
382
+ background: #fff;
383
  }
384
 
385
  .sample-score img {
386
  display: block;
387
+ width: 120%;
388
+ min-width: 900px;
389
+ max-width: none;
390
+ padding: 12px;
391
  }
392
 
393
  .code-line {
 
432
  .generator-grid {
433
  grid-template-columns: repeat(2, minmax(120px, 1fr));
434
  }
435
+
436
+ .sample-score img {
437
+ width: 140%;
438
+ min-width: 760px;
439
+ }
440
  }
441
 
442
  @media (max-width: 520px) {