From bf3773bfd47561df688055026929d79bb7004b5b Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 27 Jun 2026 23:36:41 +0200 Subject: [PATCH] reorder --- tour-comfy/car.html | 75 +++++++++++++++++++++++++++++++++++------- tour-comfy/edit_api.py | 6 ++-- tour-comfy/poses.md | 13 ++++---- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/tour-comfy/car.html b/tour-comfy/car.html index 93706d5..655e959 100644 --- a/tour-comfy/car.html +++ b/tour-comfy/car.html @@ -2004,9 +2004,9 @@
@@ -2220,6 +2220,18 @@ // --- HYDRATION_START --- const PRELOADED_IMAGES = [ + "20260627_232843_pad_20260626_035101_pad_20260626_034830_jb.nobg.png", + "20260627_232502_pad_20260626_035101_pad_20260626_034830_jb.nobg.png", + "20260627_232526_pad_20260626_035101_pad_20260626_034830_jb.nobg.png", + "20260627_232302_pad_20260627_232133_image.png", + "20260627_232238_pad_20260627_232133_image.png", + "up_6ed4293c_face.png", + "20260627_232209_image.png", + "20260627_232151_image.png", + "20260627_232133_image.png", + "20260627_230405_mr_image.png", + "20260627_222806_mr_image.png", + "20260627_230301_7_20260627_201343_image.nobg.png", "20260627_201629_7_20260627_201343_image.nobg.png", "20260627_201629_7_20260627_201343_image.png", "20260627_225051_mr_image.png", @@ -2234,7 +2246,6 @@ "20260627_222926_image.png", "20260627_222915_image.png", "20260627_222904_image.png", - "20260627_222806_mr_image.png", "20260627_222321_image.png", "20260627_222310_image.png", "20260627_222259_image.png", @@ -6733,6 +6744,7 @@ let _sbGenJobId = null; let _sbGenJobPollTimer= null; let _followLatestGid = null; // set to gid after generation to auto-jump to newest image + let _followLatestFilename = null; let _slideshowActive = false; let _slideshowTimer = null; let _slideshowInterval= 4000; @@ -6881,6 +6893,27 @@ return val.toFixed(2); } + function syncPadFields(el) { + const id = el.id; // padLeft or sbPadLeft + let pairId = null; + if (id.endsWith('Left')) pairId = id.replace('Left', 'Right'); + else if (id.endsWith('Right')) pairId = id.replace('Right', 'Left'); + else if (id.endsWith('Top')) pairId = id.replace('Top', 'Bottom'); + else if (id.endsWith('Bottom')) pairId = id.replace('Bottom', 'Top'); + + if (pairId) { + const pairEl = document.getElementById(pairId); + // only sync if the other side is 'empty' (0) + if (pairEl && (pairEl.value === '0.00' || pairEl.value === '0' || pairEl.value === '')) { + pairEl.value = el.value; + } + } + if (id.startsWith('sbPad')) { + updateSbGenBtn(); + } + updatePadPreview(); + } + function updatePadPreview() { const viewer = document.getElementById('studioViewer'); if (!viewer) return; @@ -8163,7 +8196,7 @@ bar.id = 'padBar'; bar.style.cssText = 'position:absolute;top:0;left:0;right:0;display:flex;gap:8px;padding:8px;background:rgba(0,0,0,0.85);z-index:101;justify-content:flex-end;align-items:center;flex-wrap:wrap;'; const numInput = (id, label) => { - const onInput = `updatePadPreview()`; + const onInput = `syncPadFields(this)`; const onBlur = `this.value = formatPadValue(this.value); updatePadPreview()`; return ``; }; @@ -8174,9 +8207,9 @@ + numInput('padBottom','↓') + numInput('padLeft','←') + `` + `` @@ -8204,7 +8237,7 @@ const isZero = (v) => !v || v === '0' || v === '0%' || v === '0px'; if (isZero(top) && isZero(right) && isZero(bottom) && isZero(left)) { showToast('Enter at least one padding value', 'info'); return; } - const fill = document.getElementById('padFill')?.value || 'black'; + const fill = document.getElementById('padFill')?.value || 'transparent'; const asCopy = document.getElementById('padAsCopy')?.checked ?? true; const outpaint = document.getElementById('padOutpaint')?.checked ?? false; const btn = document.getElementById('padConfirmBtn'); @@ -8241,6 +8274,7 @@ } updateStudio(); + _followLatestFilename = newFn; _followLatestGid = lbCurrentGid; refreshNow(true); } else { @@ -9184,8 +9218,15 @@ const visibleIdx = names.map((n, i) => i).filter(i => !fileHidden[names[i]]); groupData.set(gid, { urls, names, visibleIdx }); - // Auto-follow: if a generation just finished for this group, jump to the last (newest) image - if (_followLatestGid === gid && _isStudioOpen() && lbCurrentGid === gid && names.length > 0) { + // Auto-follow: if a generation just finished for this group, jump to the image + if (_followLatestFilename && names.includes(_followLatestFilename) && _isStudioOpen() && lbCurrentGid === gid) { + lbIdx = names.indexOf(_followLatestFilename); + _followLatestFilename = null; + _followLatestGid = null; + lbUrls = urls; + lbNames = names; + updateStudio(); + } else if (_followLatestGid === gid && _isStudioOpen() && lbCurrentGid === gid && names.length > 0) { _followLatestGid = null; lbIdx = names.length - 1; lbUrls = urls; @@ -9777,6 +9818,15 @@ if ((e.key === 'p' || e.key === 'P') && tag !== 'INPUT' && tag !== 'TEXTAREA') { togglePrivacyMode(); return; } + if ((e.key === 'c' || e.key === 'C') && tag !== 'INPUT' && tag !== 'TEXTAREA') { + if (document.getElementById('studio').classList.contains('open')) { + const cb = document.getElementById('sbCheckerboard'); + const viewer = document.getElementById('studioViewer'); + const cur = viewer ? viewer.classList.contains('show-checker') : (cb ? cb.checked : false); + toggleCheckerboard(!cur); + return; + } + } if ((e.key === 'a' || e.key === 'A') && tag !== 'INPUT' && tag !== 'TEXTAREA') { if (document.getElementById('studio').classList.contains('open')) { startManualPad(); return; @@ -10178,7 +10228,7 @@ Pad: ${['Top','Right','Bottom','Left'].map(side => { const val = side==='Top'?_sbPadTop:side==='Right'?_sbPadRight:side==='Bottom'?_sbPadBottom:_sbPadLeft; - const onInput = `updateSbGenBtn(); updatePadPreview()`; + const onInput = `syncPadFields(this)`; const onBlur = `this.value = formatPadValue(this.value); ${onInput}`; return `