From 08a8cc9b824cb3572534eebbc98b230d575a0e1a Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 27 Jun 2026 13:51:51 +0200 Subject: [PATCH] reorder --- tour-comfy/car.html | 37 ------------------------------------- tour-comfy/config.json | 1 - tour-comfy/edit_api.py | 13 +++++++------ tour-comfy/poses.md | 24 +++++++++++++++++------- tour-comfy/watcher.py | 12 ++++++++++-- 5 files changed, 34 insertions(+), 53 deletions(-) diff --git a/tour-comfy/car.html b/tour-comfy/car.html index e47c08a..14dc2c1 100644 --- a/tour-comfy/car.html +++ b/tour-comfy/car.html @@ -1857,10 +1857,6 @@ Studio Monitor AI -
- - -
0 images @@ -4610,14 +4606,11 @@ const files = eventOrFiles.target ? eventOrFiles.target.files : eventOrFiles; if (!files || files.length === 0) return; - const prompt = document.getElementById('promptInput').value; - showToast(`Uploading ${files.length} items...`); for (const file of files) { const formData = new FormData(); formData.append('image', file); - if (prompt) formData.append('prompts', prompt); // If it's a pasted file, it might not have a useful name const fileName = file.name || 'clipboard.png'; @@ -5422,40 +5415,10 @@ } catch (e) { showToast('API not reachable', 'info'); } } - async function loadCurrentPrompt() { - try { - const r = await fetch(`${API}/config`); - if (r.ok) { - const conf = await r.json(); - document.getElementById('promptInput').value = conf.prompt || ''; - } - } catch (e) { - // API not reachable yet - } - } - async function setPrompt() { - const prompt = document.getElementById('promptInput').value.trim(); - if (!prompt) return; - try { - const r = await fetch(`${API}/config`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ prompt }), - }); - if (r.ok) { - showToast('Prompt updated', 'success'); - } else { - showToast('Failed to update prompt', 'info'); - } - } catch (e) { - showToast('API not reachable', 'info'); - } - } // Initialize document.addEventListener('DOMContentLoaded', () => { - loadCurrentPrompt(); loadPromptHistory(); loadImages(); autoRefreshTimer = setInterval(_timedRefresh, REFRESH_INTERVAL * 1000); diff --git a/tour-comfy/config.json b/tour-comfy/config.json index c7b1de4..c5d1c63 100644 --- a/tour-comfy/config.json +++ b/tour-comfy/config.json @@ -1,6 +1,5 @@ { "api_url": "http://127.0.0.1:8500/edit", - "prompt": null, "base_prompts": [ "masterpiece. high quality. hyper realistic. detailed, detailed skin", "detailed female nude. realistic, detailed teenage female nude. realistic", diff --git a/tour-comfy/edit_api.py b/tour-comfy/edit_api.py index 9455034..6ea75a0 100644 --- a/tour-comfy/edit_api.py +++ b/tour-comfy/edit_api.py @@ -1596,7 +1596,6 @@ def _multi_ref_worker(job_id: str, filenames: list[str], prompts: list[str], pos # --- routes ----------------------------------------------------------------- class ConfigUpdate(BaseModel): - prompt: str | None = None seed: int | None = None @@ -1610,14 +1609,12 @@ def get_config(): def update_config(update: ConfigUpdate): with open(CONFIG_PATH, "r") as f: conf = json.load(f) - if update.prompt is not None: - conf["prompt"] = update.prompt if update.seed is not None: conf["seed"] = update.seed with open(CONFIG_PATH, "w") as f: json.dump(conf, f, indent=2) _invalidate_static() - return {"prompt": conf["prompt"], "seed": conf["seed"]} + return {"seed": conf["seed"]} class RepairRequest(BaseModel): @@ -2525,8 +2522,12 @@ def upload_image( prompt_list.extend(base_prompts) if not prompt_list: - # Use default prompt from config - prompt_list = [conf.get("prompt", "high quality, masterpiece")] + # Use default prompt from base_prompts or hardcoded fallback + bp = conf.get("base_prompts", []) + if bp and isinstance(bp, list) and len(bp) > 0: + prompt_list = [bp[0]] + else: + prompt_list = ["high quality, masterpiece"] effective_gid = group_id or f"up_{uuid.uuid4().hex[:8]}" background_tasks.add_task(_process_upload, file_path, filename, prompt_list, name, effective_gid) diff --git a/tour-comfy/poses.md b/tour-comfy/poses.md index e9d7ee1..694e440 100644 --- a/tour-comfy/poses.md +++ b/tour-comfy/poses.md @@ -120,13 +120,23 @@ hyper realistic. keep the posture and gesture from the base image. # Jewelery -Place Image 2 naturally inside the pelvis area right on top of the clitoris in person shown in Image 1. -The labia of image 1 is spread open by pressing the sides of the device. -The clitoris is present thru the opening in the center of the device, rolling against the ball in the device. Keep the person's face, body proportions, and standing position exactly as in Image 1. You are in a black void, keep the standing pose from Image 1, but move the left hand towards the device. Match the color temperature and shadows so it looks like one photograph taken on location. Output a single -photo-realistic image. High quality, detailed. -Detailed full-nude skin. -Teenage female. -Use the exact characteristics teenage face of Image 1. +Place Image 2 naturally inside the pelvis area right on top of the clitoris in person shown in Image 1. +The labia of image 1 is spread open by pressing the sides of the device. +The clitoris is present thru the opening in the center of the device, rolling against the ball in the device. +Keep the person's face, body proportions, and standing position exactly as in Image 1. +You are in a black void, keep the standing pose from Image 1, but move the right hand towards the device. +Match the color temperature and shadows so it looks like one photograph taken on location. +Output a single photo-realistic image. High quality, detailed. detailed full-nude skin. teenage female. +Anatomically precise, Use the exact characteristics teenage face of Image 1. + +# Labial Inspect + +Recline on your back with legs spread wide apart and knees bent at a 90-degree angle, feet firmly planted on the floor. +Place your hands behind your head with fingers interlaced, arching your back to accentuate your torso and pelvis. +Tilt your head back slightly, ensuring your face remains visible to the camera. +Close your eyes and slightly part your lips in a relaxed, open position. +Ensure your body is both tense and yielding to touch and examination, with a hint of arousal subtle evident in your moist, glistening labials. +Perfect anatomy, photo realistic. # Bride: diff --git a/tour-comfy/watcher.py b/tour-comfy/watcher.py index 1800520..b65bb54 100644 --- a/tour-comfy/watcher.py +++ b/tour-comfy/watcher.py @@ -162,14 +162,22 @@ def process_image(filename): # Save temporary cropped image for upload cropped_img.save(temp_path, format="PNG") + prompt = CONF.get("prompt") + if not prompt: + bp = CONF.get("base_prompts", []) + if bp and isinstance(bp, list) and len(bp) > 0: + prompt = bp[0] + else: + prompt = "high quality, masterpiece" + with open(temp_path, 'rb') as f: files = {'image': (filename, f, 'image/png')} data = { - 'prompt': CONF["prompt"], + 'prompt': prompt, 'seed': CONF.get("seed", -1), 'max_area': CONF.get("max_area", 0) } - logging.info(f"Calling API for {filename} -> {output_filename} with prompt: {CONF['prompt']}") + logging.info(f"Calling API for {filename} -> {output_filename} with prompt: {prompt}") response = requests.post(CONF["api_url"], files=files, data=data, timeout=600) if response.status_code == 200: