This commit is contained in:
mike
2026-06-28 10:12:01 +02:00
parent 3386ec9e84
commit 10849ed21a
2 changed files with 66 additions and 16 deletions

View File

@@ -2305,6 +2305,21 @@
// --- HYDRATION_START --- // --- HYDRATION_START ---
const PRELOADED_IMAGES = [ const PRELOADED_IMAGES = [
"20260628_061520_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061440_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061355_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061322_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061249_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061152_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_061006_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_060550_sc_pad_20260627_213816_best_01_person_0.874_2026-06-27_12-18-49.nobg.png",
"20260628_060113_sc_best_00_person_0.874_2026-06-27_12-18-49.png",
"20260628_055858_sc_best_01_person_0.874_2026-06-27_12-18-49.png",
"_turntable/cg_7ec17537/views/20260628_055541_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_055501_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_055207_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_055134_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_054950_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_054328_sc_dup_20260628_033600_dup_view_000_000deg.png", "_turntable/cg_7ec17537/views/20260628_054328_sc_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_053717_sc_pad_20260628_035257_dup_20260628_033600_dup_view_000_000deg.nobg.nobg.nobg.png", "_turntable/cg_7ec17537/views/20260628_053717_sc_pad_20260628_035257_dup_20260628_033600_dup_view_000_000deg.nobg.nobg.nobg.png",
"_turntable/cg_7ec17537/views/20260628_053620_sc_pad_20260628_035257_dup_20260628_033600_dup_view_000_000deg.nobg.nobg.nobg.png", "_turntable/cg_7ec17537/views/20260628_053620_sc_pad_20260628_035257_dup_20260628_033600_dup_view_000_000deg.nobg.nobg.nobg.png",
@@ -3490,9 +3505,9 @@
"_turntable/cg_7ec17537/views/view_003_045deg.png", "_turntable/cg_7ec17537/views/view_003_045deg.png",
"_turntable/cg_7ec17537/views/view_002_030deg.png", "_turntable/cg_7ec17537/views/view_002_030deg.png",
"_turntable/cg_7ec17537/views/view_001_015deg.png", "_turntable/cg_7ec17537/views/view_001_015deg.png",
"_turntable/cg_7ec17537/views/20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/view_000_000deg.png", "_turntable/cg_7ec17537/views/view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_033831_dup_20260628_033600_dup_view_000_000deg.png", "_turntable/cg_7ec17537/views/20260628_033831_dup_20260628_033600_dup_view_000_000deg.png",
"_turntable/cg_7ec17537/views/20260628_033600_dup_view_000_000deg.png",
"_turntable/up_154b502c/views/view_023_345deg.png", "_turntable/up_154b502c/views/view_023_345deg.png",
"_turntable/up_154b502c/views/view_022_330deg.png", "_turntable/up_154b502c/views/view_022_330deg.png",
"_turntable/up_154b502c/views/view_021_315deg.png", "_turntable/up_154b502c/views/view_021_315deg.png",
@@ -4946,8 +4961,8 @@
"20260625_024438_dup_20260624_165109_0_20260622_091731_image.nobg.png", "20260625_024438_dup_20260624_165109_0_20260622_091731_image.nobg.png",
"20260625_023536_dup_20260624_165109_0_20260622_091731_image.nobg.png", "20260625_023536_dup_20260624_165109_0_20260622_091731_image.nobg.png",
"20260624_165109_0_20260622_091731_image.nobg.png", "20260624_165109_0_20260622_091731_image.nobg.png",
"20260625_023536_dup_20260624_165109_0_20260622_091731_image.png",
"20260624_165109_0_20260622_091731_image.png", "20260624_165109_0_20260622_091731_image.png",
"20260625_023536_dup_20260624_165109_0_20260622_091731_image.png",
"up_ab858b0a_face.png", "up_ab858b0a_face.png",
"20260625_022332_dup_20260625_022250_sc_image.png", "20260625_022332_dup_20260625_022250_sc_image.png",
"20260625_022250_sc_image.png", "20260625_022250_sc_image.png",
@@ -5146,8 +5161,8 @@
"20260624_182958_image.png", "20260624_182958_image.png",
"20260624_174900_image.png", "20260624_174900_image.png",
"20260624_174943_dup_20260624_173115_image.png", "20260624_174943_dup_20260624_173115_image.png",
"20260624_175711_dup_20260624_174943_dup_20260624_173115_image.png",
"20260624_173115_image.png", "20260624_173115_image.png",
"20260624_175711_dup_20260624_174943_dup_20260624_173115_image.png",
"20260624_174757_image.png", "20260624_174757_image.png",
"20260624_174442_image.png", "20260624_174442_image.png",
"20260624_172923_image.nobg.png", "20260624_172923_image.nobg.png",
@@ -5661,8 +5676,8 @@
"20260622_193411_1_20260622_193118_image.png", "20260622_193411_1_20260622_193118_image.png",
"20260622_193354_0_20260622_193118_image.png", "20260622_193354_0_20260622_193118_image.png",
"20260622_193118_image.png", "20260622_193118_image.png",
"20260622_212012_dup_20260622_181910_0_20260619_124038_image.png",
"20260622_181910_0_20260619_124038_image.png", "20260622_181910_0_20260619_124038_image.png",
"20260622_212012_dup_20260622_181910_0_20260619_124038_image.png",
"20260622_181734_0_20260619_124038_image.png", "20260622_181734_0_20260619_124038_image.png",
"20260622_181720_0_20260619_124038_image.png", "20260622_181720_0_20260619_124038_image.png",
"20260622_181634_0_20260619_124038_image.png", "20260622_181634_0_20260619_124038_image.png",
@@ -9831,6 +9846,9 @@
// --- clipboard paste support --- // --- clipboard paste support ---
window.addEventListener('paste', async (e) => { window.addEventListener('paste', async (e) => {
if (document.getElementById('studio').classList.contains('open') && _activeSidebarTab === 'scenery') {
return; // Let the document-level scenery paste listener handle this
}
const items = e.clipboardData.items; const items = e.clipboardData.items;
const files = []; const files = [];
for (const item of items) { for (const item of items) {
@@ -10780,6 +10798,28 @@
e.preventDefault(); e.preventDefault();
} }
}); });
// Clipboard paste image as background (Scenery tab)
document.addEventListener('paste', async e => {
if (!document.getElementById('studio').classList.contains('open')) return;
if (_activeSidebarTab !== 'scenery') return;
const items = (e.clipboardData || window.clipboardData)?.items;
if (!items) return;
for (const item of items) {
if (item.kind === 'file' && item.type.startsWith('image/')) {
const file = item.getAsFile();
if (file) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
await sceneUploadFile(file);
break;
}
}
}
});
}); });
// Privacy overlay — disguise the page as a study-chat on any focus loss. // Privacy overlay — disguise the page as a study-chat on any focus loss.
@@ -11722,12 +11762,14 @@
// ---- faceswap sidebar tab ---- // ---- faceswap sidebar tab ----
async function loadTemplateVideos() { async function loadTemplateVideos(forceFresh = false) {
let data = null; let data = null;
try { if (!forceFresh) {
const r = await fetch(`${API}/output/_data/videos.json`, { signal: AbortSignal.timeout(3000) }); try {
if (r.ok) { data = await r.json(); } const r = await fetch(`${API}/output/_data/videos.json`, { signal: AbortSignal.timeout(3000) });
} catch (_) {} if (r.ok) { data = await r.json(); }
} catch (_) {}
}
if (!data) { if (!data) {
try { try {
const r = await fetch(`${API}/videos`); const r = await fetch(`${API}/videos`);
@@ -12033,7 +12075,7 @@
const d = await r.json(); const d = await r.json();
showToast('Clip saved: ' + d.output_name, 'success'); showToast('Clip saved: ' + d.output_name, 'success');
availableVideos = []; availableVideos = [];
await loadTemplateVideos(); await loadTemplateVideos(true);
closeTrimPanel(); closeTrimPanel();
} catch (e) { if (statusEl) statusEl.textContent = 'Error: ' + e; } } catch (e) { if (statusEl) statusEl.textContent = 'Error: ' + e; }
} }
@@ -12500,7 +12542,7 @@
_sceneRefs[0] = { kind: 'wireframe', name: d.filename }; // background → slot 0 _sceneRefs[0] = { kind: 'wireframe', name: d.filename }; // background → slot 0
_sceneRefresh(); // show the frozen frame + update slot badge _sceneRefresh(); // show the frozen frame + update slot badge
// Reload template list so the new frame is instantly visible in the library // Reload template list so the new frame is instantly visible in the library
loadTemplateVideos().then(() => _sceneRefresh()); loadTemplateVideos(true).then(() => _sceneRefresh());
} }
} catch (e) { } catch (e) {
showToast('Frame extract error: ' + e, 'error'); showToast('Frame extract error: ' + e, 'error');
@@ -12508,10 +12550,7 @@
} }
} }
async function sceneHandleUpload(event) { async function sceneUploadFile(file) {
const file = event.target.files[0];
if (!file) return;
showToast('Uploading background image to wireframe folder…', 'info'); showToast('Uploading background image to wireframe folder…', 'info');
const fd = new FormData(); const fd = new FormData();
fd.append('image', file); fd.append('image', file);
@@ -12535,13 +12574,19 @@
// Force a reload of template videos so the newly uploaded file is visible in the library // Force a reload of template videos so the newly uploaded file is visible in the library
availableVideos = []; availableVideos = [];
await loadTemplateVideos(); await loadTemplateVideos(true);
_sceneRefresh(); _sceneRefresh();
} catch (e) { } catch (e) {
showToast('Upload error: ' + e, 'error'); showToast('Upload error: ' + e, 'error');
} }
} }
async function sceneHandleUpload(event) {
const file = event.target.files[0];
if (!file) return;
await sceneUploadFile(file);
}
function sceneLoadPoseToPrompt(poseName) { function sceneLoadPoseToPrompt(poseName) {
if (!poseName) return; if (!poseName) return;
const el = document.getElementById('scenePromptInput'); const el = document.getElementById('scenePromptInput');

View File

@@ -27,6 +27,11 @@ realistic.
Stand with legs slightly apart, knees relaxed. Slightly turn hips to the side, arching back to accentuate buttocks and pelvis depth. Tilt chin slightly upwards, showing teeth in a playful, confident smile. Tilt head slightly, revealing the ear. Relax shoulders and extend arms at sides, drawing attention to the silhouette of the torso. Keep knees slightly bent, creating a gentle, inviting curvature of the spine. Allow the chest to gently protrude, highlighting breast size and natural cleavage. Maintain a relaxed facial expression, eyes gazing forward with a hint of arouse. The primary focus Stand with legs slightly apart, knees relaxed. Slightly turn hips to the side, arching back to accentuate buttocks and pelvis depth. Tilt chin slightly upwards, showing teeth in a playful, confident smile. Tilt head slightly, revealing the ear. Relax shoulders and extend arms at sides, drawing attention to the silhouette of the torso. Keep knees slightly bent, creating a gentle, inviting curvature of the spine. Allow the chest to gently protrude, highlighting breast size and natural cleavage. Maintain a relaxed facial expression, eyes gazing forward with a hint of arouse. The primary focus
should be on the exposed genitals, capturing their natural form and contours with utmost clarity. Perfect anatomy, hyper realistic. should be on the exposed genitals, capturing their natural form and contours with utmost clarity. Perfect anatomy, hyper realistic.
# Scene replace (18)
naturally replace the single female from Image 1 with the teenage female from image 2.
Keep characteristics of person in Image 2
# Undress # Undress
masterpiece, high quality, masterpiece, high quality,