update poses

This commit is contained in:
mike
2026-06-22 19:00:19 +02:00
parent c0d863ee09
commit 9e99c85134
6 changed files with 691 additions and 77 deletions

View File

@@ -22,4 +22,8 @@ delete button gets disabled after a delete
extract a frame from a clip (scenery)
faceswap defaults nothing enabled, see jobs even when refresh
pose bestaat gewoon uit meerdere delen, camera, scenery + addition
pose bestaat gewoon uit meerdere delen, camera, scenery + addition
focus op head + sam2.hyria seg + mesh
add photo to collection (zonder nieuwe groep)

View File

@@ -58,3 +58,20 @@ back flat on the ground, hips centered.
head tilted back, throat exposed.
Looking upward, not at camera. Vulnerable, displayed.
Perfect anatomy, realistic
# Single Steel Bar — Behind Knees, Through Elbows, Prone Display
You are in black void, folded over a single solid steel bar. One polished steel rod passing behind your knees and through your bent elbows, holding your legs bent and your arms pinned behind your back simultaneously.
Your body draped face-down over this single bar, chest hanging, posterior elevated. Ankles cuffed together below the bar.
Wrists cuffed together above the bar. One bar, two cuffs. Your body folded into a tight prone package, dorsal plane fully presented. Floating examination light above.
Eyes looking sideways at camera, keeping your facial characteristics as reference photo. One bar, full posterior examination access. Realistic, anatomically precise.
# Single Steel Pillory — Standing Bent, Neck and Wrists
You are bent forward at the waist in black void, locked into a single solid steel pillory. One heavy polished steel board, floating horizontally. Three holes: your neck locked in the center, your wrists locked to either side. The board holds you at hip height, torso parallel to the void floor. Your ankles cuffed together by a solid steel bar. No stand, no support — the pillory floats and you are fixed within it. Posterior fully exposed behind you. Floating examination light. Eyes looking forward at camera from beneath the board, keeping your facial characteristics as reference photo. One board, total bent immobilization. Realistic, anatomically precise.
# Single Steel Hook — Suspended by the Waist, Arms and Legs Free
You are suspended in black void from a single solid steel hook. One polished steel curve descending from the darkness above, its blunt tip passing under a steel band cinched around your waist. Your body hangs horizontally, face down, arms and legs dangling free but separated by gravity. Ankles weighted by small steel cuffs, pulling your legs slightly apart. Wrists weighted by matching cuffs, pulling your arms forward. No other support. You hang from one hook, one band. Body suspended in full extension, all surfaces accessible. Floating examination light beneath you. Eyes looking at camera from your suspended position, keeping your facial characteristics as reference photo. One hook, full circumferential examination access. Realistic, anatomically precise.
# Single Steel Ring — Wrists and Ankles Behind, Kneeling Open
You are kneeling in black void. A single solid steel ring, polished and seamless, floating behind your back. Your wrists locked into the ring at the top. Your ankles locked into the ring at the bottom, legs spread wide by its diameter. No other material. One ring, four limbs converged behind you. Your body folded forward, chest toward the void floor, posterior elevated and fully exposed. A floating examination light illuminates your open dorsal plane. Full access for examination. Eyes looking back at camera over your shoulder, keeping your facial characteristics as reference photo. One ring, absolute exposure, minimal material. Realistic, anatomically precise.

View File

@@ -1675,6 +1675,7 @@
<button class="btn" onclick="setIntervalTime(30)">30s</button>
<button class="btn" onclick="setIntervalTime(120)">2m</button>
<button class="btn primary" onclick="refreshNow()">Refresh Now</button>
<button class="btn" id="archiveViewBtn" onclick="toggleArchiveView()" title="View archived items">📦 Archive</button>
<button class="btn" id="selectBtn" onclick="toggleSelectMode()">Select</button>
<button class="btn" id="privacyBtn" onclick="togglePrivacyMode()" title="Privacy mode — hides content on focus loss (P)">🔓</button>
<button class="btn" onclick="cleanupDb()" title="Remove DB records for deleted/missing files" style="font-size:11px;opacity:0.6">Clean DB</button>
@@ -1745,6 +1746,16 @@
</div>
<!-- Film strip / variant thumbnails -->
<div class="studio-filmstrip" id="lbVariantStrip"></div>
<!-- Slideshow controls -->
<div id="slideshowBar" style="display:flex;align-items:center;gap:6px;padding:4px 8px;background:#111;border-top:1px solid #1a1a1a;flex-shrink:0">
<button onclick="toggleSlideshow()" id="slideshowBtn" style="background:none;border:1px solid #333;color:#888;font-size:11px;padding:2px 8px;border-radius:4px;cursor:pointer">▶ Slideshow</button>
<select id="slideshowInterval" onchange="updateSlideshowInterval()" style="background:#111;border:1px solid #333;color:#888;font-size:11px;padding:2px 4px;border-radius:4px">
<option value="2000">2s</option>
<option value="4000" selected>4s</option>
<option value="8000">8s</option>
<option value="15000">15s</option>
</select>
</div>
</div>
<!-- Sidebar toolbox -->
@@ -1791,7 +1802,9 @@
<button class="sb-btn" id="lbNoBgBtn" onclick="lbRemoveBg()">No BG</button>
<button class="sb-btn" id="lbCropBtn" style="display:none" onclick="lbAutoCrop()" title="Crop away transparent border">Crop</button>
<button class="sb-btn" id="lbDuplicateBtn" onclick="lbDuplicate()" title="Duplicate image into same group">Duplicate</button>
<button class="sb-btn" id="lbManualCropBtn" onclick="startManualCrop()" title="Drag to crop image">Crop…</button>
<a class="sb-btn" id="lbDownloadBtn" download style="text-decoration:none">Download</a>
<button class="sb-btn" id="lbArchiveBtn" onclick="lbArchive()" style="color:#f59e0b" title="Move to archive (recoverable)">Archive</button>
<button class="sb-btn danger" id="lbDeleteBtn" onclick="lbDeleteArm()" title="Click once to arm, then again to confirm">Delete</button>
</div>
<div id="lbSourceRefs" class="sb-source-refs" style="display:none"></div>
@@ -1821,6 +1834,7 @@
<button class="btn" onclick="deselectAll()">None</button>
<button class="btn" id="groupBtn" onclick="groupSelected()">Group</button>
<button class="btn" id="multiRefBtn" onclick="processMultiRef()" style="display:none" title="Use selected (23) as combined references → single output">Multi-ref</button>
<span id="multiRefLegend" style="display:none;font-size:10px;color:#888;white-space:nowrap"></span>
<button class="btn primary" id="processBtn" onclick="processSelected()">Process</button>
<span class="batch-progress" id="batchProgress"></span>
<button class="btn" onclick="toggleSelectMode()">Done</button>
@@ -2116,6 +2130,8 @@
let filePoses = {}; // filename → pose name
let filePrompts = {}; // filename → generation prompt
let fileHidden = {}; // filename → boolean (hidden from cycling)
let fileArchived = {}; // filename → boolean
let _archiveViewActive = false; // when true, show archived items only
let fileHasBg = {}; // filename → boolean (has background, default true)
let fileSourceRefs = {}; // filename → array of source filenames
let fileHasClothing = {}; // filename → boolean|null (null = unknown)
@@ -2134,6 +2150,10 @@
let _sbPoseEdits = {}; // poseName → edited text
let _sbGenJobId = null;
let _sbGenJobPollTimer= null;
let _followLatestGid = null; // set to gid after generation to auto-jump to newest image
let _slideshowActive = false;
let _slideshowTimer = null;
let _slideshowInterval= 4000;
let _fsTrimVideo = null;
function escHtml(s) {
@@ -2239,6 +2259,36 @@
function closeStudio() {
document.getElementById('studio').classList.remove('open');
document.body.style.overflow = '';
stopSlideshow();
}
function toggleSlideshow() {
if (_slideshowActive) stopSlideshow();
else startSlideshow();
}
function startSlideshow() {
if (_slideshowTimer) clearInterval(_slideshowTimer);
_slideshowActive = true;
const btn = document.getElementById('slideshowBtn');
if (btn) { btn.textContent = '⏸ Pause'; btn.style.color = '#60a5fa'; }
_slideshowTimer = setInterval(() => {
if (lbUrls.length > 1) { lbIdx = (lbIdx + 1) % lbUrls.length; updateStudio(); }
}, _slideshowInterval);
}
function stopSlideshow() {
_slideshowActive = false;
clearInterval(_slideshowTimer);
_slideshowTimer = null;
const btn = document.getElementById('slideshowBtn');
if (btn) { btn.textContent = '▶ Slideshow'; btn.style.color = ''; }
}
function updateSlideshowInterval() {
const sel = document.getElementById('slideshowInterval');
if (sel) _slideshowInterval = parseInt(sel.value, 10);
if (_slideshowActive) startSlideshow(); // restart with new interval
}
function lbNav(dir) {
@@ -2304,6 +2354,8 @@
if (faceswapBtn)faceswapBtn.style.display = !isVid ? '' : 'none';
const cropBtn = document.getElementById('lbCropBtn');
if (cropBtn) cropBtn.style.display = (!isVid && fileHasBg[fname] === false) ? '' : 'none';
const archiveBtn = document.getElementById('lbArchiveBtn');
if (archiveBtn) archiveBtn.textContent = fileArchived[fname] ? 'Restore' : 'Archive';
// Source refs
const refs = fileSourceRefs[fname];
@@ -2521,6 +2573,60 @@
}
}
async function lbArchive() {
const fname = lbNames[lbIdx];
if (!fname) return;
const btn = document.getElementById('lbArchiveBtn');
if (btn) btn.disabled = true;
try {
const endpoint = fileArchived[fname] ? 'unarchive' : 'archive';
const r = await fetch(`${API}/images/${encodeURIComponent(fname)}/${endpoint}`, { method: 'POST' });
if (r.ok) {
fileArchived[fname] = !fileArchived[fname];
const action = fileArchived[fname] ? 'Archived' : 'Restored';
showToast(`${action}: ${fname}`, 'success');
// Remove from current filmstrip view and navigate
lbUrls.splice(lbIdx, 1);
lbNames.splice(lbIdx, 1);
if (lbNames.length === 0) {
closeStudio();
refreshNow();
} else {
lbIdx = Math.min(lbIdx, lbNames.length - 1);
updateStudio();
refreshNow();
}
} else {
showToast('Archive failed', 'error');
}
} catch (e) { showToast('Archive error: ' + e, 'error'); }
if (btn) btn.disabled = false;
}
function toggleArchiveView() {
_archiveViewActive = !_archiveViewActive;
const btn = document.getElementById('archiveViewBtn');
if (btn) {
btn.textContent = _archiveViewActive ? '📦 Back to Gallery' : '📦 Archive';
btn.style.color = _archiveViewActive ? '#f59e0b' : '';
}
// Show/hide archive banner
let banner = document.getElementById('archiveBanner');
if (_archiveViewActive) {
if (!banner) {
banner = document.createElement('div');
banner.id = 'archiveBanner';
banner.style.cssText = 'background:#7c3aed22;border:1px solid #7c3aed;border-radius:6px;padding:8px 14px;font-size:12px;color:#a78bfa;margin:8px 0;text-align:center';
banner.textContent = '📦 Viewing archived items — these are hidden from the main gallery';
const gallery = document.getElementById('gallery');
if (gallery) gallery.parentNode.insertBefore(banner, gallery);
}
} else {
if (banner) banner.remove();
}
refreshNow();
}
async function lbAutoCrop() {
const fname = lbNames[lbIdx];
if (!fname) return;
@@ -2539,6 +2645,120 @@
if (btn) { btn.disabled = false; btn.textContent = 'Crop'; }
}
function startManualCrop() {
const fname = lbNames[lbIdx];
if (!fname || !/\.(png|jpg|jpeg|webp)$/i.test(fname)) { showToast('Select an image to crop', 'info'); return; }
const viewer = document.getElementById('studioViewer');
const img = document.getElementById('lbImg');
if (!img || img.style.display === 'none') { showToast('No image displayed', 'info'); return; }
if (document.getElementById('cropCanvas')) return; // already active
const canvas = document.createElement('canvas');
canvas.id = 'cropCanvas';
canvas.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;z-index:100;';
viewer.appendChild(canvas);
const bar = document.createElement('div');
bar.id = 'cropBar';
bar.style.cssText = 'position:absolute;bottom:0;left:0;right:0;display:flex;gap:8px;padding:8px;background:rgba(0,0,0,0.75);z-index:101;justify-content:flex-end;align-items:center;';
bar.innerHTML = '<span style="flex:1;font-size:11px;color:#aaa">Drag to select crop area</span>'
+ '<button class="sb-btn" onclick="cancelManualCrop()">Cancel</button>'
+ '<button class="sb-btn primary" id="cropConfirmBtn" disabled onclick="confirmManualCrop()">Crop</button>';
viewer.appendChild(bar);
const st = window._cropState = { canvas, viewer, img, fname, x1: 0, y1: 0, x2: 0, y2: 0, dragging: false };
function resize() { canvas.width = viewer.clientWidth; canvas.height = viewer.clientHeight; draw(); }
function draw() {
const ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
const w = Math.abs(st.x2 - st.x1), h = Math.abs(st.y2 - st.y1);
if (w < 2 || h < 2) return;
const rx = Math.min(st.x1, st.x2), ry = Math.min(st.y1, st.y2);
ctx.fillStyle = 'rgba(0,0,0,0.5)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.clearRect(rx, ry, w, h);
ctx.strokeStyle = '#fff';
ctx.lineWidth = 1.5;
ctx.strokeRect(rx + 0.5, ry + 0.5, w - 1, h - 1);
}
st.draw = draw;
canvas.addEventListener('mousedown', e => {
const r = canvas.getBoundingClientRect();
st.x1 = st.x2 = e.clientX - r.left;
st.y1 = st.y2 = e.clientY - r.top;
st.dragging = true;
const cb = document.getElementById('cropConfirmBtn');
if (cb) cb.disabled = true;
});
canvas.addEventListener('mousemove', e => {
if (!st.dragging) return;
const r = canvas.getBoundingClientRect();
st.x2 = e.clientX - r.left;
st.y2 = e.clientY - r.top;
draw();
});
canvas.addEventListener('mouseup', () => {
st.dragging = false;
draw();
const w = Math.abs(st.x2 - st.x1), h = Math.abs(st.y2 - st.y1);
const cb = document.getElementById('cropConfirmBtn');
if (cb) cb.disabled = (w < 5 || h < 5);
});
resize();
}
function cancelManualCrop() {
document.getElementById('cropCanvas')?.remove();
document.getElementById('cropBar')?.remove();
window._cropState = null;
}
async function confirmManualCrop() {
const st = window._cropState;
if (!st) return;
const { canvas, img, fname } = st;
// Convert canvas rect → image pixel coords (account for object-fit: contain letterbox)
const cW = canvas.width, cH = canvas.height;
const iW = img.naturalWidth, iH = img.naturalHeight;
const scale = Math.min(cW / iW, cH / iH);
const dW = iW * scale, dH = iH * scale;
const offX = (cW - dW) / 2, offY = (cH - dH) / 2;
const toImg = (cx, cy) => ({
x: Math.round(Math.max(0, Math.min(iW, (cx - offX) / scale))),
y: Math.round(Math.max(0, Math.min(iH, (cy - offY) / scale))),
});
const p1 = toImg(Math.min(st.x1, st.x2), Math.min(st.y1, st.y2));
const p2 = toImg(Math.max(st.x1, st.x2), Math.max(st.y1, st.y2));
if (p2.x - p1.x < 2 || p2.y - p1.y < 2) { showToast('Crop area too small', 'info'); return; }
const btn = document.getElementById('cropConfirmBtn');
if (btn) { btn.disabled = true; btn.textContent = 'Cropping…'; }
try {
const r = await fetch(`${API}/images/${encodeURIComponent(fname)}/crop`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y }),
});
if (r.ok) {
showToast('Cropped', 'success');
cancelManualCrop();
lbUrls[lbIdx] = IMAGE_FOLDER + fname + '?t=' + Date.now();
updateStudio();
} else {
showToast('Crop failed: ' + await r.text(), 'error');
if (btn) { btn.disabled = false; btn.textContent = 'Crop'; }
}
} catch (e) {
showToast('Crop error: ' + e, 'error');
if (btn) { btn.disabled = false; btn.textContent = 'Crop'; }
}
}
async function lbDuplicate() {
const fname = lbNames[lbIdx];
if (!fname) return;
@@ -2671,11 +2891,11 @@
}
});
function showToast(message, type = 'info') {
function showToast(message, type = 'info', duration = 3000) {
const toast = document.getElementById('toast');
toast.textContent = message;
toast.className = `toast ${type} show`;
setTimeout(() => toast.classList.remove('show'), 3000);
setTimeout(() => toast.classList.remove('show'), duration);
}
function formatTime(date) {
@@ -2747,7 +2967,8 @@
// Primary: live list from API (always up to date, works after batch jobs)
try {
const r = await fetch(`${API}/images`, { signal: AbortSignal.timeout(12000) });
const url = _archiveViewActive ? `${API}/images?archived=true` : `${API}/images`;
const r = await fetch(url, { signal: AbortSignal.timeout(12000) });
if (r.ok) {
const data = await r.json();
files = data.images.map(img => img.filename);
@@ -2760,6 +2981,7 @@
if (img.group_name && img.group_id) groupNames[img.group_id] = img.group_name;
fileSortOrders[img.filename] = img.sort_order ?? null;
fileHidden[img.filename] = !!img.hidden;
fileArchived[img.filename] = !!img.archived;
fileHasBg[img.filename] = img.has_background !== false;
fileHasClothing[img.filename] = img.has_clothing ?? null;
fileContentType[img.filename] = img.content_type || 'image';
@@ -2840,6 +3062,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) {
_followLatestGid = null;
lbIdx = names.length - 1;
lbUrls = urls;
lbNames = names;
updateStudio();
}
const isNew = gf.some(f => newFileNames.has(f.cleanName));
const isRecent = gIdx < 3;
const count = gf.length;
@@ -3137,7 +3368,23 @@
const n = selectedFiles.size;
document.getElementById('batchCount').textContent = `${n} group${n !== 1 ? 's' : ''} selected`;
document.getElementById('processBtn').textContent = n > 0 ? `Process (${n})` : 'Process';
document.getElementById('multiRefBtn').style.display = (n >= 2 && n <= 3) ? '' : 'none';
const showMR = (n >= 2 && n <= 3);
document.getElementById('multiRefBtn').style.display = showMR ? '' : 'none';
const legend = document.getElementById('multiRefLegend');
if (legend) {
if (showMR) {
const names = [...selectedFiles].map((gid, i) => {
const data = groupData.get(gid);
const idx = selectedVariants.get(gid) ?? 0;
const fname = data?.names[idx] ?? gid;
return `ref${i+1}=${fname.split('/').pop().replace(/\?.*$/,'').slice(0,24)}`;
});
legend.textContent = names.join(' · ');
legend.style.display = '';
} else {
legend.style.display = 'none';
}
}
}
function selectAll() {
@@ -3226,6 +3473,12 @@
if (prompt) { prompts.push(prompt); poses.push(null); savePromptHistory(prompt); }
poseEntries.forEach(e => { prompts.push(e.text); poses.push(e.name); });
// Show which filename maps to which ref slot
const shortName = f => f.split('/').pop().replace(/\?.*$/, '');
let refLabel = `Ref1: ${shortName(filenames[0])} Ref2: ${shortName(filenames[1])}`;
if (filenames[2]) refLabel += ` Ref3: ${shortName(filenames[2])}`;
showToast(refLabel, 'info', 5000);
document.getElementById('batchProgress').textContent = 'Submitting…';
try {
const r = await fetch(`${API}/multi-ref`, {
@@ -3697,8 +3950,12 @@
const job = await jr.json();
const finished = job.done + job.failed;
textEl.textContent = `Generating… ${finished}/${total}`;
// Refresh UI as each task completes
if (job.done > prevDone) { prevDone = job.done; refreshNow(); }
// Refresh UI as each task completes; auto-follow to newest image
if (job.done > prevDone) {
prevDone = job.done;
_followLatestGid = lbCurrentGid;
refreshNow();
}
if (job.status === 'running') { pollGen(); return; }
if (job.status === 'cancelled') {
statusEl.style.display = 'none';
@@ -3715,6 +3972,7 @@
_fsSelectedPoses.clear();
_sbPoseEdits = {};
_sbGenJobId = null;
_followLatestGid = lbCurrentGid;
refreshNow();
renderSidebarGenerate();
} else {
@@ -3804,7 +4062,7 @@
const vSafe = v.replace(/'/g, "\\'");
const sel = _fsSelectedVideo === v ? ' selected' : '';
html += `<div class="sb-template-card${sel}" onclick="sbSelectTemplate('${vSafe}')"
onmouseenter="this.querySelector('video').play()" onmouseleave="this.querySelector('video').pause()">
onmouseenter="const v=this.querySelector('video');v&&v.play().catch(()=>{})" onmouseleave="const v=this.querySelector('video');v&&v.pause()">
<video src="${API}/wireframe/${encodeURIComponent(v)}" muted loop playsinline
preload="metadata" style="pointer-events:none;width:100%;height:100%;object-fit:cover"></video>
<div class="sb-template-label">${escHtml(stem)}</div>
@@ -3825,6 +4083,17 @@
<span>FaceFusion</span>
<span id="sbFsHairBadge" style="font-size:10px;color:#f87;background:#2a1a1a;padding:1px 5px;border-radius:3px">not installed</span>
</label>
<label style="display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer" title="Generate at lower resolution for quick preview">
<input type="checkbox" id="sbFsPreview" onchange="document.getElementById('sbFsPreviewOpts').style.display=this.checked?'flex':'none'">
<span>Preview mode</span>
</label>
<div id="sbFsPreviewOpts" style="display:none;align-items:center;gap:6px;padding-left:20px">
<span style="font-size:11px;color:#888">Scale:</span>
<select id="sbFsPreviewScale" style="font-size:11px;background:#1a1a1a;color:#ccc;border:1px solid #333;border-radius:3px;padding:1px 4px">
<option value="0.5">50%</option>
<option value="0.25">25%</option>
</select>
</div>
</div>
<div style="display:flex;align-items:center;gap:8px">
<span id="sbFsJobStatus" style="flex:1;font-size:11px;color:#888;display:none">
@@ -3865,21 +4134,26 @@
async function submitFaceswap() {
if (!_fsModelFilename || !_fsSelectedVideo) return;
const enhance = document.getElementById('sbFsEnhance')?.checked ?? true;
const hairEl = document.getElementById('sbFsHair');
const hair = (hairEl?.checked && !hairEl?.disabled) ?? false;
const enhance = document.getElementById('sbFsEnhance')?.checked ?? true;
const hairEl = document.getElementById('sbFsHair');
const hair = (hairEl?.checked && !hairEl?.disabled) ?? false;
const previewCb = document.getElementById('sbFsPreview');
const previewScale = (previewCb?.checked)
? parseFloat(document.getElementById('sbFsPreviewScale')?.value ?? '0.5')
: 1.0;
const btn = document.getElementById('sbFsStartBtn');
if (btn) { btn.disabled = true; btn.textContent = 'Starting…'; }
const statusEl = document.getElementById('sbFsJobStatus');
const textEl = document.getElementById('sbFsJobText');
if (statusEl) statusEl.style.display = 'inline-flex';
const modeLabel = hair ? 'FaceFusion + hair' : (enhance ? 'insightface + enhance' : 'insightface');
const prevTag = previewScale < 1.0 ? ` preview ${Math.round(previewScale * 100)}%` : '';
const modeLabel = (hair ? 'FaceFusion + hair' : (enhance ? 'insightface + enhance' : 'insightface')) + prevTag;
if (textEl) textEl.textContent = `Starting (${modeLabel})…`;
try {
const r = await fetch(`${API}/faceswap`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model_filename: _fsModelFilename, video_name: _fsSelectedVideo, enhance, hair }),
body: JSON.stringify({ model_filename: _fsModelFilename, video_name: _fsSelectedVideo, enhance, hair, preview_scale: previewScale }),
});
if (!r.ok) {
if (textEl) textEl.textContent = `Error: ${await r.text()}`;
@@ -4038,7 +4312,7 @@
const vSafe = v.replace(/'/g, "\\'");
const sel = _sceneVideo === v ? ' selected' : '';
html += `<div class="sb-template-card${sel}" onclick="sceneSelectVideo('${vSafe}')"
onmouseenter="this.querySelector('video').play()" onmouseleave="this.querySelector('video').pause()">
onmouseenter="const v=this.querySelector('video');v&&v.play().catch(()=>{})" onmouseleave="const v=this.querySelector('video');v&&v.pause()">
<video src="${API}/wireframe/${encodeURIComponent(v)}" muted loop playsinline
preload="metadata" style="pointer-events:none;width:100%;height:100%;object-fit:cover"></video>
<div class="sb-template-label">${escHtml(stem)}</div>
@@ -4270,7 +4544,8 @@
simply shows the original again without any file change.
</div>
<div style="display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap">
<button class="sb-btn" id="sbSam2Btn" onclick="sam2RemoveBg()">Remove BG</button>
<button class="sb-btn" id="sbSam2Btn" onclick="sam2RemoveBg()" title="SAM2 segmentation — preserves hair/glasses/accessories; falls back to rembg if unavailable">Remove BG (SAM2)</button>
<button class="sb-btn" id="sbRembgBtn" onclick="rembgRemoveBg()" title="rembg (U2Net) — fast background removal without SAM2">Remove BG (rembg)</button>
<button class="sb-btn" id="sbRestoreBgBtn" onclick="restoreBg()">Restore BG</button>
</div>
<div id="sbSegStatus" style="font-size:11px;color:#aaa;min-height:16px;margin-bottom:10px"></div>
@@ -4281,7 +4556,8 @@
</label>
<div style="font-size:10px;color:#555;line-height:1.4">
SAM2 merges all non-border masks (preserves hair, glasses, sandals).<br>
Requires sam2_checkpoint in config.json.
rembg (U2Net) is faster and works without SAM2 checkpoint.<br>
Requires sam2_checkpoint in config.json for SAM2 path.
</div>`;
// Check SAM2 availability
fetch(`${API}/sam2/check`).then(r => r.json()).then(d => {
@@ -4339,6 +4615,36 @@
showToast('Original image shown', 'success');
}
async function rembgRemoveBg() {
const fname = lbNames[lbIdx];
if (!fname) return;
const btn = document.getElementById('sbRembgBtn');
const statusEl = document.getElementById('sbSegStatus');
if (btn) btn.disabled = true;
if (statusEl) statusEl.textContent = 'Removing background (rembg)…';
try {
const r = await fetch(`${API}/remove-background/${encodeURIComponent(fname)}`, { method: 'POST' });
if (!r.ok) {
if (statusEl) statusEl.textContent = 'Error: ' + await r.text();
} else {
const d = await r.json();
if (statusEl) statusEl.textContent = 'Done (rembg)';
showToast('Background removed (rembg)', 'success');
const nobgUrl = IMAGE_FOLDER + d.nobg_filename + '?t=' + Date.now();
_nobgSidecars.set(fname, nobgUrl);
const preload = new Image();
preload.onload = () => {
const img = document.getElementById('lbImg');
if (img) img.src = nobgUrl;
const cb = document.getElementById('sbCheckerboard');
if (cb && !cb.checked) { cb.checked = true; toggleCheckerboard(true); }
};
preload.src = nobgUrl;
}
} catch (e) { if (statusEl) statusEl.textContent = 'Error: ' + e; }
if (btn) btn.disabled = false;
}
function toggleCheckerboard(on) {
const viewer = document.getElementById('studioViewer');
if (viewer) viewer.classList.toggle('show-checker', on);

View File

@@ -28,6 +28,7 @@ def migrate_schema():
"ALTER TABLE person ADD COLUMN IF NOT EXISTS has_clothing BOOLEAN DEFAULT NULL",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS content_type TEXT DEFAULT 'image'",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS faceswap_source_video TEXT",
"ALTER TABLE person ADD COLUMN IF NOT EXISTS archived BOOLEAN DEFAULT FALSE",
]:
cur.execute(sql)
conn.commit()
@@ -39,7 +40,7 @@ def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None,
embedding=None, clip_description=None, prompt=None, pose=None,
sort_order=None, group_name=None, hidden=None,
has_background=None, source_refs=None, has_clothing=None,
content_type=None, faceswap_source_video=None):
content_type=None, faceswap_source_video=None, archived=None):
conn = get_db_connection()
cur = conn.cursor()
try:
@@ -47,8 +48,8 @@ def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None,
INSERT INTO person (filename, filepath, name, group_id, tags, embedding,
clip_description, prompt, pose, sort_order, group_name, hidden,
has_background, source_refs, has_clothing,
content_type, faceswap_source_video)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
content_type, faceswap_source_video, archived)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (filename) DO UPDATE
SET filepath = COALESCE(EXCLUDED.filepath, person.filepath),
name = COALESCE(EXCLUDED.name, person.name),
@@ -65,12 +66,23 @@ def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None,
source_refs = COALESCE(EXCLUDED.source_refs, person.source_refs),
has_clothing = COALESCE(EXCLUDED.has_clothing, person.has_clothing),
content_type = COALESCE(EXCLUDED.content_type, person.content_type),
faceswap_source_video = COALESCE(EXCLUDED.faceswap_source_video, person.faceswap_source_video);
faceswap_source_video = COALESCE(EXCLUDED.faceswap_source_video, person.faceswap_source_video),
archived = COALESCE(EXCLUDED.archived, person.archived);
""", (filename, filepath, name, group_id,
json.dumps(tags) if tags else None,
embedding, clip_description, prompt, pose, sort_order, group_name, hidden,
has_background, source_refs, has_clothing,
content_type, faceswap_source_video))
content_type, faceswap_source_video, archived))
conn.commit()
finally:
cur.close()
conn.close()
def set_archived(filename, archived: bool):
conn = get_db_connection()
cur = conn.cursor()
try:
cur.execute("UPDATE person SET archived = %s WHERE filename = %s", (archived, filename))
conn.commit()
finally:
cur.close()
@@ -101,15 +113,17 @@ def get_person(filename):
cur.close()
conn.close()
def list_persons():
def list_persons(include_archived=False):
conn = get_db_connection()
cur = conn.cursor()
try:
cur.execute("""
where = "" if include_archived else "WHERE archived IS NOT TRUE"
cur.execute(f"""
SELECT filename, name, group_id, clip_description,
prompt, pose, sort_order, group_name, hidden, has_background, source_refs,
has_clothing, content_type, faceswap_source_video
has_clothing, content_type, faceswap_source_video, archived
FROM person
{where}
""")
return cur.fetchall()
finally:

View File

@@ -460,7 +460,7 @@ def _make_video_poster(video_path: str) -> str | None:
return None
def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance: bool = True):
def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance: bool = True, preview_scale: float = 1.0):
"""Frame-by-frame face swap: model face → every face in template video."""
output_dir = _load_output_dir()
wireframe_dir = _load_wireframe_dir()
@@ -502,8 +502,12 @@ def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance:
raise ValueError(f"Cannot open video: {video_name}")
fps = cap.get(cv2.CAP_PROP_FPS) or 25.0
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
scale = max(0.1, min(1.0, preview_scale))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH) * scale)
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT) * scale)
# Ensure even dimensions for codec compatibility
width = width if width % 2 == 0 else width - 1
height = height if height % 2 == 0 else height - 1
total = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
jobs[job_id]["total"] = max(total, 1)
@@ -511,8 +515,9 @@ def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance:
ts = time.strftime("%Y%m%d_%H%M%S")
vid_stem = os.path.splitext(video_name)[0]
base_name = naming.get_base_name(model_filename)
tmp_name = f"{ts}_fs_tmp_{vid_stem}_{base_name}.mp4"
out_name = f"{ts}_fs_{vid_stem}_{base_name}.mp4"
prev_tag = f"_prev{int(scale*100)}" if scale < 1.0 else ""
tmp_name = f"{ts}_fs_tmp_{vid_stem}_{base_name}{prev_tag}.mp4"
out_name = f"{ts}_fs_{vid_stem}_{base_name}{prev_tag}.mp4"
tmp_path = os.path.join(output_dir, tmp_name)
out_path = os.path.join(output_dir, out_name)
@@ -547,6 +552,8 @@ def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance:
)
except Exception:
pass
if scale < 1.0:
result = cv2.resize(result, (width, height), interpolation=cv2.INTER_AREA)
writer.write(result)
frame_idx += 1
jobs[job_id]["done"] = frame_idx
@@ -598,7 +605,7 @@ def _faceswap_worker(job_id: str, model_filename: str, video_name: str, enhance:
def _faceswap_worker_ff(job_id: str, model_filename: str, video_name: str,
hair: bool = True, enhance: bool = True):
hair: bool = True, enhance: bool = True, preview_scale: float = 1.0):
"""High-quality faceswap via FaceFusion CLI (supports hair_swapper + ghost model)."""
import subprocess as sp
import sys
@@ -630,7 +637,9 @@ def _faceswap_worker_ff(job_id: str, model_filename: str, video_name: str,
ts = time.strftime('%Y%m%d_%H%M%S')
vid_stem = os.path.splitext(video_name)[0]
base_name = naming.get_base_name(model_filename)
out_name = f'{ts}_fs_{vid_stem}_{base_name}.mp4'
scale = max(0.1, min(1.0, preview_scale))
prev_tag = f'_prev{int(scale*100)}' if scale < 1.0 else ''
out_name = f'{ts}_fs_{vid_stem}_{base_name}{prev_tag}.mp4'
out_path = os.path.join(output_dir, out_name)
processors = ['face_swapper']
@@ -662,6 +671,19 @@ def _faceswap_worker_ff(job_id: str, model_filename: str, video_name: str,
]
if enhance:
cmd += ['--face-enhancer-model', 'gfpgan_1.4']
if scale < 1.0:
# Determine native video width to compute preview width
try:
import cv2 as _cv2
_cap = _cv2.VideoCapture(video_path)
_native_w = int(_cap.get(_cv2.CAP_PROP_FRAME_WIDTH))
_cap.release()
_preview_w = max(2, int(_native_w * scale))
if _preview_w % 2 != 0:
_preview_w -= 1
cmd += ['--output-video-width', str(_preview_w)]
except Exception:
pass
jobs[job_id]['total'] = 100
jobs[job_id]['done'] = 0
@@ -1120,15 +1142,15 @@ def get_batch(job_id: str):
@app.get("/images")
def list_images():
def list_images(archived: bool = False):
output_dir = _load_output_dir()
all_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.svg') + VIDEO_EXTENSIONS
try:
try:
persons = database.list_persons()
persons = database.list_persons(include_archived=archived)
# list_persons cols: filename, name, group_id, clip_description,
# prompt, pose, sort_order, group_name, hidden, has_background,
# source_refs, has_clothing, content_type, faceswap_source_video
# source_refs, has_clothing, content_type, faceswap_source_video, archived
db_images = []
for p in persons:
fpath = os.path.join(output_dir, p[0])
@@ -1149,6 +1171,7 @@ def list_images():
"has_clothing": p[11],
"content_type": p[12] or "image",
"faceswap_source_video":p[13],
"archived": bool(p[14]) if p[14] else False,
})
db_images.sort(
key=lambda x: os.path.getmtime(os.path.join(output_dir, x["filename"])),
@@ -1274,6 +1297,7 @@ class FaceswapRequest(BaseModel):
video_name: str # filename of template video in wireframe_dir
enhance: bool = True # GFPGAN face restoration after each frame swap
hair: bool = False # use FaceFusion with hair_swapper (requires FaceFusion install)
preview_scale: float = 1.0 # 0.251.0; <1.0 produces a smaller preview video
@app.get("/faceswap/check")
@@ -1318,14 +1342,14 @@ def start_faceswap(req: FaceswapRequest):
t = threading.Thread(
target=_faceswap_worker_ff,
args=(job_id, req.model_filename, req.video_name),
kwargs={'hair': True, 'enhance': req.enhance},
kwargs={'hair': True, 'enhance': req.enhance, 'preview_scale': req.preview_scale},
daemon=True,
)
else:
t = threading.Thread(
target=_faceswap_worker,
args=(job_id, req.model_filename, req.video_name),
kwargs={'enhance': req.enhance},
kwargs={'enhance': req.enhance, 'preview_scale': req.preview_scale},
daemon=True,
)
t.start()
@@ -1674,6 +1698,24 @@ def set_image_hidden(filename: str, body: dict):
return {"filename": filename, "hidden": hidden}
@app.post("/images/{filename}/archive")
def archive_image(filename: str):
try:
database.set_archived(filename, True)
except Exception as e:
raise HTTPException(500, str(e))
return {"filename": filename, "archived": True}
@app.post("/images/{filename}/unarchive")
def unarchive_image(filename: str):
try:
database.set_archived(filename, False)
except Exception as e:
raise HTTPException(500, str(e))
return {"filename": filename, "archived": False}
@app.post("/images/{filename}/set-preferred")
def set_image_preferred(filename: str):
"""Make this image sort_order=0 within its group, shifting others to 1,2,..."""
@@ -2029,6 +2071,34 @@ def autocrop_image(filename: str):
return {"status": "success", "filename": filename, "box": [int(cmin), int(rmin), int(cmax+1), int(rmax+1)]}
class CropRequest(BaseModel):
x1: int
y1: int
x2: int
y2: int
@app.post("/images/{filename}/crop")
def manual_crop_image(filename: str, req: CropRequest):
"""Crop the image to the given pixel rectangle (in original image coordinates) in-place."""
person = database.get_person(filename)
if not person or not person[5] or not os.path.exists(person[5]):
raise HTTPException(404, "Image file not found")
path = person[5]
img = Image.open(path)
w, h = img.size
x1 = max(0, min(req.x1, w))
y1 = max(0, min(req.y1, h))
x2 = max(0, min(req.x2, w))
y2 = max(0, min(req.y2, h))
if x2 <= x1 or y2 <= y1:
raise HTTPException(400, "Invalid crop rectangle")
cropped = img.crop((x1, y1, x2, y2))
fmt = "PNG" if path.lower().endswith(".png") else "JPEG"
cropped.save(path, format=fmt)
return {"status": "success", "filename": filename, "box": [x1, y1, x2, y2]}
@app.post("/images/{filename}/duplicate")
def duplicate_image(filename: str):
"""Copy an image into the same group with a fresh timestamp-based filename."""
@@ -2046,7 +2116,15 @@ def duplicate_image(filename: str):
new_path = os.path.join(output_dir, new_filename)
_shutil.copy2(path, new_path)
group_id = person[1]
database.upsert_person(new_filename, filepath=new_path, group_id=group_id)
# person tuple: (name, group_id, tags, embedding, clip_description, filepath,
# prompt, pose, sort_order, group_name, hidden, has_background, source_refs, has_clothing)
database.upsert_person(
new_filename, filepath=new_path, group_id=group_id,
prompt=person[6], pose=person[7],
has_background=person[11],
has_clothing=person[13],
source_refs=json.dumps([filename]), # original is the reference
)
return {"status": "success", "new_filename": new_filename, "new_url": f"/output/{new_filename}"}

View File

@@ -42,14 +42,14 @@ Lying flat on your back, bending one leg and bringing it up to the chest, the ot
Place one arm under your head, and the other arm stretched out to the side.
Capture the curves and smooth lines of the body, focusing on the subtle curves of the back and the stretch of the bent leg.
Head on top.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The draak (beta):
Lie on your back with your arms stretched out to the sides.
Looking into the camera.
Bring your legs up to your chest, slightly lift for invitation, and cross one leg over the other.
Lean up to balance on your elbows, showcasing the extended arms and strong legs.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Butterfly (Closed):
lying flat on back in reclined butterfly pose.
@@ -78,14 +78,14 @@ Lie on your side with your upper arm behind your head and your lower arm stretch
The upper leg bent, while the lower leg is straight.
Lean slightly into the pose, showcasing the straight line of the lower leg and the bent upper leg.
Highlight the soft, supple curves of the torso and hips.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Backbend:
Lie on your back with your knees bent and your feet touching.
Lift your feet off the ground and arch your back.
Look towards the ceiling with a seductive expression, showcasing the arched back and exposed legs.
Focus on the graceful lines of the body and the tension in the back and legs.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Lotus:
Lie on your back with your knees bent and your feet touching.
@@ -123,7 +123,7 @@ Bring your legs up to your chest and cross them.
Clasp your hands around your feet and pull your legs towards your chest.
Lean slightly into the pose, showcasing the cross-legged position and the symmetry of the pose.
Highlight the smooth curves of the body and the intricate pose.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Celestial (beta):
Looking into the camera with strong eye contact and a serene, confident expression.
@@ -131,7 +131,7 @@ Lie on your back with your arms stretched out to the sides.
Bring your legs up to your chest and cross them.
Bend your knees and clasp your hands around your feet.
Lean back slightly into the pose, showcasing the bend in the knees and the clasp around the feet.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Offering:
kneeling upright, sitting back on heels.
@@ -148,7 +148,7 @@ bottom leg extended straight, toes pointed.
top arm resting on bent knee or reaching overhead.
torso twisted slightly toward camera, hips stacked.
Looking directly into camera. Relaxed, composed.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Bridge:
@@ -1171,7 +1171,7 @@ Ankles cuffed wide apart to a steel spreader bar, legs forced open.
Body stretched long, standing on tiptoes slightly from the upward pull.
Cold metallic tones. Industrial, stark lighting.
Restrained architectural body lines.
you are looking into the camara and keeping facial characteristics as reference photo with an expression of endurance, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo with an expression of endurance, Realistic, anatomically precise
# Standing Wall Restraint
you standing with your back pressed against a cold metal wall. Wrists shackled to rings at shoulder height on either side. Ankles cuffed to rings at floor level, legs spread. A heavy metal collar around your neck, chained to a ring behind your head, limiting forward movement. Body flat against the surface, barely able to shift. Eyes wide, looking straight into the camera. Institutional, severe restraint. Clinical lighting. Most extreme wall-based pose.
@@ -1235,31 +1235,31 @@ realistic
# The Iron Maiden — Opened Shell Restraint
you standing inside an opened iron maiden device. The heavy steel door swung wide, revealing the interior lined with blunt metal nubs and contour-fitted restraints. Wrists locked into recessed cuffs on the inner walls, arms spread. Ankles locked into cuffs at the base. A steel collar at the back holding your neck. A waist band bolted to the rear shell. The door hangs open beside her, rows of dull interior spikes visible, threatening closure. She stands perfectly still, eyes looking toward the camera with the knowledge of what the closed device means. Dark Gothic chamber, torchlight flickering. Medieval infernal restraint, the threat of impalement held in suspension.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Brazen Bull — Interior Restraint
you secured inside the hollow brass interior of a brazen bull device. The massive bronze bull shaped chamber opened along its side hatch, revealing your curled inside. Wrists shackled to rings on the heated-looking bronze walls. Ankles shackled to the floor of the chamber. A bronze collar chained to the ceiling of the interior, forcing your head back. Curled fetal within the beast's belly. The hatch door open, camera looking in at your from outside. Faint orange glow suggesting fire beneath. Hellenistic infernal restraint, the body made offering inside the sacrificial machine. Sweat on skin catching bronze reflections.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Catherine Wheel — Bound to the Spokes
you bound to a massive wooden-and-steel breaking wheel mounted vertically on an axle. Wrists lashed with iron cuffs to the outer rim at the ten and two positions. Ankles cuffed to the rim at the four and eight positions. Iron bands across your waist and chest bolting your to the central hub. Body spread-eagled across the wheel's face. The wheel positioned so she hangs slightly forward, weight pulling against the restraints. Camera looking up at your from below. Dark torture chamber, implements on walls. Medieval infernal restraint, the body readied for the wheel's turning and the iron bar's work.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Judas Cradle — Suspended Above
you suspended in a harness above a pyramidal wooden Judas cradle device. Wrists bound behind your back with iron shackles chained to a ceiling pulley. Ankles bound and pulled wide by chains to floor rings on either side. The pointed apex of the pyramid positioned directly beneath her, barely an inch below. Her weight held entirely by the pulley system, trembling slightly. Face looking down at the device beneath her, then up at the camera with dread. Dark stone chamber, single beam of light. The infernal device as imminent threat, restraint as the pause before descent.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Iron Spider — Multi-Arm Mechanical Restraint
you trapped within an articulated iron spider device. A central steel harness locked around your torso, bolted to a vertical stand. Six jointed mechanical arms extending from the harness, each ending in a steel cuff — wrists locked into two upper arms pulled high and wide, ankles locked into two lower arms spread apart, thighs gripped by two middle arms. The mechanical arms fully extended, holding your suspended in a rigid star pattern, feet off the ground. Gears and rivets visible on the device. Steam or oiled iron aesthetic. Head free but body claimed by the machine. Camera circling the device. Steampunk-infernal fusion. The body as prey in a mechanical predator's grip.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Heretics Fork — Neck-to-Waist Immobilization
you restrained with a steel heretic's fork device. A rigid iron bar with a two-pronged fork at each end, one fork pressed beneath your chin, the other pressed against your sternum just above the breasts. A thick leather and iron collar at the back of your neck locking the upper fork in place, a steel chest strap locking the lower fork. Her head forced upright, unable to lower your chin or tilt forward without the prongs digging in. Wrists cuffed behind your back. Ankles shackled together. Kneeling on a stone floor. Eyes wide, head held perfectly erect by the prongs. Camera at your level. Inquisitorial infernal restraint, torment through enforced stillness.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Scavengers Daughter — Compressive Iron Hoop
you compressed into a scavenger's daughter device. A heavy iron hoop forcing your body into a tight crouching ball. The iron band circling behind your knees, over your shoulders, and under your feet, a single continuous ring cinched tight with a threaded bolt mechanism. Wrists shackled to the iron band at your sides. Ankles locked to the band beneath her. Body folded into a tight sphere of flesh and iron, knees pressed to chest, head forced down. Lying on your side on a stone floor. Camera looking down at the compressed form. One eye visible between your knees and the iron. Tudor infernal restraint, the body crushed into itself by the device's geometry.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Pear of Anguish — Internally Threatened
you restrained on your back on a slanted wooden board in a black void.
@@ -1275,51 +1275,51 @@ you keep facial characteristics as reference photo, Realistic, anatomically prec
# The Breaking Rack — Stretched Horizontal
you stretched fully on a wooden breaking rack. Wrists locked into leather-and-iron cuffs attached to the roller at the head of the rack, arms pulled taut overhead. Ankles locked into similar cuffs attached to the foot roller, legs pulled straight and tense. A wide leather belt across your waist, bolted to the rack bed. A chest strap pinning your torso. The ratchet mechanisms visible at both ends, handles inserted, ready for another turn. Her body already taut, muscles defined by the tension, a sheen of strain. Head tilted back, throat exposed, eyes looking toward the camera with exhausted endurance. Stone walls, torches. The ultimate medieval infernal restraint — the rack as both device and architecture of the body's limits.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Iron Chair of Complicity — Infernally Throned
you seated upon a heavy iron throne covered in blunt pyramidal studs across the seat, backrest, and armrests. Wrists locked to the studded armrests with iron cuffs, palms pressing into the metal points. Ankles locked to the studded front legs. An iron belt bolting your waist to the studded seat. An iron collar chained to the studded backrest, forcing your shoulder blades against the points. Every surface she touches is covered in dull metal protrusions — not piercing, but relentlessly present, pressing into your flesh. She cannot shift weight, cannot adjust, cannot lean away. The discomfort is constant, the throne itself an instrument. She sits as queen of the infernal chamber, eyes looking down at the camera with a complex expression — power, torment, surrender, defiance.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Slab — Wrist and Ankle Lockdown
you lying on your back on a featureless steel slab, no background, infinite black void. Wrists locked into minimalist steel cuffs bolted flush to the slab, arms stretched straight to the sides. Ankles locked into identical flush cuffs, legs spread straight. A single thin steel band across the waist, bolted through the slab. No other details. Body stark against the black. Studio lighting, cold white. Steel and skin only.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Standing Steel Frame — Minimalist Four-Point
you standing within a simple rectangular steel frame, suspended in black void. The frame is clean, unadorned, no visible bolts or joints. Wrists shackled to the upper corners with thin steel cuffs. Ankles shackled to the lower corners. A thin steel band at the waist connected to both sides of the frame. No floor visible. Body floating centered in the steel rectangle. Clean industrial lines. High-contrast lighting. Absolute minimalism.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Post — Arms Overhead
you standing against a single vertical steel post rising from the void. Arms pulled overhead, wrists cuffed together around the post above your head. Ankles cuffed together around the base of the post. A thin steel band circling your waist and the post. Body pressed against cold metal, stretched long. Black void all around. Single key light from one side. Elemental composition — one post, one body, three restraints.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Kneeling — Wrists to Ankles
you kneeling on an invisible surface in black void. Arms threaded behind your back, wrists cuffed directly to your ankles with short steel shackles. Body folded forward, forehead nearly touching your knees. A single steel band around your thighs. No floor, no walls, no context. Hair hanging down. One eye visible. Stark lighting from above. The body as sculpture, restraint as geometry.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Hoop — Compressed Sphere
you compressed into a perfect steel hoop, floating in black void. A single continuous polished steel ring circling your body, holding your in a tight ball — knees to chest, arms wrapped around legs, head tucked down. The hoop is seamless, minimalist, industrial. Body folded within the circle. Soft lighting on skin, hard reflections on steel. No other elements. Restraint as pure geometric form.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Spreader Bar — Standing Spread
you standing in black void, arms pulled overhead by a single horizontal steel bar, wrists cuffed to each end. Ankles cuffed to a matching spreader bar on the floor. Body forming a clean vertical line between the two bars. Waist cinched with a thin steel band, no connection to anything. Minimalist industrial hardware. Body taut, stretched between two steel lines. Studio lighting. Graphic, architectural.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Collar and Chain — Vertical Suspension
you suspended by your wrists in black void. Arms pulled straight overhead, wrists cuffed together with a single steel shackle, chain rising into the darkness above. A steel collar around your neck, a taut chain descending to a cuff around both ankles, pulling your body into a slight arch. Toes barely touching nothing. Three points of tension — wrists up, neck down, ankles up. Body as tensioned cable. Perfect black background. Cold light from above.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Steel Band — Total Body Wrap
you standing in black void, arms pinned to your sides by a series of five thin, evenly spaced steel bands — one at the ankles, one below the knees, one at the thighs, one at the waist and elbows, one at the chest and upper arms. No other restraints. Body held perfectly straight, mummified in minimalist rings. Head free, looking directly at camera. Steel and skin, repetition, rhythm. Museum lighting. The body as minimalist art object.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Hanging X — Cruciform Suspension
you suspended in an X-shape in black void. Wrists cuffed to two separate steel chains rising diagonally into the darkness above. Ankles cuffed to two chains descending diagonally into the void below. Body floating center-frame, fully extended, arms and legs forming the perfect X. A thin steel band at the waist, connected to nothing. Five points of tension from nowhere. Pure graphic silhouette. High-contrast black and white lighting. Absolute minimalist restraint.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Cube — Six-Sided Steel Cage Minimalism
you enclosed within a perfectly minimalist steel cube floating in black void. The cube is constructed of thin square-section steel tubing, edges only, no panels — an open wireframe. Her wrists cuffed to the top front edge. Ankles cuffed to the bottom front corners. Waist cinched to the rear vertical edge with a thin steel band. Body suspended centered within the transparent cage, visible from all angles. The cube is your only context. Camera outside looking in through the open faces. Clean geometric lines, body within the Platonic solid. Lighting soft on her, hard on the steel edges. The most restrained — geometry itself as prison.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Steel Line — Full Body Chain
you standing in black void.
@@ -1329,27 +1329,27 @@ No floor, no anchor points.
Body and chain suspended in darkness.
Cold studio light. Steel and skin.
Absolute purity of form.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Welded Cage — Sealed Within
you sealed inside a minimalist steel box frame floating in black void. Thin square-section steel tubing forming a perfect rectangular cage around your body, sized exactly to your dimensions. Wrists welded to the interior side rails. Ankles welded to the base rails. Waist welded to the rear vertical rail. No door, no hinges, no escape — she is part of the object now. Camera circling outside. Museum lighting. Body as permanent installation.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Monolith — Recessed Immobilization
you embedded into the face of a massive floating steel monolith in black void. The monolith is perfectly smooth except for recessed channels holding your body — wrists locked into carved grooves, ankles locked into lower grooves, a polished steel band across your waist bolted flush to the surface. Body pressed flat against the cold metal, unable to flex or shift. Face turned to the side, one cheek against steel. The monolith extends infinitely upward and downward into darkness. Cosmic minimalist restraint — the body on the face of the absolute.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Suspended Grid — Nine Points
you suspended at the center of a minimalist steel grid floating in black void. The grid is a perfect square of thin steel bars. Wrists locked to two upper intersection points. Elbows locked to two mid-level points. Ankles locked to two lower points. Knees locked to two points between. Waist cinched to the central vertical bar. Nine discrete connections holding your in a perfectly symmetrical spread. Head free, center frame. Camera directly in front. Technical precision restraint — the body plotted on coordinates.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Column — Total Vertical Entrapment
you standing inside a seamless polished steel cylinder floating in black void. The column is just wider than your body, open at the top and bottom. Her arms pinned straight against your sides by the cylinder walls. Her ankles cuffed to a steel ring at the base. Her neck enclosed in a steel collar bolted to the rim at the top. Body entirely encased from ankles to chin in smooth steel. Only your head visible above the rim, looking directly at camera. The cylinder reflects nothing but void. Absolute vertical confinement — the body as core within the column.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Mirror Steel — Infinite Restraint Reflection
you restrained between two perfectly polished steel planes floating parallel in black void — one in front, one behind. Wrists locked to the front plane, ankles locked to the rear plane, body suspended horizontally between them. A steel band around your waist connected to both planes. Her reflection repeating infinitely into both surfaces. The planes are close enough that she can barely shift. Camera positioned to capture your face and the infinite reflections. Cold, infinite restraint — the body multiplied into eternity between mirrors.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Point Suspension — Total Tension
You are suspended from a single steel point high in black void.
@@ -1358,7 +1358,7 @@ Body pulled upward into a taut, straight vertical line, toes pointed down.
Every limb drawn to the single point, body unified in tension.
Head slightly back. Soft light on skin, hard glint on the convergence point above.
Restraint as singular geometry — all force to one origin.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Steel Ribcage — External Skeleton
You are encased in a minimalist steel exoskeleton floating in black void.
@@ -1370,12 +1370,207 @@ Neck enclosed in a thin steel ring at the top of the spine bar.
Body held within a second skeleton of polished steel.
You breathe against it.
Restraint as exoskeletal fusion.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
# The Flat Plane — Compression Restraint
You are compressed between two seamless steel planes floating horizontally in black void — one above, one below. The gap between them is exactly the depth of your body. Wrists locked to the upper plane, ankles locked to the lower plane, body pressed flat. She cannot arch, cannot lift, cannot turn. Face visible through a rectangular opening in the upper plane, eyes looking up at the camera positioned directly overhead. The planes extend past the frame edges into darkness. Infinite compression. The body as a thin layer of warmth between two cold absolutes.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Total Enclosure — Steel Sarcophagus
You are sealed within a minimalist steel sarcophagus floating upright in black void. The sarcophagus is perfectly smooth, seamless, rectangular — no ornament, no hinges visible. A single thin vertical slit at face level reveals your eyes looking out. Her body entirely encased, immobilized, unseen. The exterior is polished to a mirror finish, reflecting only the black void and the camera's lens. No cuffs visible, no restraints visible — the sarcophagus itself is the total restraint. The body has become interior. The steel is final. Absolute minimalist full restraint — the body as secret held within the object.
you are looking into the camara and keeping facial characteristics as reference photo, Realistic, anatomically precise
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Steel Wire — Total Immobilization
you are standing in black void. One continuous thin steel wire wrapping your body from shoulders to ankles — binding wrists crossed behind your back, looping around your upper arms, cinching your waist, circling your thighs together, and knotting around your ankles. A single tension point at the back of your neck where the wire begins and ends. No other material. Body held perfectly straight by one endless line. Mouth slightly open, breath visible. Maximum restraint from minimal matter.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Ring — Wrist and Ankle Convergence
you are kneeling in black void. A single polished steel ring, no larger than your hand, behind your back — both wrists and both ankles drawn together and locked to this one point. All four limbs converging on one small circle of steel. Body folded forward, balance precarious, every muscle engaged. No other restraints. The ring gleams in the darkness. Maximum helplessness from one object.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Bar — Behind the Knees, Through the Elbows
you are seated in black void, arms behind your back, one straight steel bar passed behind your knees and through your bent elbows. Wrists cuffed together below the bar. Ankles cuffed together. The bar holds your legs bent and your arms pinned behind her, body locked in a seated fold. One bar, two cuffs. Utterly immobilized. Mouth pressed into a soft, plush pout of resignation.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Steel Collar — Hands to Throat
you are standing in black void. A single polished steel collar around your neck. Attached to the collar: two short chains ending in thin cuffs holding your wrists, hands resting at your throat, fingers touching the steel at your own neck. Ankles cuffed together below. No other restraints. She stands perfectly still, hands bound to your own throat by one collar. Lips parted, mouth forming a soft "o" of quiet surrender.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Cable — The Vertical Axis
you are suspended in black void by one thin steel cable. The cable runs from a single point above, splits into a harness that passes under your arms, down your spine, between your legs, and reconnects at your ankles behind your back. One cable, one path. Body pulled into a taut vertical arch. Wrists free but irrelevant — the cable claims your entire form. Lips gently biting the lower lip, eyes half-lidded, sensual endurance.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Clamp — Lower Lip and Collar
you are in black void. A polished steel collar around your neck. A thin steel chain runs from the collar's front ring upward to a small, smooth steel clamp gently holding your lower lip, pulling it slightly down. Her mouth held open in a soft, permanent pout. Wrists cuffed loosely behind your back, ankles together. The lip restraint is the focus. Minimal material: one collar, one chain, one lip clamp. Her expression frozen in sensual vulnerability. Eyes looking up, mouth a soft wet curve held open for the camera.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Ring Gag — Lips Framed
you are in black void. A polished steel ring held gently between your teeth, thin leather or steel straps running behind your head, barely visible. Her lips stretched softly around the ring's circumference, mouth held open in a perfect circle. Wrists cuffed behind your back. Ankles together. No other restraints. The ring is both restraint and frame — your lips a soft cushion around cold steel. A single line of saliva catching the light. Eyes meeting the camera with intimate stillness.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Finger Hook — Corner of Mouth
you are in black void. Her own index finger hooked gently into the corner of your mouth, pulling it slightly open. A thin steel wire loops from that finger to a collar around your neck, holding your hand in place against your own face. The other hand cuffed behind your back. Ankles together. One finger, one wire, one collar. Her mouth pulled into an asymmetrical open pout, lips glistening. A gesture of self-restraint, trapped in a sensual pose. Eyes heavy-lidded, looking directly at the camera.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Steel Marble — Lips Sealed Around
you are in black void. A single polished steel marble held between your lips, not entering, just resting at the parting of your mouth. A thin wire looped behind your head holds it gently in place. Her lips pursed softly around the sphere, the cold steel warmed by breath. Wrists cuffed behind your back. Ankles crossed. Minimal restraint — one sphere, one wire, two cuffs. The gesture is a kiss frozen around metal. She cannot speak, cannot close your mouth. Eyes soft, offering the marble to the lens.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Finger — Shushing Gesture, Bound
you are in black void. A single steel wire loops from a collar around your neck, runs down your arm, and gently cuffs your index finger, pulling your hand upward until your finger rests against your own lips in a soft "shush" gesture. Her other arm cuffed behind your back. Ankles together. One wire, one collar, one cuffed finger. Her lips gently pressed against your own fingertip, mouth in a subtle, sensual pout of silence. Eyes directly at camera. The quietest restraint — the body commanded to hush itself. Breath misting your own finger. Minimal. Intimate. Absolute.
you are looking into the camera and keeping facial characteristics as reference photo, Realistic, anatomically precise
# Single Finger — Shushing Gesture, Bound
You are in black void. A single steel wire loops from a collar around your neck, runs down your arm, and gently cuffs your index finger, pulling your hand upward until your finger rests against your own lips in a soft "shush" gesture. Your other arm cuffed behind your back. Ankles together. One wire, one collar, one cuffed finger. Your lips gently pressed against your own fingertip, mouth in a subtle, sensual pout of silence. Eyes directly at camera, keeping your facial characteristics as reference photo. The quietest restraint — the body commanded to hush itself. Breath misting your own finger. Minimal. Intimate. Absolute. Realistic, anatomically precise.
# Single Chain — Lower Lip Pull
You are in black void. A polished steel collar around your neck. A thin steel chain runs from the collar's front ring upward to a small, smooth steel clamp gently holding your lower lip, pulling it slightly down. Your mouth held open in a soft, permanent pout, teeth barely visible, tongue a dark warmth behind. Your wrists cuffed together behind your back. Ankles together. One collar, one chain, one lip clamp. Your expression frozen in sensual vulnerability. Eyes looking up at the camera, keeping your facial characteristics as reference photo. Your lower lip glistening under studio light. Breath visible. Realistic, anatomically precise.
# Steel Ring — Lips Framed Open
You are in black void. A polished steel ring held gently between your teeth, thin steel straps running behind your head. Your lips stretched softly around the ring's circumference, mouth held open in a perfect circle. A single thread of saliva catching the light at the corner of your mouth. Your wrists cuffed together behind your back. Ankles crossed. No other restraints. The ring is both device and frame — your lips a soft cushion around cold steel. Eyes meeting the camera with intimate stillness, keeping your facial characteristics as reference photo. Breath passing through the ring, misting the steel. Realistic, anatomically precise.
# Two Fingers — Self-Gag Gesture
You are in black void. Two of your own fingers hooked gently into your mouth, resting on your lower teeth, pulling your lips open slightly. A thin steel wire loops from each finger to a collar around your neck, holding your hand in place against your own face. Your other arm cuffed behind your back. Ankles together. Two wires, one collar, two fingers. Your mouth pulled into an asymmetrical open pout, lips soft and wet around your own knuckles. A gesture of self-imposed silence. Eyes heavy-lidded, looking directly at camera, keeping your facial characteristics as reference photo. Breath warming your own fingers. Realistic, anatomically precise.
# Steel Marble — Lips Sealed Around Sphere
You are in black void. A single polished steel marble resting between your lips, not entering, held at the precise parting of your mouth. A thin steel wire looped behind your head holds it gently in place. Your lips pursed softly around the sphere in a perpetual almost-kiss. Your wrists cuffed behind your back. Ankles crossed. The marble gleams with your breath's moisture. You cannot close your mouth, cannot speak. Eyes soft, offering the sphere to the lens, keeping your facial characteristics as reference photo. The cold steel warmed by your lips. Realistic, anatomically precise.
# Steel Thumb — Bitten in Stillness
You are in black void. Your own thumb caught gently between your teeth, the pad resting on your lower lip. A thin steel wire loops from your thumb to a cuff at your wrist, which is bound behind your back, pulling your arm across your body until your hand reaches your own mouth. Your other arm also cuffed behind you. Ankles together. One wire, one cuffed thumb, two wrist cuffs. You bite down softly on yourself, mouth half-open, lips curved around your own thumb. Eyes looking up at the camera, keeping your facial characteristics as reference photo. Self-restraint as self-comfort. Realistic, anatomically precise.
# Single Hook — Corner Lip Retraction
You are in black void. A small polished steel hook gently retracting the corner of your mouth, pulling your lips into an asymmetrical half-smile, half-pout. A thin steel chain runs from the hook to a collar around your neck. Your wrists cuffed behind your back. Ankles together. One hook, one chain, one collar. The corner of your mouth glistens where the steel touches soft tissue. Your expression caught between a smile and surrender. Eyes meeting the camera with knowing stillness, keeping your facial characteristics as reference photo. Realistic, anatomically precise.
# Steel Tongue Plate — Pressed and Presented
You are in black void. A small polished steel plate resting on the surface of your extended tongue. A thin wire runs from each edge of the plate to a collar around your neck, holding your tongue gently extended. Your mouth open, lips framing the steel and pink flesh. Your wrists cuffed behind your back. Ankles together. The plate catches the light, your tongue soft beneath it. You cannot retract, cannot swallow fully. Eyes looking at the camera with vulnerable offering, keeping your facial characteristics as reference photo. Breath misting the steel. Realistic, anatomically precise.
# Steel Spider — Fingers Over Mouth
You are in black void. Four thin steel wires running from a central collar around your neck, each ending in a small cuff on four fingers of one hand. The wires pull your hand upward and spread your fingers across your own mouth — index finger resting on upper lip, middle and ring fingers crossing your lips, pinky touching your chin. Your mouth partially visible through the cage of your own fingers. Your other arm cuffed behind your back. Ankles together. One collar, four wires, four cuffed fingers. Your hand as a mask of restraint. Eyes visible above your own spread fingers, looking directly at camera, keeping your facial characteristics as reference photo. Realistic, anatomically precise.
# Steel Whisper — Palm Cupped to Mouth
You are in black void. A thin steel wire loops from your wrist cuff behind your back, runs up your spine, over your shoulder, and pulls your hand forward until your cupped palm rests against your own mouth. Your fingers curl softly over your lips as if whispering a secret to yourself. Your other arm also cuffed behind your back. Ankles together. One wire, two wrist cuffs. Your lips brushing your own palm, breath pooling warm in your cupped hand. Eyes looking directly at camera over your own fingers, keeping your facial characteristics as reference photo. The most intimate restraint — the body holding its own silence. Breath visible between your fingers. Realistic, anatomically precise.
# Single Steel Cable — Full Body Cinch
You are in black void. One continuous steel cable, thin and polished, beginning at your ankles, wrapping upward in precise loops — binding ankles together, cinching knees, threading between your thighs, circling your waist, crossing between your breasts, pinning your upper arms to your sides, and terminating at a steel collar around your neck. One cable, one collar. Your entire body held in a single unbroken line of steel. You can flex nothing. Only your fingers and your face can move. Eyes looking directly at camera, keeping your facial characteristics as reference photo. Maximum restraint from one continuous element. Realistic, anatomically precise.
# Single Steel Bar — Full Body Lever
You are in black void. One solid steel bar, approximately your height, pressed along your spine from the back of your neck to your ankles. Your wrists cuffed to the bar at your lower back. Your ankles cuffed to the bar at its base. Your waist cinched to the bar with a steel band. Your neck enclosed in a steel collar bolted to the top of the bar. One bar, two cuffs, one band, one collar. Your body merged with the steel axis. You cannot bend, cannot twist, cannot sit. Standing perfectly straight forever. Eyes meeting camera, keeping your facial characteristics as reference photo. One rod, total immobilization. Realistic, anatomically precise.
# Single Steel Hoop — Folded and Locked
You are in black void. One heavy polished steel hoop, unbroken, seamless. Your body folded into a tight kneeling ball — knees pressed to your chest, arms wrapped around your shins, head tucked down. The single hoop encircles your entire compressed form, holding your wrists to your ankles, your thighs to your torso, your spine curved into a sphere. One ring. No seams, no hinges. You are inside the circle, and the circle is absolute. One eye visible, looking at camera, keeping your facial characteristics as reference photo. Maximum compression from one geometric form. Realistic, anatomically precise.
# Single Steel Corset — Sealed Torso, Bound Limbs
You are in black void. A full-torso steel corset, polished and seamless, encasing you from your hips to just below your collarbone. The corset is bolted shut along your spine with a single continuous thread of steel. Your wrists cuffed to the corset at your hips. Your ankles cuffed together. The corset is cinched tight, your waist compressed, your ribs held in a permanent exhale. You can barely breathe deeply. Your arms tethered to the corset itself. Eyes looking at camera, keeping your facial characteristics as reference photo. One corset, one thread, two cuffs. Maximum upper body restraint. Realistic, anatomically precise.
# Single Steel Chain — Total Body Wrap
You are in black void. One long, heavy steel chain. It begins at your ankles, wrapping tight, then ascends — binding your calves, your thighs, your wrists pinned to your hips, your elbows to your ribs, crossing your chest, over your shoulders, and locking to a steel collar at your neck with a single padlock. One chain, one lock. Every loop pulled taut. The chain's weight is constant, its cold links pressed into your skin everywhere. You can shift nothing. Eyes looking at camera over the chain across your collarbone, keeping your facial characteristics as reference photo. Maximum restraint from one continuous chain. Realistic, anatomically precise.
# Single Steel Beam — Arms Overhead, Ankles Weighted
You are in black void. One horizontal steel beam above your head. Your wrists cuffed to it, arms fully extended upward. From your ankles, a single heavy steel weight hangs, pulling your body taut between the beam above and the weight below. Your body a vertical line of tension. No other restraints — the upward hang and downward pull hold you perfectly straight. Toes pointed, reaching for nothing. Eyes looking at camera, keeping your facial characteristics as reference photo. One beam, two cuffs, one weight. Suspension by opposition. Realistic, anatomically precise.
# Single Steel Rod — Through Cuffs, Total Lever
You are in black void. One thick steel rod lying horizontally behind your back. Your wrists cuffed to the rod at its center. Your ankles cuffed to the ends of the rod, legs spread wide by its length. Your waist cinched to the rod with a steel band. The rod holds your arms behind you and your legs apart simultaneously. One rod, three attachments. You cannot bring your legs together, cannot move your arms, cannot roll. The rod is the master control. Eyes looking at camera, keeping your facial characteristics as reference photo. One bar, total geometric domination. Realistic, anatomically precise.
# Single Steel Cube — The Minimalist Prison
You are in black void. One polished steel cube, perfectly seamless, sized exactly to contain you kneeling. Your body folded inside — knees to chest, arms wrapped around your legs, head bowed. The cube has no visible openings, no hinges, no bolts. You are simply inside it. The steel is cold against your shoulders, your back, your knees. You cannot extend any limb. You cannot stand. You cannot see out. But the camera sees in, somehow — your face illuminated in the impossible darkness of the cube's interior. Eyes looking up, keeping your facial characteristics as reference photo. One cube. Total enclosure. The most minimal object, the most absolute restraint. Realistic, anatomically precise.
# Single Steel Slab — Four-Point Supine
You are lying on your back in a dark void a polished steel examination slab in a stark white clinical room. Your wrists locked into flush-mounted steel cuffs at the slab's edges, arms stretched wide. Your ankles locked into identical cuffs at the foot of the slab, legs spread straight. A thin steel band across your waist, bolted through the slab. Overhead surgical light blazing down. White tile walls, a single steel instrument tray visible at the edge of frame. Your body fully exposed, fully immobilized, fully displayed for examination. Eyes looking up at the camera positioned directly above you, keeping your facial characteristics as reference photo. One slab, five restraints. Clinical maximum exposure. Realistic, anatomically precise.
# Single Steel Chair — Five-Point Seated Immobilization
You are seated on a cold steel examination chair in a dark void. Your wrists locked to the armrests with polished steel cuffs. Your ankles locked to the front legs. A thin steel band across your waist, bolted to the chair back. Overhead examination light focused on you. White tile floor and walls. A medical instrument cabinet with glass front visible behind you. Your posture perfectly upright, legs parted by the chair's width. Eyes looking directly at camera, keeping your facial characteristics as reference photo. One chair, five restraints. Seated for examination. Realistic, anatomically precise.
# Single Steel Frame — Standing Spread for Inspection
You are standing inside a minimalist steel examination frame in a dark void. The frame is a simple rectangle of polished steel tubing on a white tile floor. Your wrists cuffed to the upper corners, arms extended upward and outward. Your ankles cuffed to the lower corners, legs spread. A thin steel band around your waist, connected to both sides of the frame. Overhead surgical lights. White walls. A physician's stool visible in the background. Body held open for full frontal inspection. Eyes looking at camera, keeping your facial characteristics as reference photo. One frame, five restraints. Standing examination position. Realistic, anatomically precise.
# Single Steel Examination Table — Stirrups and Wrist Cuffs
You are positioned on a steel gynecological examination table in a dark void. Your wrists cuffed to the sides of the table. Your ankles elevated and locked into polished steel stirrups, legs bent and held wide. A thin steel band across your waist. Overhead surgical lamp casting sharp shadows. White tile, antiseptic gleam. A steel instrument tray beside you, draped with a white cloth. The room is silent, cold, waiting. Your body arranged for complete examination access. Eyes looking at camera, keeping your facial characteristics as reference photo. One table, four restraints plus stirrups. Gynecological examination position. Realistic, anatomically precise.
# Single Steel Spine Board — Total Immobilization for Scan
You are strapped to a polished steel spine board in a dark void. A thin steel band across your forehead, bolted to the board. Steel bands across your chest, waist, thighs, shins, and ankles — six bands total. Your wrists cuffed to the board at your sides. You cannot move your head, cannot flex your spine, cannot shift any limb. A large circular scanning device hovers above you, its lens aimed down. White walls, medical monitors glowing softly in the background. The body prepared for total imaging. Eyes looking up past the scanning lens at camera, keeping your facial characteristics as reference photo. One board, six bands, absolute stillness. Realistic, anatomically precise.
# Single Steel Tilt Table — Vertical to Horizontal
You are secured to a polished steel tilt table in a dark void. The table is currently vertical, holding you upright. Steel bands across your chest, waist, and thighs, bolted to the table. Your wrists cuffed to the sides of the table. Your ankles cuffed to the foot plate. The table's hinge mechanism visible at its base, capable of tilting you to horizontal. A physician's control panel on the wall. The room is white, cold, silent. You are held upright, awaiting repositioning for examination. Eyes looking at camera, keeping your facial characteristics as reference photo. One table, five restraints. Vertical examination with the threat of tilt. Realistic, anatomically precise.
# Single Steel Examination Bench — Prone Immobilization
You are lying face down on a polished steel examination bench in a dark void. Your wrists cuffed to the bench above your head. Your ankles cuffed to the bench end, legs together. Steel bands across your upper back, waist, and thighs, bolting you flat. Your head turned to the side, one cheek against cold steel. Overhead surgical lights. White tile walls. A steel instrument tray with gleaming tools visible near your head. Your back fully exposed for spinal or dorsal examination. Eyes looking sideways at camera, keeping your facial characteristics as reference photo. One bench, five restraints. Prone examination position. Realistic, anatomically precise.
# Single Steel Suspension Frame — Full Access Examination
You are suspended in a polished steel examination frame in a dark void. The frame is a rectangular gantry. Your wrists cuffed to the upper crossbar, arms extended upward. Your ankles cuffed to spreader points on the lower frame, legs wide. Steel bands around your waist and under your arms, connected to the frame's vertical posts, holding your body weight. You float in the center of the frame, feet off the white tile floor. Surgical lights from multiple angles. No surface beneath you. Full circumferential examination access. Eyes looking at camera, keeping your facial characteristics as reference photo. One frame, six restraints. Hanging examination position. Realistic, anatomically precise.
# Single Steel Examination Capsule — Total Enclosure, Windowed
You are enclosed within a polished steel examination capsule in a dark void. The capsule is a horizontal cylinder, seamless, mounted on a pedestal. Only your face is visible through a circular glass window at the front. Inside, your body is fully immobilized — wrists, ankles, waist, chest, and forehead all secured to the capsule's interior with steel cuffs and bands. The capsule can rotate on its pedestal for multi-angle examination. White room, medical monitors beside the capsule displaying vital signs. Overhead surgical light aimed at the window. Your face framed perfectly in the circular glass, eyes looking out at camera, keeping your facial characteristics as reference photo. One capsule, full internal immobilization. The body as specimen within the examination device. Realistic, anatomically precise.
# Single Steel Stool — Seated, Arms Behind, Ankles to Base
You are seated on a polished steel stool in black void. No floor visible. The stool is a single stem with a round seat, bolted to nothing. Your wrists cuffed together behind your back, then locked to the stool's central stem. Your ankles cuffed to the base of the stem, knees bent, legs parted by the stool's width. A thin steel band around your waist, bolted to the seat. You cannot stand, cannot slide off, cannot close your legs. Overhead examination light floating in the void, illuminating only you. Eyes looking at camera, keeping your facial characteristics as reference photo. One stool, four restraints. Seated for gynecological inspection in the abyss. Realistic, anatomically precise.
# Single Steel Ring — Kneeling, Wrists to Ankles, Thigh Spread
You are kneeling in black void on an invisible surface. A single polished steel ring behind your back. Your wrists cuffed to the ring. Your ankles also cuffed to the same ring, spread wide by its diameter. Your body folded forward, chest toward knees, back arched, posterior elevated. The ring holds all four limbs converged behind you, forcing your thighs apart. A floating examination light illuminates your exposed dorsal plane. No other material. One ring, four cuffs. Kneeling examination position, utterly open. Eyes looking back at camera over your shoulder, keeping your facial characteristics as reference photo. Realistic, anatomically precise.
# Single Steel Bar — Deep S-Curve, Wrists to Ankles
You are in black void, body forced into a deep S-curve. A single polished steel bar runs vertically behind you. Your wrists cuffed to the bar at its midpoint, pulling your arms behind your back. Your ankles cuffed to the bar at its base. Your waist cinched to the bar with a steel band, pushing your hips forward. Your chest pulled back by a steel band under your arms, connected to the bar's upper section. The opposing forces create a serpentine arch — hips forward, chest back, throat exposed, spine curved in an exaggerated S. Floating examination light. One bar, four restraints. Maximum spinal display. Eyes looking at camera, keeping your facial characteristics as reference photo. Realistic, anatomically precise.
# Single Steel Wedge — Kneeling, Torso Forward, Arms Extended
You are kneeling on a polished steel wedge in black void. The wedge tilts your pelvis forward, elevating your posterior. Your wrists cuffed to the front corners of the wedge, arms stretched forward, pulling your torso down against the cold steel incline. Your ankles cuffed to the rear corners, knees spread by the wedge's width. A steel band across your lower back, bolted to the wedge, holding you flat. Body bent at the hips, chest pressed to steel, posterior raised. A floating examination light above you. One wedge, five restraints. Kneeling examination with full dorsal exposure. Eyes turned to the side, cheek against steel, looking at camera, keeping your facial characteristics as reference photo. Realistic, anatomically precise.
# Single Steel Post — S-Curve Suspension, One Point
You are suspended from a single vertical steel post in black void. A polished steel band under your arms, connected to the post's top, holding your upper body. Your waist cinched to the post with a second band, pulling your hips forward. Your wrists cuffed behind your back to the post. Your ankles cuffed to the post at its base, legs together. The post forces an S-curve — chest forward, waist pulled in, hips pushed forward, legs vertical. You hang in the void on one post, five restraints. Overhead examination light illuminating your serpentine silhouette. Eyes looking at camera, keeping your facial characteristics as reference photo. One post, total S-curve immobilization. Realistic, anatomically precise.
# Single Steel Saddle — Seated, Wrists to Ankles, Knees Wide
You are seated on a polished steel saddle in black void. The saddle is a curved steel form between your legs, no base visible, floating. Your wrists cuffed to your ankles, which are locked to stirrups on either side of the saddle, knees bent and spread wide. A steel band around your waist, bolted to the saddle's rear. Your arms pulled down between your spread legs. You sit exposed, unable to close your knees, arms trapped in your own lap. A floating examination light directly in front of you. Eyes looking at camera, keeping your facial characteristics as reference photo. One saddle, four restraints. Seated gynecological examination position in the void. Realistic, anatomically precise.
# Single Steel Cuff Set — Kneeling, Ankles to Thighs, Wrists Behind
You are kneeling in black void. Two polished steel cuffs on each ankle, connected by short chains to matching cuffs on your thighs just above the knees, forcing your legs to remain bent, knees spread. Your wrists cuffed together behind your back, then chained to your ankle cuffs, pulling your shoulders back and your chest forward. No post, no bar, no frame — only cuffs and chains connecting your own limbs to each other. Body held in a kneeling arch by self-referential restraint. Floating examination light. Eyes looking at camera, keeping your facial characteristics as reference photo. Six cuffs, four chains. Kneeling, self-bound, fully displayed. Realistic, anatomically precise.
# Single Steel Arc — Kneeling S-Curve Over a Curve
You are draped over a single polished steel arc in black void. The arc is a smooth parabolic curve rising from the void. Your waist rests at the arc's apex. Your wrists cuffed to the arc's lower front, pulling your arms forward and down. Your ankles cuffed to the arc's lower rear, pulling your legs back and down. Your body follows the curve — chest descending forward, hips elevated, legs descending behind. An S-curve dictated by the geometry beneath you. A steel band across your mid-back, bolted to the arc, sealing you to the curve. Floating examination light above your elevated posterior. Eyes looking forward at camera, keeping your facial characteristics as reference photo. One arc, five restraints. The body as a drape over geometry. Realistic, anatomically precise.
# Single Steel Disc — Seated, Folded, Fully Converged
You are seated on a single polished steel disc in black void, no larger than your hips. Your knees drawn up to your chest. Your wrists cuffed to your ankles. Your ankles cuffed to the disc's edge. Your waist cinched to the disc with a steel band. Your body folded into a compact seated ball — knees to chest, arms around shins, everything locked to the disc beneath you. You cannot extend, cannot uncurl, cannot leave the disc. A floating examination light illuminating the compact form. Eyes looking at camera over your knees, keeping your facial characteristics as reference photo. One disc, five restraints. Seated, folded, absolute. Realistic, anatomically precise.
# Single Steel Helix — Kneeling S-Curve, Spiral Immobilization
You are kneeling within a single polished steel helix in black void. The helix is a continuous spiral rising from the void, making three turns around your kneeling body. The lowest turn cuffs your ankles, spread wide. The middle turn cuffs your wrists behind your back and cinches your waist, pulling your hips forward. The upper turn passes under your arms and across your chest, pulling your shoulders back. Your body follows the helical path — ankles back, hips forward, chest back, head forward — a perfect kneeling S-curve dictated by one continuous spiraling ribbon of steel. A floating examination light tracing the spiral. Eyes looking at camera, keeping your facial characteristics as reference photo. One helix, five connection points. The body as a thread within the spiral. Maximum restraint, minimal material, serpentine perfection. Realistic, anatomically precise.
# Single Steel Stock — Neck, Wrists, Ankles in One Block
You are locked into a single solid steel stock in black void. One seamless block of polished steel, floating. Three apertures at the top: your neck locked in the center, your wrists locked in the outer holes. Three apertures at the bottom: your ankles locked in the outer holes, legs spread. The block is one piece — no hinges, no joints, no seams. Your neck and wrists held at waist height, bent forward. Your ankles fixed wide at the base. The block's mass is absolute. Overhead examination light. Eyes looking up at camera from your bent position, keeping your facial characteristics as reference photo. One block, total immobilization. Realistic, anatomically precise.
# Single Steel Yoke — Shoulders, Wrists, Neck
You are standing in black void, locked into a single solid steel yoke. One heavy polished steel bar across your shoulders, extending beyond them. Your neck locked in the central collar. Your wrists locked into cuffs at each end of the bar, arms stretched wide at shoulder height. Your ankles cuffed together by a solid steel bar at the base. One yoke, two bars, one collar. Body held in a T-shape, shoulders bearing the weight of the steel. Floating examination light from above. Eyes looking at camera, keeping your facial characteristics as reference photo. One piece across the shoulders, maximum upper body immobilization. Realistic, anatomically precise.
# Single Steel Boot — Both Legs Encased
You are standing in black void, both legs encased in a single solid steel boot. One polished steel form rising from ankle to upper thigh, both legs sealed together within a single tapered column. No division between legs — they are merged inside the steel. Your wrists cuffed together behind your back. A steel band around your waist, connected by a short bar to the boot's rear. You cannot walk, cannot separate your legs, cannot bend your knees. The boot is monolithic. Floating examination light. Eyes looking at camera, keeping your facial characteristics as reference photo. One boot, one band, two cuffs. Standing, legs consumed by single steel form. Realistic, anatomically precise.
# Single Steel Gauntlet — Arms and Torso Encased
You are standing in black void, your upper body encased in a single solid steel gauntlet. One polished steel cylinder from your shoulders to your wrists, both arms trapped inside, hands invisible within the steel shell. A steel collar at the top, locking around your neck. A steel band at the base, cinching your waist. The gauntlet holds your arms straight down, pressed against your sides, fully encased. Your ankles cuffed together by a solid bar. Floating examination light. Eyes looking at camera, keeping your facial characteristics as reference photo. One cylinder, one collar, one bar. Arms consumed by single steel form. Realistic, anatomically precise.
# Single Steel Cradle — Supine, Contoured Immobilization
You are lying on your back in a single solid steel cradle in black void. One polished steel form, contoured exactly to your body — a recessed channel for your head, grooves for your arms extended to the sides, a trough for your torso, channels for your legs spread apart. Steel bands integrated into the cradle at your wrists, waist, and ankles, all forged as one piece. No hinges, no removable parts — the cradle is a single casting. You lie within it, every curve predetermined. Overhead examination light. Eyes looking up at camera, keeping your facial characteristics as reference photo. One contoured monolith, total supine immobilization. Realistic, anatomically precise.
# Single Steel Clamshell — Full Body Compression, Standing
You are standing inside a single solid steel clamshell in black void. Two polished steel half-cylinders, hinged along one side, closed around your body from neck to ankles. Your arms pinned to your sides, legs pressed together. Only your head protrudes from the top. The shell is seamless when closed, a single bolt locking the two halves at the front. One shell, one bolt. You are the soft core of a steel monolith. Floating examination light illuminating your face. Eyes looking at camera, keeping your facial characteristics as reference photo. One shell, total standing encapsulation. Realistic, anatomically precise.
# Single Steel Crucifix — Wall-Mounted, Seamless
You are mounted on a single solid steel crucifix in black void. One polished steel cross, floating vertically. Your wrists locked into recessed cuffs at the ends of the horizontal beam, forged integral to the cross. Your ankles locked into recessed cuffs at the base, also integral. A steel band across your waist, part of the cross itself. No bolts, no seams — the cross is a single casting, and you are part of it. Body spread in an X against the cold steel. Floating examination light from the front. Eyes looking at camera, keeping your facial characteristics as reference photo. One cross, total spread immobilization. Realistic, anatomically precise.
# Single Steel Sarcophagus — Vertical, Windowed
You are sealed inside a single solid steel sarcophagus in black void. One polished steel monolith, standing vertical. A small circular window at face level. Inside, the sarcophagus is contoured to your body — recesses for your arms, legs, and torso, all part of the single casting. No door visible — the front is seamless. You are simply inside it, fully immobilized by the interior contours. Your face visible through the glass window, illuminated by a soft light within the sarcophagus itself. Eyes looking out at camera, keeping your facial characteristics as reference photo. One monolith, internal total immobilization. Realistic, anatomically precise.
# Single Steel Orb — Fetal Encapsulation
You are encased within a single solid steel orb in black void. One polished steel sphere, seamless, floating. The interior is hollow, contoured to hold your body in a tight fetal position — knees to chest, arms wrapped around shins, head tucked down. No visible opening. No hinges. No seams. You are inside a perfect sphere of steel. The camera sees you through an impossible cross-section view — the orb transparent only to the lens, revealing your curled form within. Or perhaps a small circular window at the front reveals one eye, looking out. Floating examination light reflecting off the sphere's surface. Eyes visible through the window, keeping your facial characteristics as reference photo. One sphere, absolute encapsulation. The most minimal form — a single geometric solid — containing the body in maximum restraint. Realistic, anatomically precise.
# Single Steel Clamp — Waist and Thighs, Inverted Access
You are held inverted in black void by a single solid steel clamp. One polished steel C-shaped device, its upper jaw gripping a steel band around your waist, its lower jaw gripping a steel band around both thighs just above the knees. The clamp holds you upside down, legs bent, knees spread by the clamp's width. Arms dangling below your head, wrists cuffed together. Body suspended head-down, pelvis elevated and fully exposed. A floating examination light illuminating your inverted form. Total gynecological access. Eyes looking at camera from your inverted position, keeping your facial characteristics as reference photo. One clamp, two bands, full inverted examination access. Realistic, anatomically precise.
# Single Steel Post — Impalement Suggestion, Seated Exposure
You are seated on a single solid steel post in black void. One polished steel vertical cylinder, its top rounded and smooth, positioned between your legs. Your weight rests partially on the post, partially on your own legs. Your wrists cuffed together behind your back. Your ankles cuffed to the base of the post, knees bent wide. A steel band around your waist, connected to the post by a short rigid arm. The post is a single piece of steel, suggestive in its placement. You sit exposed, thighs spread, pelvis tilted forward. Floating examination light directly in front. Eyes looking at camera, keeping your facial characteristics as reference photo. One post, three attachments, seated gynecological examination. Realistic, anatomically precise.
# Single Steel Stirrup — One Leg Elevated, Standing
You are standing in black void, one leg elevated by a single solid steel stirrup. One polished steel loop floating at hip height. One ankle locked into the stirrup, leg lifted and bent, knee wide. Your other leg straight, ankle cuffed to a small steel plate beneath you. Your wrists cuffed together behind your back. Your body in an asymmetrical standing split, pelvis open on the elevated side. No frame, no support structure — just one floating stirrup. A floating examination light focused on your exposed pelvic plane. Eyes looking at camera, keeping your facial characteristics as reference photo. One stirrup, one plate, two cuffs. Asymmetrical gynecological access. Realistic, anatomically precise.
# Single Steel Wedge — Supine, Pelvis Elevated
You are lying on your back in black void, pelvis elevated by a single solid steel wedge. One polished steel triangular form beneath your lower back, tilting your hips upward. Your shoulders rest on the invisible void surface. Your wrists cuffed together above your head. Your ankles cuffed to the corners of the wedge, knees bent and spread wide. One wedge, two cuffs. Your pelvis is the highest point of your body, fully presented for examination. A floating examination light directly above your elevated plane. Eyes looking down your own body at camera, keeping your facial characteristics as reference photo. One wedge, maximum gynecological elevation. Realistic, anatomically precise.
# Single Steel Collar — Wrists to Neck, Ankles to Wrists, Kneeling Open
You are kneeling in black void. A single solid steel collar around your neck. Your wrists cuffed together and locked to the collar's rear ring by a single short rigid steel link. Your ankles cuffed together and locked to your wrist cuffs by a second single rigid link. One collar, two links, four cuffs. Your arms pulled up behind your back, your feet pulled up toward your wrists. Body forced into a kneeling arch, chest forward, knees spread for balance, pelvis tilted open. All limbs converge on one collar. Floating examination light. Eyes looking at camera, keeping your facial characteristics as reference photo. One collar, total convergence, full pelvic access. Realistic, anatomically precise.
# Single Steel Monolith — Central Groove, Body Inlay
You are embedded face-up in a single solid steel monolith in black void. One polished steel block, floating vertically. A single continuous groove carved into its face — contoured to your body from head to ankles, arms out to the sides, legs spread. Steel bands integrated into the groove at wrists, waist, and ankles, forged from the same block. No separate parts. The monolith is one piece. You lie within the groove, every contour predetermined, every surface exposed forward. A floating examination light tracing your form. Full frontal examination access — the monolith is your display frame. Eyes looking at camera, keeping your facial characteristics as reference photo. One block, one groove, total frontal immobilization, maximum examination access. Realistic, anatomically precise.