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 `