Spaces:
Sleeping
Sleeping
Refine Theme Lab layout controls
Browse files- apps/theme_lab/static/app.js +20 -3
- apps/theme_lab/static/index.html +7 -7
- apps/theme_lab/static/styles.css +40 -11
apps/theme_lab/static/app.js
CHANGED
|
@@ -297,16 +297,31 @@ async function playCurrentTheme() {
|
|
| 297 |
}
|
| 298 |
|
| 299 |
function generationPayload() {
|
| 300 |
-
|
|
|
|
| 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:
|
| 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(
|
| 331 |
gap: 10px;
|
| 332 |
}
|
| 333 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
.generated-list {
|
| 335 |
display: grid;
|
| 336 |
-
grid-template-columns:
|
| 337 |
gap: 12px;
|
| 338 |
overflow: auto;
|
| 339 |
}
|
|
@@ -353,17 +374,20 @@ select {
|
|
| 353 |
}
|
| 354 |
|
| 355 |
.sample-score {
|
| 356 |
-
|
|
|
|
| 357 |
overflow: auto;
|
| 358 |
border: 1px solid var(--line);
|
| 359 |
border-radius: 6px;
|
|
|
|
| 360 |
}
|
| 361 |
|
| 362 |
.sample-score img {
|
| 363 |
display: block;
|
| 364 |
-
width:
|
| 365 |
-
min-width:
|
| 366 |
-
|
|
|
|
| 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) {
|