From 0176c1b9656673276da50ed0019a35556a0f958e Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 20 Jun 2026 02:43:57 +0200 Subject: [PATCH] aa --- app.py => .trash/app.py | 0 .trash/groups.json | 321 +++ {tour-comfy => .trash}/names.json | 5 +- optimization.py => .trash/optimization.py | 0 README.md | 14 - example.py | 23 - optimize_clips.py | 152 -- qwenimage/__init__.py | 0 tour-comfy/car.html | 196 +- tour-comfy/database.py | 33 +- tour-comfy/edit_api.py | 124 +- tour-comfy/naming.py | 131 +- tour-comfy/old_car.html | 2219 +++++++++++++++++++++ tour-comfy/poses.md | 104 +- tour-comfy/processed.json | 207 +- tour-comfy/watcher.log | 685 +++++++ 16 files changed, 3820 insertions(+), 394 deletions(-) rename app.py => .trash/app.py (100%) create mode 100644 .trash/groups.json rename {tour-comfy => .trash}/names.json (78%) rename optimization.py => .trash/optimization.py (100%) delete mode 100644 README.md delete mode 100644 example.py delete mode 100644 optimize_clips.py delete mode 100644 qwenimage/__init__.py create mode 100644 tour-comfy/old_car.html diff --git a/app.py b/.trash/app.py similarity index 100% rename from app.py rename to .trash/app.py diff --git a/.trash/groups.json b/.trash/groups.json new file mode 100644 index 0000000..c5bcd91 --- /dev/null +++ b/.trash/groups.json @@ -0,0 +1,321 @@ +{ + "20260617_005040_img_56.png": "cg_077c3625", + "20260617_005026_img_55.png": "cg_077c3625", + "20260617_014351_img_66.png": "cg_9be4f76c", + "20260617_013150_img_66.png": "cg_9be4f76c", + "20260617_013327_img_67.png": "cg_9be4f76c", + "20260617_013211_img_65.png": "cg_9be4f76c", + "20260617_013035_img_64.png": "cg_9be4f76c", + "20260617_013111_img_63.png": "cg_9be4f76c", + "20260616_005752_img_21.png": "cg_07d742c0", + "20260616_005727_img_19.png": "cg_07d742c0", + "20260615_151614_img_93.png": "cg_74544975", + "20260615_145017_img_93.png": "cg_74544975", + "20260615_151829_img_92.png": "cg_74544975", + "img_9.png": "cg_74544975", + "20260617_133832_img_81.png": "cg_85873ed2", + "20260617_133917_img_82.png": "cg_85873ed2", + "20260617_134119_img_85.png": "cg_85873ed2", + "20260617_134229_img_83.png": "cg_85873ed2", + "20260618_004930_20260617_134041_img_84.png": "cg_85873ed2", + "20260618_004501_20260617_134041_img_84.png": "cg_85873ed2", + "20260617_134041_img_84.png": "cg_85873ed2", + "20260618_011507_20260617_134615_img_86.png": "cg_85873ed2", + "20260617_134615_img_86.png": "cg_85873ed2", + "20260618_011633_t159zr-1.png": "cg_85873ed2", + "t159zr-1.png": "cg_85873ed2", + "20260618_004919_kbk99v.png": "cg_a5a45c98", + "kbk99v.png": "cg_a5a45c98", + "20260618_004941_out7.png": "cg_a5a45c98", + "out7.png": "cg_a5a45c98", + "20260618_004334_Pasted image (3).png": "cg_0290aa0c", + "Pasted image (3).png": "cg_0290aa0c", + "20260618_002025_20260616_020020_img_35.png": "cg_0290aa0c", + "20260616_020020_img_35.png": "cg_0290aa0c", + "20260618_004428_20260616_015949_img_37.png": "cg_0290aa0c", + "20260618_002036_20260616_015949_img_37.png": "cg_0290aa0c", + "20260616_015949_img_37.png": "cg_0290aa0c", + "20260616_020059_img_38.png": "cg_0290aa0c", + "20260616_015919_img_33.png": "cg_4ae30667", + "20260616_015850_img_34.png": "cg_4ae30667", + "20260616_011823_imgxxxx.png": "cg_800abf94", + "20260615_152252_imgxxx.png": "cg_800abf94", + "tp236b.png": "cg_f55e9e4a", + "out.png": "cg_f55e9e4a", + "out2.png": "cg_f55e9e4a", + "p13.png": "cg_4e575e1d", + "pa0.png": "cg_4e575e1d", + "Pasted image (5).png": "cg_85873ed2", + "img_3.png": "cg_53eda359", + "Pasted image.png": "cg_53eda359", + "out3.png": "cg_53eda359", + "20260615_155354_others.jpeg": "cg_569ddd5e", + "20260615_154852_other.jpeg": "cg_569ddd5e", + "20260615_154333_other.jpeg": "cg_1c0c5074", + "20260618_004407_20260616_002456_test123.jpeg": "cg_569ddd5e", + "20260616_002456_test123.jpeg": "cg_569ddd5e", + "20260618_013512_Pasted image (9).png": "cg_809653a0", + "Pasted image (9).png": "cg_809653a0", + "20260615_155756_img_6v1.png": "cg_2b3ab0b0", + "20260616_002302_image.png": "cg_2b3ab0b0", + "20260618_011622_jb1.png": "cg_ee004a75", + "jb1.png": "cg_ee004a75", + "20260618_010649_20260615_150340_test.png": "cg_ee004a75", + "20260615_150340_test.png": "cg_ee004a75", + "20260618_045745_7_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045734_6_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045723_5_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045656_20260618_045450_test_clipboard.png": "cg_32d91763", + "20260618_045629_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045450_test_clipboard.png": "cg_32d91763", + "20260618_045703_4_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045652_3_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045631_2_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045620_1_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045608_0_20260618_045549_test_clipboard.png": "cg_32d91763", + "20260618_045539_3_20260618_045450_test_clipboard.png": "cg_32d91763", + "20260618_045528_2_20260618_045450_test_clipboard.png": "cg_32d91763", + "20260618_045500_0_20260618_045450_test_clipboard.png": "cg_32d91763", + "20260618_045450_4_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045439_3_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045428_2_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045418_1_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_045407_0_20260618_045234_test_clipboard.png": "cg_32d91763", + "20260618_051052_9_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_051040_8_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_051029_7_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_051017_6_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_051006_5_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050955_4_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050929_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050935_3_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050902_0_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050913_1_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_050923_2_20260618_050846_img_4.png": "cg_b5b937c7", + "20260618_053530_2_20260618_053458_image.png": "cg_bc58b958", + "20260618_220856_2_20260618_053458_image.png": "cg_bc58b958", + "20260618_220907_2_20260618_053458_image.png": "cg_bc58b958", + "20260618_220918_2_20260618_053458_image.png": "cg_bc58b958", + "Pasted image (7).png": "cg_0290aa0c", + "20260616_021235_img_47.png": "cg_0290aa0c", + "20260616_020035_img_36.png": "cg_0290aa0c", + "20260618_002014_20260616_020035_img_36.png": "cg_0290aa0c", + "20260618_011517_20260618_002014_20260616_020035_img_36.png": "cg_0290aa0c", + "Pasted image (4).png": "cg_0290aa0c", + "20260618_010700_Pasted image (4).png": "cg_0290aa0c", + "20260618_015156_20260618_010700_Pasted image (4).png": "cg_0290aa0c", + "20260616_023306_img_52.png": "cg_571ceb34", + "20260616_022349_img_48.png": "cg_571ceb34", + "20260616_022543_img_50.png": "cg_571ceb34", + "20260618_015102_20260616_022543_img_50.png": "cg_571ceb34", + "20260618_124203_image.png": "cg_f1e85987", + "20260618_124440_6_20260618_124203_image.png": "cg_f1e85987", + "20260618_124424_5_20260618_124203_image.png": "cg_f1e85987", + "20260618_124412_4_20260618_124203_image.png": "cg_f1e85987", + "20260618_124355_3_20260618_124203_image.png": "cg_f1e85987", + "20260618_124334_2_20260618_124203_image.png": "cg_f1e85987", + "20260618_124316_1_20260618_124203_image.png": "cg_f1e85987", + "20260618_124256_0_20260618_124203_image.png": "cg_f1e85987", + "20260618_122931_image.png": "cg_f1e85987", + "20260618_123315_8_20260618_122931_image.png": "cg_f1e85987", + "20260618_123257_7_20260618_122931_image.png": "cg_f1e85987", + "20260618_123244_6_20260618_122931_image.png": "cg_f1e85987", + "20260618_123227_5_20260618_122931_image.png": "cg_f1e85987", + "20260618_123210_4_20260618_122931_image.png": "cg_f1e85987", + "20260618_123153_3_20260618_122931_image.png": "cg_f1e85987", + "20260618_123132_2_20260618_122931_image.png": "cg_f1e85987", + "20260618_123119_1_20260618_122931_image.png": "cg_f1e85987", + "20260618_123104_0_20260618_122931_image.png": "cg_f1e85987", + "20260618_132718_image.png": "cg_7e0e0569", + "20260618_133011_9_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132956_8_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132941_7_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132923_6_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132906_5_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132848_4_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132831_3_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132817_2_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132806_1_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132755_0_20260618_132718_image.png": "cg_7e0e0569", + "20260618_133023_10_20260618_132718_image.png": "cg_7e0e0569", + "20260618_132215_image.png": "cg_7e0e0569", + "20260618_132450_8_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132432_7_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132414_6_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132357_5_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132340_4_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132323_3_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132305_2_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132248_1_20260618_132215_image.png": "cg_7e0e0569", + "20260618_132232_0_20260618_132215_image.png": "cg_7e0e0569", + "20260618_131909_image.png": "cg_7e0e0569", + "20260618_132152_8_20260618_131909_image.png": "cg_7e0e0569", + "20260618_132134_7_20260618_131909_image.png": "cg_7e0e0569", + "20260618_132114_6_20260618_131909_image.png": "cg_7e0e0569", + "20260618_132054_5_20260618_131909_image.png": "cg_7e0e0569", + "20260618_132035_4_20260618_131909_image.png": "cg_7e0e0569", + "20260618_132017_3_20260618_131909_image.png": "cg_7e0e0569", + "20260618_131959_2_20260618_131909_image.png": "cg_7e0e0569", + "20260618_131943_1_20260618_131909_image.png": "cg_7e0e0569", + "20260618_131926_0_20260618_131909_image.png": "cg_7e0e0569", + "20260618_131624_image.png": "cg_7e0e0569", + "20260618_131822_8_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131811_7_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131759_6_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131747_5_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131736_4_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131725_3_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131713_2_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131702_1_20260618_131624_image.png": "cg_7e0e0569", + "20260618_131651_0_20260618_131624_image.png": "cg_7e0e0569", + "20260618_172500_image.png": "cg_08203e88", + "20260618_172641_8_20260618_172500_image.png": "cg_08203e88", + "20260618_172630_7_20260618_172500_image.png": "cg_08203e88", + "20260618_172618_6_20260618_172500_image.png": "cg_08203e88", + "20260618_172607_5_20260618_172500_image.png": "cg_08203e88", + "20260618_172555_4_20260618_172500_image.png": "cg_08203e88", + "20260618_172544_3_20260618_172500_image.png": "cg_08203e88", + "20260618_172532_2_20260618_172500_image.png": "cg_08203e88", + "20260618_172521_1_20260618_172500_image.png": "cg_08203e88", + "20260618_172510_0_20260618_172500_image.png": "cg_08203e88", + "20260618_171448_image.png": "cg_08203e88", + "20260618_172015_8_20260618_171448_image.png": "cg_08203e88", + "20260618_171939_7_20260618_171448_image.png": "cg_08203e88", + "20260618_171906_6_20260618_171448_image.png": "cg_08203e88", + "20260618_171834_5_20260618_171448_image.png": "cg_08203e88", + "20260618_171802_4_20260618_171448_image.png": "cg_08203e88", + "20260618_171732_3_20260618_171448_image.png": "cg_08203e88", + "20260618_171706_2_20260618_171448_image.png": "cg_08203e88", + "20260618_171639_1_20260618_171448_image.png": "cg_08203e88", + "20260618_171624_0_20260618_171448_image.png": "cg_08203e88", + "20260618_171628_image.png": "cg_08203e88", + "20260618_172048_8_20260618_171628_image.png": "cg_08203e88", + "20260618_172032_7_20260618_171628_image.png": "cg_08203e88", + "20260618_171956_6_20260618_171628_image.png": "cg_08203e88", + "20260618_171923_5_20260618_171628_image.png": "cg_08203e88", + "20260618_171851_4_20260618_171628_image.png": "cg_08203e88", + "20260618_171819_3_20260618_171628_image.png": "cg_08203e88", + "20260618_171746_2_20260618_171628_image.png": "cg_08203e88", + "20260618_171717_1_20260618_171628_image.png": "cg_08203e88", + "20260618_171655_0_20260618_171628_image.png": "cg_08203e88", + "20260617_015728_img_70.png": "cg_f6e02c38", + "20260617_015611_img_69.png": "cg_f6e02c38", + "20260617_133154_img_78.png": "cg_75340e8e", + "20260617_133411_img_79.png": "cg_75340e8e", + "p1.png": "cg_a5a45c98", + "20260618_004909_p1.png": "cg_a5a45c98", + "20260618_004345_p1.png": "cg_a5a45c98", + "20260615_150812_img_19_2.png": "cg_a5a45c98", + "20260618_004847_20260615_150812_img_19_2.png": "cg_a5a45c98", + "20260618_011434_20260618_004847_20260615_150812_img_19_2.png": "cg_a5a45c98", + "20260618_015052_20260618_004407_20260616_002456_test123.jpeg": "cg_569ddd5e", + "20260618_223501_image.png": "solo:20260618_223501_image.png", + "20260618_223557_2_20260618_223501_image.png": "solo:20260618_223557_2_20260618_223501_image.png", + "20260618_223541_1_20260618_223501_image.png": "solo:20260618_223541_1_20260618_223501_image.png", + "20260618_223525_0_20260618_223501_image.png": "solo:20260618_223525_0_20260618_223501_image.png", + "20260619_040307_7_20260619_040135_image.png": "solo:20260619_040307_7_20260619_040135_image.png", + "20260619_040319_8_20260619_040135_image.png": "solo:20260619_040319_8_20260619_040135_image.png", + "20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041924_8_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041902_7_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041839_6_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041734_3_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041818_5_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041756_4_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041711_2_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041650_1_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_041628_0_20260619_041612_image.png": "cg_8c8d8ec9", + "20260619_040221_3_20260619_040135_image.png": "cg_8c8d8ec9", + "20260619_040158_1_20260619_040135_image.png": "cg_84349b43", + "20260619_043405_1_20260619_040135_image.png": "cg_d193128f", + "20260619_043433_1_20260619_040135_image.png": "cg_84349b43", + "20260619_040135_image.png": "cg_84349b43", + "20260619_041913_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041850_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041829_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041806_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041744_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041722_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041701_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041639_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041618_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041555_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041544_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041533_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041522_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041511_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041500_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041449_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041438_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041427_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041417_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041406_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041355_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041334_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041323_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041041_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041030_1_20260619_040135_image.png": "cg_84349b43", + "20260619_041020_1_20260619_040135_image.png": "cg_84349b43", + "20260619_040147_0_20260619_040135_image.png": "cg_84349b43", + "20260619_040209_2_20260619_040135_image.png": "cg_84349b43", + "20260619_040255_6_20260619_040135_image.png": "cg_84349b43", + "20260619_040244_5_20260619_040135_image.png": "cg_84349b43", + "20260619_040233_4_20260619_040135_image.png": "solo:20260619_040233_4_20260619_040135_image.png", + "20260619_043740_1_20260619_040135_image.png": "cg_84349b43", + "20260618_052526_image.png": "cg_7ec17537", + "20260618_052708_8_20260618_052526_image.png": "cg_7ec17537", + "20260618_052657_7_20260618_052526_image.png": "cg_7ec17537", + "20260618_052645_6_20260618_052526_image.png": "cg_7ec17537", + "20260618_052634_5_20260618_052526_image.png": "cg_7ec17537", + "20260618_052622_4_20260618_052526_image.png": "cg_7ec17537", + "20260618_052611_3_20260618_052526_image.png": "cg_7ec17537", + "20260618_052559_2_20260618_052526_image.png": "cg_7ec17537", + "20260618_052548_1_20260618_052526_image.png": "cg_7ec17537", + "20260618_052537_0_20260618_052526_image.png": "cg_7ec17537", + "20260619_052235_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_052030_mr_mr_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_052351_mr_mr_mr_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_052514_mr_1_20260618_052526_image.png": "cg_ed2e43d1", + "20260619_051326_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_051905_mr_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_050945_image.png": "cg_ed2e43d1", + "20260619_125445_mr_7_20260619_124038_image.png": "cg_ed2e43d1", + "20260619_125434_mr_mr_1_20260619_040135_image.png": "cg_ed2e43d1", + "20260619_125654_mr_mr_7_20260619_124038_image.png": "cg_ed2e43d1", + "20260619_130043_mr_1_20260619_124038_image.png": "cg_ed2e43d1", + "20260619_130001_mr_1_20260619_124038_image.png": "cg_6f321af3", + "20260619_124635_mr_7_20260619_124038_image.png": "cg_6f321af3", + "20260619_123958_image.png": "cg_6f321af3", + "20260619_124529_8_20260619_123958_image.png": "cg_6f321af3", + "20260619_124508_7_20260619_123958_image.png": "cg_6f321af3", + "20260619_124446_6_20260619_123958_image.png": "cg_6f321af3", + "20260619_124421_5_20260619_123958_image.png": "cg_6f321af3", + "20260619_124351_4_20260619_123958_image.png": "cg_6f321af3", + "20260619_124316_3_20260619_123958_image.png": "cg_6f321af3", + "20260619_124242_2_20260619_123958_image.png": "cg_6f321af3", + "20260619_124210_1_20260619_123958_image.png": "cg_6f321af3", + "20260619_124139_0_20260619_123958_image.png": "cg_6f321af3", + "20260619_124038_image.png": "cg_6f321af3", + "20260619_124540_8_20260619_124038_image.png": "cg_6f321af3", + "20260619_124518_7_20260619_124038_image.png": "cg_6f321af3", + "20260619_124456_6_20260619_124038_image.png": "cg_6f321af3", + "20260619_124435_5_20260619_124038_image.png": "cg_6f321af3", + "20260619_124407_4_20260619_124038_image.png": "cg_6f321af3", + "20260619_124333_3_20260619_124038_image.png": "cg_6f321af3", + "20260619_124258_2_20260619_124038_image.png": "cg_6f321af3", + "20260619_124226_1_20260619_124038_image.png": "cg_6f321af3", + "20260619_124154_0_20260619_124038_image.png": "cg_6f321af3", + "20260619_184116_image.png": "cg_6f321af3", + "20260619_184259_8_20260619_184116_image.png": "cg_6f321af3", + "20260619_184248_7_20260619_184116_image.png": "cg_6f321af3", + "20260619_184236_6_20260619_184116_image.png": "cg_6f321af3", + "20260619_184225_5_20260619_184116_image.png": "cg_6f321af3", + "20260619_184214_4_20260619_184116_image.png": "cg_6f321af3", + "20260619_184202_3_20260619_184116_image.png": "cg_6f321af3", + "20260619_184150_2_20260619_184116_image.png": "cg_6f321af3", + "20260619_184139_1_20260619_184116_image.png": "cg_6f321af3", + "20260619_184128_0_20260619_184116_image.png": "cg_6f321af3" +} \ No newline at end of file diff --git a/tour-comfy/names.json b/.trash/names.json similarity index 78% rename from tour-comfy/names.json rename to .trash/names.json index a52e546..a6cebf1 100644 --- a/tour-comfy/names.json +++ b/.trash/names.json @@ -6,5 +6,8 @@ "20260618_045831_20260618_045549_test_clipboard.png": "1girl breasts nipples solo nude blue skin pussy head out of frame", "20260618_050929_20260618_050846_img_4.png": "1girl solo blue skin nipples nude head out of frame breasts navel", "20260618_051629_20260618_051435_test_group.png": "1girl breasts solo nipples realistic nude head out of frame navel", - "20260618_052008_20260618_051426_test_group.png": "1girl breasts solo nipples nude head out of frame navel realistic" + "20260618_052008_20260618_051426_test_group.png": "1girl breasts solo nipples nude head out of frame navel realistic", + "20260619_123958_image.png": "Solo 1Female", + "20260619_172708_image.png": "Bicycle Fem", + "20260619_172850_8_20260619_172708_image.png": "Bicycle 1 female" } \ No newline at end of file diff --git a/optimization.py b/.trash/optimization.py similarity index 100% rename from optimization.py rename to .trash/optimization.py diff --git a/README.md b/README.md deleted file mode 100644 index 43acc5c..0000000 --- a/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Qwen Image Edit Rapid AIO (NSFW) -emoji: 🌍 -colorFrom: pink -colorTo: pink -sdk: gradio -sdk_version: 6.1.0 -app_file: app.py -pinned: true -tags: - - not-for-all-audiences ---- - -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference diff --git a/example.py b/example.py deleted file mode 100644 index 7eb6f0b..0000000 --- a/example.py +++ /dev/null @@ -1,23 +0,0 @@ -def calculate_area(length, width): - """ - Calculate the area of a rectangle. - - Args: - length (float): The length of the rectangle - width (float): The width of the rectangle - - Returns: - float: The area of the rectangle - """ - if length <= 0 or width <= 0: - raise ValueError("Length and width must be positive numbers") - - return length * width - -# Example usage -if __name__ == "__main__": - try: - area = calculate_area(5, 3) - print(f"The area is: {area}") - except ValueError as e: - print(f"Error: {e}") \ No newline at end of file diff --git a/optimize_clips.py b/optimize_clips.py deleted file mode 100644 index e3a912a..0000000 --- a/optimize_clips.py +++ /dev/null @@ -1,152 +0,0 @@ -import os -import glob -import shutil -import subprocess -import tempfile -import threading -import time -CLIPS_DIR = "/data/events/clips" -ARCHIVE_DIR = "/mnt/tour-big/clips" -SIZE_THRESHOLD_MB = 200 -SIZE_THRESHOLD_BYTES = SIZE_THRESHOLD_MB * 1024 * 1024 -MAX_PER_RUN = 20 - - -def has_nvenc(): - r = subprocess.run(["ffmpeg", "-hide_banner", "-encoders"], - stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) - return b"hevc_nvenc" in r.stdout - - -def _ffmpeg(cmd): - return subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) - - -def _proxy_cmd(src, dst, hw): - """10fps H.265 proxy for quick local browsing.""" - if hw: - return ["ffmpeg", "-y", - "-hwaccel", "cuda", "-hwaccel_output_format", "cuda", - "-i", src, - "-vcodec", "hevc_nvenc", "-rc", "constqp", "-qp", "28", "-preset", "p4", - "-r", "10", "-tag:v", "hvc1", "-acodec", "copy", dst] - return ["ffmpeg", "-y", "-i", src, - "-vcodec", "libx265", "-crf", "28", "-preset", "medium", - "-r", "10", "-tag:v", "hvc1", "-acodec", "copy", dst] - - -def _archive_cmd(src, dst, hw): - """Full-fps high-quality H.265 for archive — small enough to pull back fast over slow SMB.""" - if hw: - return ["ffmpeg", "-y", - "-hwaccel", "cuda", "-hwaccel_output_format", "cuda", - "-i", src, - "-vcodec", "hevc_nvenc", "-rc", "vbr", "-cq", "19", "-b:v", "0", - "-preset", "p6", "-tune", "hq", - "-tag:v", "hvc1", "-acodec", "copy", dst] - return ["ffmpeg", "-y", "-i", src, - "-vcodec", "libx265", "-crf", "19", "-preset", "slow", - "-tag:v", "hvc1", "-acodec", "copy", dst] - - -def _encode_worker(label, cmd, hw, fallback_cmd, out): - proc = _ffmpeg(cmd) - if proc.returncode != 0 and hw: - print(f" [{label}] NVENC failed, retrying in software...") - proc = _ffmpeg(fallback_cmd) - out[label] = proc - - -def process(src, orig_size, hw): - name = os.path.basename(src) - archive_dst = os.path.join(ARCHIVE_DIR, name) - - if os.path.exists(archive_dst): - print(f" Skip {name} — already archived") - return 0 - - proxy_tmp = src + ".proxy.mp4" - # Encode archive to local /tmp first — never write directly to a slow SMB share - archive_tmp = os.path.join(tempfile.gettempdir(), name + ".archive.mp4") - - print(f"[{name}] {orig_size/(1024*1024):.0f} MB ({'NVENC' if hw else 'software'})") - t0 = time.time() - - results = {} - threads = [ - threading.Thread(target=_encode_worker, args=( - "proxy", - _proxy_cmd(src, proxy_tmp, hw), hw, - _proxy_cmd(src, proxy_tmp, False), - results, - )), - threading.Thread(target=_encode_worker, args=( - "archive", - _archive_cmd(src, archive_tmp, hw), hw, - _archive_cmd(src, archive_tmp, False), - results, - )), - ] - for t in threads: t.start() - for t in threads: t.join() - - failed = {k: v for k, v in results.items() if v.returncode != 0} - if failed: - for label, proc in failed.items(): - print(f" [{label}] error: {proc.stderr.decode()[-300:]}") - for f in (proxy_tmp, archive_tmp): - if os.path.exists(f): os.remove(f) - return 0 - - proxy_mb = os.path.getsize(proxy_tmp) / (1024*1024) - archive_mb = os.path.getsize(archive_tmp) / (1024*1024) - orig_mb = orig_size / (1024*1024) - print(f" proxy {orig_mb:.0f}->{proxy_mb:.0f} MB " - f"archive {orig_mb:.0f}->{archive_mb:.0f} MB " - f"({time.time()-t0:.1f}s) — pushing archive to share...") - - try: - shutil.move(archive_tmp, archive_dst) - except Exception as e: - print(f" Archive move failed: {e} — aborting, original intact") - for f in (proxy_tmp, archive_tmp): - if os.path.exists(f): os.remove(f) - return 0 - - # Atomic swap: original -> proxy (same filesystem) - os.replace(proxy_tmp, src) - freed = orig_size - os.path.getsize(src) - print(f" Done freed locally: {freed/(1024*1024):.0f} MB") - return freed - - -if __name__ == "__main__": - hw = has_nvenc() - print(f"Encoder: {'hevc_nvenc (A6000, 2x parallel)' if hw else 'libx265 (software)'}") - print(f"Clips: {CLIPS_DIR}") - print(f"Archive: {ARCHIVE_DIR}\n") - - if not os.path.isdir(ARCHIVE_DIR): - print(f"ERROR: archive not reachable: {ARCHIVE_DIR}") - raise SystemExit(1) - - files = sorted( - [(fp, os.path.getsize(fp)) - for fp in glob.glob(os.path.join(CLIPS_DIR, "*.mp4")) - if os.path.isfile(fp) and os.path.getsize(fp) > SIZE_THRESHOLD_BYTES], - key=lambda x: x[1], reverse=True, - ) - print(f"Found {len(files)} files > {SIZE_THRESHOLD_MB} MB\n") - - total_freed = 0 - done = 0 - for path, size in files: - freed = process(path, size, hw) - total_freed += freed - if freed: - done += 1 - if done >= MAX_PER_RUN: - print(f"Reached {MAX_PER_RUN}-file limit.") - break - - print(f"\nDone. Processed: {done} Freed locally: {total_freed/(1024*1024):.0f} MB") diff --git a/qwenimage/__init__.py b/qwenimage/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tour-comfy/car.html b/tour-comfy/car.html index 986ecb3..433e79a 100644 --- a/tour-comfy/car.html +++ b/tour-comfy/car.html @@ -649,6 +649,92 @@ #uploadInput { display: none; } + /* --- lightbox variant strip --- */ + #lbVariantStrip { + display: none; + flex-direction: row; + gap: 6px; + overflow-x: auto; + padding: 6px 2px 2px; + width: 100%; + scrollbar-width: thin; + scrollbar-color: #444 transparent; + } + .lb-var-thumb { + flex: 0 0 auto; + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + cursor: pointer; + opacity: 0.5; + transition: opacity 0.15s; + max-width: 60px; + } + .lb-var-thumb:hover { opacity: 0.85; } + .lb-var-thumb.active { opacity: 1; outline: 2px solid #60a5fa; border-radius: 4px; } + .lb-var-thumb img { + width: 52px; height: 52px; + object-fit: cover; + border-radius: 4px; + display: block; + } + .lb-var-pose { + font-size: 7px; + color: #999; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 58px; + } + + /* --- group card grid overview --- */ + .card-grid { + position: absolute; + inset: 0; + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr; + gap: 2px; + background: #111; + } + .card-grid-thumb { + position: relative; + overflow: hidden; + cursor: pointer; + } + .card-grid-thumb img { + width: 100%; height: 100%; + object-fit: cover; + display: block; + } + .card-grid-thumb .thumb-pose { + position: absolute; + bottom: 0; left: 0; right: 0; + background: rgba(0,0,0,0.72); + font-size: 7px; + color: #ccc; + padding: 1px 3px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; + pointer-events: none; + } + .card-grid-more { + position: absolute; + inset: 0; + background: rgba(0,0,0,0.55); + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + font-weight: 700; + color: #fff; + pointer-events: none; + } + /* --- privacy overlay --- */ .privacy-overlay { display: none; @@ -718,6 +804,7 @@ +
@@ -764,11 +851,13 @@ - + + +
@@ -1068,8 +1157,13 @@ let fileHidden = {}; // filename → boolean (hidden from cycling) let fileHasBg = {}; // filename → boolean (has background, default true) let fileSourceRefs = {}; // filename → array of source filenames + let fileHasClothing = {}; // filename → boolean|null (null = unknown) let privacyMode = localStorage.getItem('privacyMode') === 'true'; + function escHtml(s) { + return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); + } + function getBaseName(name) { return name.replace(/^(\d{8}_\d{6}_)+/, ''); } @@ -1155,6 +1249,11 @@ updateLightbox(); } + function lbNavTo(idx) { + lbIdx = idx; + updateLightbox(); + } + function updateLightbox() { document.getElementById('lbImg').src = lbUrls[lbIdx]; const fname = lbNames[lbIdx]; @@ -1181,7 +1280,8 @@ document.getElementById('lbEyeBtn').title = hidden ? 'Show in cycling' : 'Hide from cycling'; // No BG button — hide when image already has no background - document.getElementById('lbNoBgBtn').style.display = fileHasBg[fname] !== false ? '' : 'none'; + document.getElementById('lbNoBgBtn').style.display = fileHasBg[fname] !== false ? '' : 'none'; + document.getElementById('lbUndressBtn').style.display = fileHasClothing[fname] === true ? '' : 'none'; // Source refs — show small clickable thumbnails const refs = fileSourceRefs[fname]; @@ -1207,6 +1307,26 @@ // ★ Preferred — shown when not already the first image const prefBtn = document.getElementById('lbPreferredBtn'); prefBtn.style.display = multi && lbIdx > 0 ? '' : 'none'; + + // Variant strip — thumbnails + pose labels for every image in the group + const strip = document.getElementById('lbVariantStrip'); + if (multi) { + strip.style.display = 'flex'; + strip.innerHTML = lbUrls.map((url, i) => { + const n = lbNames[i]; + const pose = filePoses[n] || ''; + const act = i === lbIdx ? ' active' : ''; + return '
' + + '' + + (pose ? '
' + escHtml(pose) + '
' : '') + + '
'; + }).join(''); + // Scroll active thumb into view + const active = strip.querySelector('.lb-var-thumb.active'); + if (active) active.scrollIntoView({ block: 'nearest', inline: 'center' }); + } else { + strip.style.display = 'none'; + } } async function updateName() { @@ -1524,7 +1644,7 @@ // Primary: live list from API (always up to date, works after batch jobs) try { - const r = await fetch(`${API}/images`, { signal: AbortSignal.timeout(3000) }); + const r = await fetch(`${API}/images`, { signal: AbortSignal.timeout(12000) }); if (r.ok) { const data = await r.json(); files = data.images.map(img => img.filename); @@ -1537,7 +1657,8 @@ 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; - fileHasBg[img.filename] = img.has_background !== false; + fileHasBg[img.filename] = img.has_background !== false; + fileHasClothing[img.filename] = img.has_clothing ?? null; if (img.source_refs) { try { fileSourceRefs[img.filename] = JSON.parse(img.source_refs); } catch(e) {} } @@ -1570,16 +1691,19 @@ } if (fileObjects.length === 0) { - gallery.innerHTML = ` -
- - - - - -

No images found

-

Place images in the output folder and refresh.

-
`; + // Only show "no images" if gallery is currently empty (avoid flash on slow API) + if (!gallery.querySelector('.image-card')) { + gallery.innerHTML = ` +
+ + + + + +

No images found

+

Place images in the output folder and refresh.

+
`; + } statusDot.classList.remove('updating'); return; } @@ -1615,7 +1739,6 @@ const label = groupDisplayName(group); const safeGid = gid.replace(/"/g, '"'); const poses = [...new Set(gf.map(f => filePoses[f.cleanName]).filter(Boolean))]; - // First visible image (fallback to first overall) const firstVisUrl = visibleIdx.length ? urls[visibleIdx[0]] : urls[0]; return ` @@ -1635,22 +1758,20 @@
${vCount > 1 ? `
${vCount}×${count !== vCount ? ` /${count}` : ''}
` : ''} - ${label} + ${label} ${vCount > 1 ? `
${visibleIdx.map((_, i) => ``).join('')}
` : ''}
${label}
#${String(currentGroups.length - gIdx).padStart(3, '0')} - ${poses.length ? `${poses[0]}` : ''} + ${poses.length ? `${escHtml(poses[0])}` : ''} ${isRecent ? 'Latest' : ''}
`; }).join(''); - // Start cycling for groups with 2+ visible images currentGroups.forEach(g => { const data = groupData.get(g.gid); if (data && data.visibleIdx && data.visibleIdx.length > 1) startGroupCycle(g.gid); @@ -2153,20 +2274,16 @@ }); }); - // Privacy overlay — show when window loses focus, hide on regain + // Privacy overlay — show on any focus loss; requires explicit dismiss (click overlay or P) window.addEventListener('blur', () => { if (privacyMode) document.getElementById('privacyOverlay').style.display = 'flex'; }); - window.addEventListener('focus', () => { - document.getElementById('privacyOverlay').style.display = 'none'; - }); - // Handle visibility change — refresh when tab becomes active; privacy on hide document.addEventListener('visibilitychange', () => { if (document.hidden) { if (privacyMode) document.getElementById('privacyOverlay').style.display = 'flex'; } else { - document.getElementById('privacyOverlay').style.display = 'none'; + // Don't auto-hide — user must click overlay or press P to dismiss loadImages(); } }); @@ -2196,6 +2313,35 @@ } catch(e) { console.error(e); } } + async function cleanupDb() { + try { + const r = await fetch(`${API}/db/cleanup`, { method: 'POST' }); + const d = await r.json(); + showToast(`Cleaned ${d.removed} orphan record${d.removed !== 1 ? 's' : ''}`); + if (d.removed > 0) refreshNow(); + } catch(e) { + showToast('Cleanup failed'); + } + } + + async function lbUndress() { + const fname = lbNames[lbIdx]; + if (!fname) return; + const btn = document.getElementById('lbUndressBtn'); + btn.textContent = '...'; + btn.disabled = true; + try { + const r = await fetch(`${API}/images/${encodeURIComponent(fname)}/undress`, {method:'POST'}); + if (!r.ok) { showToast('Undress failed', 'error'); return; } + showToast('Undress queued', 'success'); + } catch(e) { + showToast('Undress error', 'error'); + } finally { + btn.textContent = 'Undress'; + btn.disabled = false; + } + } + async function lbSetPreferred() { const fname = lbNames[lbIdx]; if (!fname) return; diff --git a/tour-comfy/database.py b/tour-comfy/database.py index a27d194..2f29e3c 100644 --- a/tour-comfy/database.py +++ b/tour-comfy/database.py @@ -25,6 +25,7 @@ def migrate_schema(): "ALTER TABLE person ADD COLUMN IF NOT EXISTS hidden BOOLEAN DEFAULT FALSE", "ALTER TABLE person ADD COLUMN IF NOT EXISTS has_background BOOLEAN DEFAULT TRUE", "ALTER TABLE person ADD COLUMN IF NOT EXISTS source_refs TEXT", + "ALTER TABLE person ADD COLUMN IF NOT EXISTS has_clothing BOOLEAN DEFAULT NULL", ]: cur.execute(sql) conn.commit() @@ -35,15 +36,15 @@ def migrate_schema(): 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_background=None, source_refs=None, has_clothing=None): conn = get_db_connection() cur = conn.cursor() try: cur.execute(""" INSERT INTO person (filename, filepath, name, group_id, tags, embedding, clip_description, prompt, pose, sort_order, group_name, hidden, - has_background, source_refs) - VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + has_background, source_refs, has_clothing) + VALUES (%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), @@ -57,11 +58,12 @@ def upsert_person(filename, filepath=None, name=None, group_id=None, tags=None, group_name = COALESCE(EXCLUDED.group_name, person.group_name), hidden = COALESCE(EXCLUDED.hidden, person.hidden), has_background = COALESCE(EXCLUDED.has_background, person.has_background), - source_refs = COALESCE(EXCLUDED.source_refs, person.source_refs); + source_refs = COALESCE(EXCLUDED.source_refs, person.source_refs), + has_clothing = COALESCE(EXCLUDED.has_clothing, person.has_clothing); """, (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_background, source_refs, has_clothing)) conn.commit() finally: cur.close() @@ -83,7 +85,8 @@ def get_person(filename): try: cur.execute(""" SELECT name, group_id, tags, embedding, clip_description, filepath, - prompt, pose, sort_order, group_name, hidden, has_background, source_refs + prompt, pose, sort_order, group_name, hidden, has_background, source_refs, + has_clothing FROM person WHERE filename = %s """, (filename,)) return cur.fetchone() @@ -97,7 +100,8 @@ def list_persons(): try: cur.execute(""" SELECT filename, name, group_id, clip_description, - prompt, pose, sort_order, group_name, hidden, has_background, source_refs + prompt, pose, sort_order, group_name, hidden, has_background, source_refs, + has_clothing FROM person """) return cur.fetchall() @@ -194,6 +198,21 @@ def set_group_name(group_id, name): cur.close() conn.close() +def get_next_sort_order(group_id): + """Return max(sort_order)+1 for the group, or 1 if no sorted members exist.""" + conn = get_db_connection() + cur = conn.cursor() + try: + cur.execute( + "SELECT COALESCE(MAX(sort_order), 0) + 1 FROM person WHERE group_id = %s", + (group_id,) + ) + return cur.fetchone()[0] + finally: + cur.close() + conn.close() + + def get_all_group_names(): """Return {group_id: group_name} for groups that have a name set.""" conn = get_db_connection() diff --git a/tour-comfy/edit_api.py b/tour-comfy/edit_api.py index 70ae43e..14af495 100644 --- a/tour-comfy/edit_api.py +++ b/tour-comfy/edit_api.py @@ -62,6 +62,20 @@ MAX_SEED = 2**32 - 1 # Poses where the source image should be rotated 180° before pipeline for better results ROTATE_180_POSES = {"the dragon", "dragon", "the draak", "draak"} +# WD tagger tags that indicate the subject is wearing clothes +CLOTHING_TAGS = { + "dress", "skirt", "shirt", "top", "pants", "jeans", "jacket", "coat", + "swimsuit", "bikini", "shorts", "uniform", "hoodie", "sweater", "blouse", + "leggings", "stockings", "tights", "lingerie", "miniskirt", "pleated_skirt", + "school_uniform", "maid_dress", "bodysuit", "sailor_uniform", "leotard", + "corset", "kimono", "yukata", "cheongsam", "t-shirt", "tank_top", "crop_top", + "tube_top", "halter_top", "negligee", "nightgown", "pajamas", "trench_coat", + "vest", "bra", "underwear", "panties", "thong", "g-string", "bikini_top", + "bikini_bottom", "one-piece_swimsuit", "sports_bra", "gym_clothes", +} + +UNDRESS_PROMPT = "completely nude, bare skin, no clothing, naked body, natural skin texture" + with open(WORKFLOW_PATH, "r", encoding="utf-8") as f: BASE_WORKFLOW = json.load(f) @@ -338,6 +352,14 @@ def _detect_has_background(pil: Image.Image) -> bool: return transparent_px / (pil.width * pil.height) < 0.1 +def _detect_has_clothing(tags: list) -> bool | None: + """Return True if any tag from CLOTHING_TAGS appears above threshold, None if no tags.""" + if not tags: + return None + tag_names = {t["tag"] for t in tags} + return bool(tag_names & CLOTHING_TAGS) + + def _run_pipeline( pil: Image.Image, prompt: str, @@ -476,10 +498,11 @@ def _batch_worker(job_id: str, filenames: list, prompts: list[str], poses: list, try: embedding = embeddings.generate_embedding(out_path) + next_order = database.get_next_sort_order(actual_gid) database.upsert_person( out_name, filepath=out_path, embedding=embedding, group_id=actual_gid, prompt=prompt, pose=pose, - has_background=has_bg, + has_background=has_bg, sort_order=next_order, source_refs=json.dumps([fname]), ) except Exception as db_err: @@ -553,9 +576,10 @@ def _multi_ref_worker(job_id: str, filenames: list[str], prompts: list[str], pos try: embedding = embeddings.generate_embedding(out_path) + next_order = database.get_next_sort_order(output_gid) database.upsert_person(out_name, filepath=out_path, embedding=embedding, group_id=output_gid, prompt=prompt, pose=pose, - has_background=has_bg, + has_background=has_bg, sort_order=next_order, source_refs=json.dumps([f for f, _ in pils])) except Exception as db_err: print(f"DB error in multi-ref: {db_err}") @@ -672,9 +696,12 @@ def list_images(): # Try to get from DB first try: persons = database.list_persons() - # persons: (filename, name, group_id, clip_description, prompt, pose, sort_order, group_name, hidden, has_background, source_refs) + # persons: (filename, name, group_id, clip_description, prompt, pose, sort_order, group_name, hidden, has_background, source_refs, has_clothing) db_images = [] for p in persons: + fpath = os.path.join(output_dir, p[0]) + if not os.path.exists(fpath): + continue # skip orphan DB records whose file no longer exists db_images.append({ "filename": p[0], "name": p[1], @@ -687,10 +714,10 @@ def list_images(): "hidden": bool(p[8]) if p[8] else False, "has_background": bool(p[9]) if p[9] is not None else True, "source_refs": p[10], + "has_clothing": p[11], }) db_images.sort( - key=lambda x: os.path.getmtime(os.path.join(output_dir, x["filename"])) - if os.path.exists(os.path.join(output_dir, x["filename"])) else 0, + key=lambda x: os.path.getmtime(os.path.join(output_dir, x["filename"])), reverse=True, ) return {"images": db_images} @@ -723,16 +750,24 @@ def tag_image(req: TagRequest): pil = Image.open(fpath) tags = _run_tagger(pil, req.threshold) clip_desc = _tags_to_name(tags, req.max_tags) - auto_name = naming.generate_associative_name(tags) - + has_clothing = _detect_has_clothing(tags) + + # Only assign a new name if the image doesn't already have one + existing = database.get_person(req.filename) + auto_name = (existing[0] if existing and existing[0] else None) or naming.generate_associative_name(tags) + # Save to DB try: embedding = embeddings.generate_embedding(fpath) - database.upsert_person(req.filename, filepath=fpath, name=auto_name, clip_description=clip_desc, tags=tags, embedding=embedding, group_id=req.group_id) + database.upsert_person( + req.filename, filepath=fpath, name=auto_name, + clip_description=clip_desc, tags=tags, embedding=embedding, + group_id=req.group_id, has_clothing=has_clothing, + ) except Exception as db_err: print(f"Database error during tag: {db_err}") - return {"filename": req.filename, "clip_description": clip_desc, "tags": tags[:30]} + return {"filename": req.filename, "clip_description": clip_desc, "tags": tags[:30], "has_clothing": has_clothing} except Exception as e: raise HTTPException(500, str(e)) @@ -865,6 +900,20 @@ def get_similar(filename: str, limit: int = 10): return {"filename": filename, "similar": similar} +@app.post("/db/cleanup") +def db_cleanup(): + """Delete DB records for files that no longer exist on disk.""" + output_dir = _load_output_dir() + persons = database.list_persons() + removed = [] + for p in persons: + fpath = os.path.join(output_dir, p[0]) + if not os.path.exists(fpath): + database.delete_person(p[0]) + removed.append(p[0]) + return {"removed": len(removed), "filenames": removed} + + @app.get("/health") def health(): try: @@ -907,37 +956,43 @@ def _process_upload(file_path: str, filename: str, prompts: list[str], name: str # 1. CLIP tag the source tags = _run_tagger(pil.convert("RGB")) clip_desc = _tags_to_name(tags) + has_clothing = _detect_has_clothing(tags) auto_name = name or naming.generate_associative_name(tags) - + # 2. Embedding for source embedding = embeddings.generate_embedding(file_path) - - # 3. Register source in DB (optional, but good for tracking) - # We'll use the original filename or a timestamped one - database.upsert_person(filename, filepath=file_path, name=auto_name, clip_description=clip_desc, tags=tags, embedding=embedding, group_id=group_id) - - # 4. Default behavior: Crop if needed - # We'll use default values from watcher + + # 3. Register source in DB — sort_order=0 makes it the preferred base image + database.upsert_person( + filename, filepath=file_path, name=auto_name, + clip_description=clip_desc, tags=tags, embedding=embedding, + group_id=group_id, sort_order=0, has_clothing=has_clothing, + ) + + # 4. Crop if needed cropped_pil = _crop_to_bbox(pil) - + # 5. Run prompts for i, prompt in enumerate(prompts): try: - # Use RGB for pipeline png = _run_pipeline(cropped_pil.convert("RGB"), prompt) - + ts = time.strftime("%Y%m%d_%H%M%S") out_name = f"{ts}_{i}_{filename}" if not out_name.lower().endswith(".png"): out_name += ".png" out_path = os.path.join(output_dir, out_name) - + with open(out_path, "wb") as f: f.write(png) - - # Register output in DB + out_embedding = embeddings.generate_embedding(out_path) - database.upsert_person(out_name, filepath=out_path, name=auto_name, clip_description=clip_desc, embedding=out_embedding, group_id=group_id) + next_order = database.get_next_sort_order(group_id) + database.upsert_person( + out_name, filepath=out_path, name=auto_name, + clip_description=clip_desc, embedding=out_embedding, + group_id=group_id, sort_order=next_order, + ) except Exception as e: print(f"Error processing prompt '{prompt}' for {filename}: {e}") @@ -1033,6 +1088,27 @@ def set_image_preferred(filename: str): return {"filename": filename, "group_id": group_id} +@app.post("/images/{filename}/undress") +def undress_image(filename: str, background_tasks: BackgroundTasks): + """Queue a generation using the undress prompt on the given image.""" + output_dir = _load_output_dir() + fpath = os.path.join(output_dir, filename) + if not os.path.exists(fpath): + raise HTTPException(404, "Image not found") + person = database.get_person(filename) + group_id = person[1] if person and person[1] else naming.get_base_name(filename) + job_id = uuid.uuid4().hex[:8] + jobs[job_id] = {"status": "queued", "done": 0, "failed": 0, "total": 1} + threading.Thread( + target=_batch_worker, + args=(job_id, [filename], [UNDRESS_PROMPT], [None], + random.randint(0, MAX_SEED), MAX_AREA), + kwargs={"group_id": group_id}, + daemon=True, + ).start() + return {"job_id": job_id, "filename": filename} + + @app.delete("/images/{filename}") def delete_image(filename: str): person = database.get_person(filename) diff --git a/tour-comfy/naming.py b/tour-comfy/naming.py index 0a3c48b..66bc2e0 100644 --- a/tour-comfy/naming.py +++ b/tour-comfy/naming.py @@ -1,10 +1,131 @@ import random import re +_NAMES_USA = [ + "Aiko", "Alara", "Amara", "Amira", "Andromeda", "Aoife", "Ara", "Aria", + "Ariel", "Arya", "Asel", "Ashira", "Astrid", "Aurora", "Aya", "Ayame", + "Bree", "Briar", "Calla", "Calypso", "Celeste", "Clio", "Cora", "Dalia", + "Dawn", "Daya", "Delia", "Deva", "Eila", "Eira", "Elara", "Elene", + "Elin", "Elira", "Ember", "Era", "Eris", "Estelle", "Eve", "Faye", + "Fern", "Fiora", "Fleur", "Flora", "Gaia", "Greer", "Gwen", "Halo", + "Haven", "Hera", "Ida", "Indra", "Io", "Iris", "Iva", "Jade", + "Jaya", "Juno", "Kai", "Kaia", "Kaya", "Kessa", "Kira", "Laia", + "Leda", "Lila", "Lira", "Lirien", "Luma", "Luna", "Lyra", "Maia", + "Mara", "Marit", "Maya", "Meira", "Mira", "Miya", "Nadia", "Naia", + "Nara", "Neva", "Nia", "Nike", "Nina", "Noor", "Nora", "Nova", + "Nyx", "Ora", "Orla", "Petra", "Quinn", "Ren", "Rhea", "Riona", + "Rue", "Saga", "Sage", "Sarai", "Selene", "Sera", "Silva", "Sol", + "Sora", "Sylva", "Tala", "Tara", "Theia", "Tova", "Ula", "Uma", + "Una", "Vega", "Vela", "Vera", "Vesper", "Vira", "Vivi", "Wren", + "Xara", "Xena", "Yael", "Yuki", "Zara", "Zita", "Zoe", "Zora", +] + +_NAMES = [ + "Aaf", "Aafje", "Aafke", "Aagje", "Aaltje", "Abby", "Abigail", "Ada", + "Adèle", "Adriana", "Agnes", "Aisha", "Ayla", "Alana", "Aletta", "Alexandra", + "Alice", "Alicia", "Alida", "Alina", "Alise", "Aliza", "Alma", "Amalia", + "Amanda", "Amber", "Amelie", "Amélie", "Amira", "Amy", "An", "Ana", + "Anabel", "Anastasia", "Andrea", "Angela", "Angelina", "Aniek", "Anika", + "Anissa", "Anja", "Anke", "Anna", "Annabel", "Anne", "Annebel", + "Annemarie", "Annet", "Annette", "Annie", "Anouk", "Ans", "Antje", + "Antoinette", "Ariane", "Arianna", "Ariana", "Arwen", "Ashley", "Astrid", + "Aukje", "Aurora", "Avalon", "Aya", + + "Babette", "Barbara", "Bea", "Beatrix", "Beau", "Bente", "Berber", + "Bernadette", "Bertje", "Betsy", "Bianca", "Bibi", "Bodil", "Bo", + "Bobbi", "Bregje", "Brechtje", "Brenda", "Brit", "Britt", + + "Cato", "Catharina", "Celine", "Céline", "Cemre", "Chantal", "Charlotte", + "Chelsey", "Chiara", "Chloë", "Christa", "Christel", "Christina", "Cindy", + "Claire", "Clara", "Clarissa", "Claudia", "Cleo", "Coby", "Conny", "Cora", + "Cornelia", "Cynthia", + + "Daantje", "Dafne", "Daisy", "Dana", "Daniëlle", "Daphne", "Debbie", + "Demi", "Denise", "Desi", "Diana", "Dide", "Diede", "Dieuwertje", "Dina", + "Dinja", "Dionne", "Do", "Dominique", "Doortje", "Dora", "Doris", "Doutzen", + + "Eef", "Eefje", "Eeke", "Eline", "Elisa", "Elise", "Elisabeth", "Ella", + "Elle", "Ellen", "Ellemijn", "Ellis", "Els", "Elsa", "Else", "Elvira", + "Emilia", "Emma", "Emmy", "Eva", "Evelien", "Eveline", "Evi", + + "Fabiënne", "Famke", "Fay", "Faye", "Fem", "Femke", "Fenna", "Fenne", + "Fien", "Fiene", "Fieke", "Fleur", "Fleurtje", "Floor", "Floortje", + "Flore", "Florianne", "Froukje", + + "Gabriëlle", "Gea", "Geertje", "Geertruida", "Geke", "Gerda", "Gerdi", + "Gerdien", "Gertrude", "Ghislaine", "Gina", "Gitte", "Greet", "Greetje", + "Greta", "Grietje", "Guusje", "Gwen", + + "Hanna", "Hannah", "Hanne", "Hanneke", "Hannelore", "Harriët", "Hedwig", + "Heleen", "Helena", "Helene", "Henriëtte", "Hester", "Hilde", "Hinke", + + "Ilona", "Ilse", "Imke", "Imme", "Ina", "Indy", "Ineke", "Ines", "Inge", + "Ingrid", "Iris", "Isa", "Isabel", "Isabella", "Isabelle", "Ise", "Iva", + "Ivana", + + "Jacoba", "Jacqueline", "Jada", "Jade", "Janna", "Janne", "Janneke", + "Jantien", "Jasmijn", "Jasmine", "Jayda", "Jelka", "Jelke", "Jente", + "Jenthe", "Jet", "Jette", "Jill", "Jo", "Joan", "Joanna", "Johanna", + "Jolanda", "Jolie", "Josephine", "Josje", "Judith", "Julia", "Julie", + "Juliette", "Juna", "Juni", "Juul", "Juut", + + "Kaat", "Kaatje", "Karen", "Karin", "Karlijn", "Kiki", "Kim", "Kirsten", + "Klara", "Klasina", "Kris", "Kristel", + + "Lana", "Lara", "Laura", "Laurien", "Lena", "Lene", "Leni", "Lenie", + "Lenthe", "Lieke", "Lien", "Lieve", "Linde", "Lindsey", "Lisa", "Lisanne", + "Liset", "Liselotte", "Livia", "Liz", "Liza", "Lizzy", "Loïs", "Lola", + "Lonneke", "Lotte", "Lou", "Louise", "Lova", "Luca", "Lucia", "Lucie", + "Luna", + + "Maaike", "Maan", "Maartje", "Maayke", "Madeleine", "Madelief", "Maike", + "Maja", "Malou", "Manon", "Mara", "Mare", "Margot", "Margriet", "Maria", + "Marieke", "Marije", "Marijne", "Marit", "Marja", "Marjan", "Marjolein", + "Marleen", "Marloes", "Marlot", "Marly", "Martha", "Marthe", "Mathilde", + "Maud", "Mees", "Meike", "Melanie", "Melissa", "Merel", "Mette", "Mia", + "Mieke", "Mila", "Milou", "Minke", "Mira", "Mirjam", "Myrthe", + + "Naomi", "Natasja", "Nathalie", "Nena", "Nienke", "Nina", "Noa", "Noëlle", + "Noor", "Nora", "Nova", + + "Olivia", "Olga", + + "Pien", "Pleun", + + "Quinty", + + "Renske", "Renée", "Rianne", "Riek", "Rika", "Rina", "Rinske", "Rivka", + "Robin", "Romy", "Roos", "Roosmarijn", "Rosa", "Rosalie", "Rosanne", + "Rose", "Rowena", "Ruby", + + "Sabine", "Sanne", "Sara", "Sarah", "Sarina", "Saskia", "Selma", "Senna", + "Sera", "Sharon", "Silke", "Sjoukje", "Sofie", "Sophie", "Soraya", + "Sterre", "Susan", "Susanne", "Suzan", "Suzanne", "Suze", "Sylvia", + + "Tamar", "Tara", "Tess", "Tessa", "Teuntje", "Thea", "Theodora", "Thera", + "Theresa", "Thirza", "Tine", "Tineke", "Tirza", "Tjitske", "Toos", + "Trijntje", "Truus", + + "Valerie", "Veerle", "Vera", "Vera-Lynn", "Veronique", "Victoria", "Vienna", + "Vieve", "Vita", "Vivian", "Vivienne", + + "Wende", "Wendy", "Wiep", "Wietske", "Wies", "Wiesje", "Willeke", "Wilma", + + "Yara", "Yfke", "Ymkje", "Yolanda", "Yuna", + + "Zara", "Zoë", "Zofia", "Zonne", "Zwaantje", +] + +def generate_associative_name(tags=None): + """Return a random evocative name for a new group.""" + return random.choice(_NAMES) + + def clean_tag(tag): return tag.replace("_", " ").strip() -def generate_associative_name(tags): + +def generate_associative_description(tags): """ Generate a 'real-alike' associative name based on WD tagger tags. tags: list of dicts {'tag': str, 'score': float, 'cat': int} @@ -44,7 +165,7 @@ def generate_associative_name(tags): colors = ["red", "blue", "green", "white", "black", "gold", "silver", "pink", "purple", "yellow"] found_color = next((clean_tag(t['tag']) for t in high_score_tags if clean_tag(t['tag']).split()[0] in colors), None) if not found_color: - found_color = next((clean_tag(t['tag']) for t in high_score_tags if any(c in t['tag'] for c in colors)), None) + found_color = next((clean_tag(t['tag']) for t in high_score_tags if any(c in t['tag'] for c in colors)), None) # Styles/Atmosphere styles = ["cyberpunk", "fantasy", "realistic", "ethereal", "dark", "bright", "sketch", "oil painting"] @@ -52,10 +173,10 @@ def generate_associative_name(tags): # Build the name templates = [] - + if found_style and subject: templates.append(f"{found_style.title()} {subject}") - + if found_color and subject: templates.append(f"The {found_color.title()} {subject}") @@ -89,8 +210,6 @@ def generate_associative_name(tags): # Return a random template result return random.choice(templates) - def get_base_name(name: str) -> str: """Remove timestamp prefixes from filename.""" - # Matches YYYYMMDD_HHMMSS_ return re.sub(r'^(\d{8}_\d{6}_)+', '', name) diff --git a/tour-comfy/old_car.html b/tour-comfy/old_car.html new file mode 100644 index 0000000..5c4d7a8 --- /dev/null +++ b/tour-comfy/old_car.html @@ -0,0 +1,2219 @@ + + + + + + Live Image Monitor + + + +
+
🔒
+
Privacy mode — click to unlock
+
+ +
+

+ + + + + + Live Image Monitor +

+
+ + +
+
+ 0 images + + + + + +
+
+ + Auto-refresh: 2m +
+
+ + +
+
+ + + +
+ + + +
+
+ 0 selected +
+ + +
+ + + + + + + + +
+ +
+
+
Select reference image
+
+
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/tour-comfy/poses.md b/tour-comfy/poses.md index 14638f2..b316976 100644 --- a/tour-comfy/poses.md +++ b/tour-comfy/poses.md @@ -1,3 +1,39 @@ +# Upscale HQ +high quality. detailed. +realistic + +# BG Remove +realistic, transparent background + +# Feminine +1 female nude. +Hyper realistic. + + +# Upscale HQ Feminine +high quality. +detailed. +female nude +realistic. + +# Three-quarter +Head-on a full-body three-quarter full-nude-body female portrait, realistic, transparent background + +# Head-on undress +Head-on straight-on full-nude-body female portrait, realistic, transparent background + +# Head-on straight-on +Head-on straight-on full-body female portrait, realistic, no background + +# Looking viewer +high quality, full-nude-body, female, masterpiece, realistic, photo, looking at viewer + +# Light +high quality, full-nude-body, female, masterpiece, realistic, photo, detailed skin, professional lighting, transparent background + +# Drastic Light +high quality, full-nude-body, female, masterpiece, realistic, photo, cinematic lighting, dramatic shadows, sharp focus, transparent background + # The Bride: Lying flat on her back, bending one leg and bringing it up to the chest, the other leg stretched out. Place one arm under your head, and the other arm stretched out to the side. @@ -233,7 +269,7 @@ hands at the thighs, fingers hooking into the top of thigh-high stockings or gar torso leaning forward slightly, shoulders rolled back, chest presented. head tilted, lips parted. Looking directly into camera. Teasing, anticipatory. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Unclasp: standing, back partially turned toward camera over one shoulder. @@ -241,7 +277,7 @@ arms reaching behind, hands at the back working to unhook a bra clasp. elbows drawn inward, shoulder blades prominent. hips cocked to one side, weight on one leg. Looking back over the shoulder into camera. Inviting, conspiratorial. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Strap Slide: standing, one strap of a slip or camisole slid off the shoulder. @@ -249,7 +285,7 @@ arm relaxed at the side, letting the fabric hang loose on one side. opposite hand touching the collarbone or trailing down the sternum. hip popped, body in a subtle S-curve. Looking directly into camera. Seductive, slow. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Lace Pull: lying on back, knees bent, feet flat on the ground. @@ -257,7 +293,7 @@ hands at the hips, fingers hooked into the waistband of lace panties. hips lifted slightly off the ground, fabric being pulled downward. thighs parted slightly, tension in the abdomen. Looking directly into camera. Vulnerable, exposed. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Corset Lace: standing, back to camera, head turned to look over shoulder. @@ -265,15 +301,15 @@ arms reaching behind to pull the laces of a corset tighter. elbows wide, shoulder blades drawn together, waist cinched narrow. legs straight, feet apart for balance. Looking back into camera. Restricted, breathless. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic -# The Garter Roll: +# The Garter Roll (beta): lying on stomach, propped on elbows. legs bent at the knees, feet kicked up and crossed in the air. hands reaching back to roll a stocking up the calf or thigh. back arched, hips slightly lifted, fabric of lingerie riding up. Looking back over the shoulder into camera. Playful, coquettish. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Hook: standing facing camera, one leg crossed over the other at the ankle. @@ -281,7 +317,7 @@ both hands at the center of the chest, fingers working the hook-and-eye closure head tilted down, eyes looking up through lashes. shoulders rounded forward, creating a valley of shadow at the cleavage. Looking up into camera. Coy, demure. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Thigh Band: seated with legs extended forward, torso reclined back on hands. @@ -289,7 +325,7 @@ one knee bent, foot flat on the ground, thigh open. opposite hand resting on the inner thigh, fingers tracing the edge of a garter band or stocking top. head thrown back slightly, neck exposed. Looking directly into camera. Languid, indulgent. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, hyper realistic # The Mirror Check: standing in three-quarter profile, one hand on the hip. @@ -297,7 +333,7 @@ other hand smoothing the fabric of a sheer chemise or babydoll down the side of weight on the back leg, front leg slightly bent, toe pointed. chin lifted, checking the fit in an implied mirror. Looking to the side, eyes catching the camera in reflection. Self-aware, assessing. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, hyper realistic # The Snap: standing, legs apart, hands at the crotch of a bodysuit or teddy. @@ -305,7 +341,7 @@ fingers working the snap closures at the gusset. torso twisted slightly, one shoulder dropped lower than the other. lips pursed in concentration, then softening into a smile. Looking directly into camera. Direct, unapologetic. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, hyper realistic # The Shoulder Drop: standing, back to camera. @@ -314,7 +350,7 @@ arms hanging loose, fabric pooling at the elbows. head turned to look back over one shoulder. hips swayed to one side, creating a diagonal line from shoulder to hip. Looking back into camera. Revealing, inevitable. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Step-In: standing on one leg, opposite leg lifted, foot stepping into the leg opening of panties or a bodysuit. @@ -322,7 +358,7 @@ hands holding the garment open at thigh level. torso leaning slightly to balance, one arm extended for stability. head down, watching the fabric glide up the leg. Looking down, then up into camera with a half-smile. Intimate, domestic. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Pearl Strand: lying on back, knees bent and parted, feet flat on the ground. @@ -330,15 +366,15 @@ hands at the neck, fingers working to fasten a pearl necklace or choker. elbows wide, chest lifted, collarbones prominent. head tilted back, throat elongated. Looking directly into camera. Elegant, adorned. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic -# The Glove Tug: +# The Glove Tug (beta): seated on the floor, legs tucked to one side. one arm extended, fingers of the opposite hand slowly pulling a long satin or lace glove up the forearm. head turned to watch the motion, lips slightly parted. shoulders relaxed, back curved in a gentle C-shape. Looking at the glove, then into camera. Methodical, sensual. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Ribbon Tie: standing, legs apart, hands behind the back at the waist. @@ -346,7 +382,7 @@ fingers working to tie a satin ribbon or bow at the small of the back. torso twisted to expose the side, ribs visible with the stretch. head turned over the shoulder, chin lifted. Looking back into camera. Decorative, bound. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Hem Lift: standing, legs crossed at the ankles. @@ -354,7 +390,7 @@ both hands at the sides of a short slip or nightgown, fingers pinching the hem. fabric lifted slowly, revealing the upper thighs. weight shifted to one hip, creating a diagonal line. Looking directly into camera, chin down, eyes up. Provocative, measured. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Clasp Front: lying on side, propped on one elbow. @@ -362,7 +398,7 @@ free hand at the center of the chest, working the front clasp of a bra. fingers pinching the metal closure, about to release it. top leg bent and drawn forward, knee resting on the ground. Looking directly into camera. Anticipatory, breath held. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Sash Untie: standing, one hand on the hip. @@ -370,7 +406,7 @@ other hand pulling the end of a silk sash or robe tie. hips cocked, weight on the back leg. fabric beginning to part at the waist, hinting at what lies beneath. Looking directly into camera. Unwrapping, revelatory. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Zipper Pull: standing in profile, one shoulder dropped toward camera. @@ -378,7 +414,7 @@ arm reaching behind the back, fingers finding the pull of a side or back zipper. head turned to look back, neck stretched. zipper descending slowly, fabric parting along the spine or side. Looking back into camera. Mechanical, inevitable. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Stocking Peel: seated, one leg extended, the other bent with foot flat on the ground. @@ -386,7 +422,7 @@ hands at the ankle of the extended leg, slowly peeling a stocking downward. toe pointed, arch of the foot visible as the fabric reveals skin. torso leaning forward, hair falling over one shoulder. Looking at the leg, then into camera. Unveiling, deliberate. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Halter Knot: standing, back to camera, arms raised overhead. @@ -394,7 +430,7 @@ hands at the nape of the neck, tying or untying the knot of a halter top. elbows wide, shoulder blades drawn together, back muscles defined. spine straight, hips narrow. Looking back over the shoulder into camera. Taut, suspended. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Garter Snap: lying on back, one knee bent, foot flat, the other leg extended. @@ -402,7 +438,7 @@ hand at the inner thigh, fingers snapping the clasp of a garter to a stocking. hips slightly rotated to expose the attachment point. head turned to the side, watching the action. Looking at the hand, then into camera. Precise, functional. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Drape: standing, one hand holding a sheer robe or kimono open at the chest. @@ -410,7 +446,7 @@ other arm hanging loose at the side. shoulders back, one hip popped, fabric cascading down the body. head tilted, hair falling over one eye. Looking directly into camera. Framed, theatrical. -Perfect anatomy, realistic, trying on erotic lingerie +Perfect anatomy, realistic # The Fold: seated on the floor, legs spread wide in a straddle. @@ -536,14 +572,14 @@ weight distributed evenly between hands and feet. Looking backward, upside down, into camera. Inverted, expansive. Perfect anatomy, realistic -# The Spiral: +# The Spiral (beta): standing, feet apart. torso twisted deeply, one shoulder forward, the other back. arms extended to the sides, following the twist of the torso. head turned to look over the forward shoulder. hips squared, lower body stable, upper body rotated. -Looking back over the shoulder into camera. Wound, coiled. -Perfect anatomy, realistic +Looking back over the shoulder into camera. +Perfect anatomy, natural, realistic # The Ballerina: standing on the toes of one foot, opposite leg extended straight back, lifted high. @@ -570,7 +606,7 @@ torso leaning slightly toward the extended leg. Looking directly into camera. Poised, watchful. Perfect anatomy, realistic -# The Bow: +# The Bow (beta): lying on stomach, knees bent, feet lifted toward the head. arms reaching back to grasp the ankles or feet. chest and thighs lifted off the ground, body forming a taut bow. @@ -587,7 +623,7 @@ body forming a wide, open V-shape. Looking directly into camera. Open, radiant. Perfect anatomy, realistic -# The Sickle: +# The Sickle (beta): lying on back, legs lifted and bent. knees drawing toward the chest, then extending and lowering toward the head. feet arched, toes pointing toward the ground behind the head. @@ -614,21 +650,21 @@ other arm wrapping around the back or reaching overhead. Looking down, then into camera. Directed, focused. Perfect anatomy, realistic -# The Vessel: +# The Vessel (beta): lying on back, knees bent, feet flat on the ground. -arms extended overhead, hands clasped or holding the knees. +arms extended overhead, hands clasped. hips lifted slightly, lower back arched. chest open, throat exposed. body forming a shallow bowl or vessel shape. Looking directly into camera. Receptive, open. Perfect anatomy, realistic -# The Quiver: +# The Quiver (beta): lying on stomach, legs together, arms at the sides. torso lifted in a backbend, chest and shoulders arching upward. head thrown back, neck stretched. legs remain on the ground, feet pointed. -body forming a gentle, upward curve from hips. +body forming a gentle, upward curve from hips to head. Looking upward, not at camera. Trembling, stretched. Perfect anatomy, realistic diff --git a/tour-comfy/processed.json b/tour-comfy/processed.json index 2e0a96c..4bce1c7 100644 --- a/tour-comfy/processed.json +++ b/tour-comfy/processed.json @@ -1,115 +1,106 @@ { - "img_2.png": "2a721fdedc31f4ee11fd7c8ab85a4b33", - "img_19.png": "82660461b10e0545165fe8dade87d4d2", - "img.png": "6023644b2237fe301e43431e28a9d2e9", - "img_4.png": "3c87ca4219c2ed6f275c044fa888afc0", - "img_3.png": "3c87ca4219c2ed6f275c044fa888afc0", - "img_5.png": "3c87ca4219c2ed6f275c044fa888afc0", - "imgxx.png": "861b244b0aa205b8fdff4015a128a5a4", - "img_1.png": "4c09437df56a8beb2a620f420a4d4d5a", - "img_6.png": "7ad3913d8fea47ea120a8e958dd2fc62", - "img_7.png": "2ad545906c6b99cac1a78305a37a5eed", - "img_8.png": "4c453e8e332e92478bf0d49e663dedc9", - "img_9.png": "7e35f295100f51a9a58533c8d1f1fc80", - "test_timestamp.png": "d41b2ed22d4562d6aa0b7dd2248f18a2", - "img_91.png": "7e35f295100f51a9a58533c8d1f1fc80", - "test.png": "e569b50c015080e05e36f21307550e1a", - "img_19_2.png": "e745ea158afbf416df6c53835c11f4c7", - "img_93.png": "ab83477ac7782d7a7b38369ccfa7df80", - "img_92.png": "7e35f295100f51a9a58533c8d1f1fc80", - "imgxxx.png": "8965337a6abd7bfec6cb774978b4198b", - "img_10.png": "10635b82a1cfcefb2c97af2ebd61d889", - "img_12.png": "3b126df55d41bb48829650a766e3c6f3", - "img_11.png": "c5e036773ead71f40a1f1966f74abc2b", - "other.jpeg": "b89b5886901ba89c5d3fcd97430904e8", - "others.jpeg": "b89b5886901ba89c5d3fcd97430904e8", - "img_6v1.png": "7ad3913d8fea47ea120a8e958dd2fc62", - "image.png": "7ad3913d8fea47ea120a8e958dd2fc62", - "test123.jpeg": "b89b5886901ba89c5d3fcd97430904e8", - "img_13.png": "5fb9fc29ca1d32c4ab6816160fcfdfe1", - "img_14.png": "759b2e7532f7bf3a0d956a7f1c4cb7af", - "img_15.png": "cbd90cb2e2edf2e4eff746c586657ad5", - "img_16.png": "9c76b232aacf1f18739b323f5b6887d7", - "img_17.png": "9955e08008340d6b2acd945cc4d9505a", - "img_18.png": "5a50839c5d5a726b5b0e770bb266f6d6", - "img_20.png": "29d28ef9f53d71c066798c46341d30a9", - "img_run.png": "72ddfe64a1cea5611ea61425f4f61fd2", - "img_21.png": "82660461b10e0545165fe8dade87d4d2", - "img_22.png": "4c9adb619b5f191d9b76d1493df211c6", - "img_23.png": "2ab193e0c19cec124764f9f54383ef2d", - "img_24.png": "942d5409a0e4c70b4f960bc6468269e2", - "imgxxxx.png": "8965337a6abd7bfec6cb774978b4198b", - "img_25.png": "1d51cc605017423c0ae114f0b883bfea", - "img_26.png": "23ef7f416f21ca3d5d237ecfdc88833e", - "img_27.png": "9bb13a4ca7292c964fedd91065af64a0", - "img_28.png": "37a7ac25c45ec63a87e04c9fe3b73aab", - "img_29.png": "5ed1e8acd413beb7165da9880d6b052d", - "img_30.png": "d907cf83d022af0545b55842f2573581", - "img_31.png": "312874252c58cbb89c8cad46bc17e7e7", "img_32.png": "4d5ca98a255d51d5775725136f13a162", - "img_34.png": "c5f814c539acc7cdef0da3279544e55f", - "img_33.png": "c5f814c539acc7cdef0da3279544e55f", - "img_37.png": "fefa5a1bb755fb0d4f03d966ac04dae3", - "img_35.png": "ed1e95446696a97f46d84b246d01e0f7", - "img_36.png": "ed1e95446696a97f46d84b246d01e0f7", - "img_38.png": "dad813a6e3e919454ba1ff0fb3f8df22", - "img_39.png": "732cda29c3f658a9847239d23cbe759b", - "img_40.png": "6022fd6b8a4580ef4451c3c87e469b85", - "img_42.png": "a4578fb780c2424581d72c862e14af6c", - "img_41.png": "8871248c6da117c9b4318bcc6942c17a", - "img_45.png": "2329402c6d8c5b7555a7432eb1aeccd9", - "img_43.png": "e1d75f3326dd89c39fa91b9aaa0b54f9", - "img_44.png": "6196e5ba2bb6fb46459c44543e0eeb64", - "img_46.png": "3c73192c04ca22cc4ecb450565315798", - "img_47.png": "2fb600fb8f3717bd79a9f56fa32efb0b", - "20150913_211324.jpg": "bb75b92835207e81287a392f17f88eaf", - "20160903_200935.jpg": "1cf5a582c8a40610640898ebaee2ade3", - "20160903_200728.jpg": "7c93ad8f71045b07aeb390e0c906d5f2", - "img_49.png": "bd72afa8e00ffff04dc8e860af058d0d", - "img_48.png": "b6daebc286bc1c22a586ee1233c5b420", - "img_50.png": "6f8b764e0973cb5c34b0c02f79b202ca", - "img_51.png": "851612780583d06942c119b2c99b7b06", - "img_52.png": "935946efb74fc333f41146691a61cc8f", - "img_57.png": "514f89464e3c79bba7928b69ed01650e", - "img_53.png": "ce7e90270592666da95b0c638d10d745", - "img_58.png": "4fae0cf0017c9be9a550792167d60ce3", - "img_54.png": "0d70e4782c2823f2f8d2b4c149a38e0b", - "img_55.png": "ce7e90270592666da95b0c638d10d745", - "img_56.png": "1501a3128f19392124e727121a8f2bd4", - "img_59.png": "4fae0cf0017c9be9a550792167d60ce3", - "img_60.png": "2c31cb016cad120daaf4e441a720a56c", - "img_61.png": "68b1c7a9596ab2f0ff038bb585d7c4d4", - "img_62.png": "c2c444a31001421a69dbc9ecf8588149", - "img_64.png": "d5b235b57e6ec07e790f35b9cda399fb", - "img_63.png": "b454d1869a8fc62ed1dc988467b541db", - "img_66.png": "59e227fc6b06a2cd27659a9facf43c0d", - "img_65.png": "c442724f5a29468eed4e9563e25e06e8", - "img_68.png": "4c7fbe72509ab5b08ccdab726b5ff035", - "img_67.png": "1970b9952e14688c22f8f54ea7d7b4ec", - "img_69.png": "0bcf667d5603a157159052baddbb6e50", - "img_70.png": "0bcf667d5603a157159052baddbb6e50", - "img_71.png": "b3e79f4ff2882360b24f77a295f16650", - "img_72.png": "ebd8cd52977b7fccc6ecff7ee2f392b5", - "img_73.png": "28c91d6bc883ed6de89b62755d5417b9", - "img_74.png": "b7c41d0f4c062cc7d7da240173a1f075", - "img_75.png": "7b405fc4a4e022a272e5f09c7c485712", - "img_76.png": "29b9c219a777155d576b9f35a3f41cca", - "img_77.png": "6db31602d0ed36abc2d92a88fdcc21b0", + "img_24.png": "942d5409a0e4c70b4f960bc6468269e2", "img_78.png": "15e83866d2f2afb2ee1e8d2a06a70b9d", + "img_44.png": "6196e5ba2bb6fb46459c44543e0eeb64", + "img_41.png": "8871248c6da117c9b4318bcc6942c17a", + "img_55.png": "ce7e90270592666da95b0c638d10d745", + "img_23.png": "2ab193e0c19cec124764f9f54383ef2d", + "img_53.png": "ce7e90270592666da95b0c638d10d745", + "img_56.png": "1501a3128f19392124e727121a8f2bd4", + "img_30.png": "d907cf83d022af0545b55842f2573581", + "img_58.png": "4fae0cf0017c9be9a550792167d60ce3", "img_79.png": "ab18eb4ce243db0f81f608d744596885", + "imgxx.png": "861b244b0aa205b8fdff4015a128a5a4", "img_80.png": "de8dfcb0d6eeda8187783e8417f04b8b", - "img_81.png": "072948a36c4ba79f4e761a9491f3d8eb", - "img_82.png": "724fcb641da5f3294aa800ce0a9b93e4", - "img_84.png": "f5dea766c46abfa4011c23d3c466d8dc", - "img_85.png": "f48059d59efd33ec8cce4daa44bbd46d", - "img_83.png": "501207e02d72776b65d705db9f28a179", - "img_86.png": "9e831c994a69ee1e18a6d279d69c072f", - "img_87.png": "4ce165b53df962d9e371124bfdec64bd", + "img_21.png": "82660461b10e0545165fe8dade87d4d2", + "img_72.png": "ebd8cd52977b7fccc6ecff7ee2f392b5", + "img_28.png": "37a7ac25c45ec63a87e04c9fe3b73aab", + "img_73.png": "28c91d6bc883ed6de89b62755d5417b9", "img_88.png": "7a22effc45850ecd53670827e0608e97", - "20260618_045234_test_clipboard.png": "9cd53a2f405bebbac4a21dded0f12e34", - "20260618_045450_test_clipboard.png": "9cd53a2f405bebbac4a21dded0f12e34", - "20260618_045549_test_clipboard.png": "9cd53a2f405bebbac4a21dded0f12e34", - "20260618_050846_img_4.png": "b18d89c79c74df97f1a7f106ece9d946", - "20260618_051435_test_group.png": "bb550daac9e09ead5487e984b18d4b13", - "20260618_051426_test_group.png": "bb550daac9e09ead5487e984b18d4b13" + "img_16.png": "9c76b232aacf1f18739b323f5b6887d7", + "img_63.png": "b454d1869a8fc62ed1dc988467b541db", + "img_3.png": "3c87ca4219c2ed6f275c044fa888afc0", + "img_18.png": "5a50839c5d5a726b5b0e770bb266f6d6", + "img_22.png": "4c9adb619b5f191d9b76d1493df211c6", + "img_77.png": "6db31602d0ed36abc2d92a88fdcc21b0", + "image.png": "7ad3913d8fea47ea120a8e958dd2fc62", + "img_71.png": "b3e79f4ff2882360b24f77a295f16650", + "20150913_211324.jpg": "bb75b92835207e81287a392f17f88eaf", + "img_52.png": "935946efb74fc333f41146691a61cc8f", + "img_54.png": "0d70e4782c2823f2f8d2b4c149a38e0b", + "img_2.png": "2a721fdedc31f4ee11fd7c8ab85a4b33", + "img_6.png": "7ad3913d8fea47ea120a8e958dd2fc62", + "imgxxxx.png": "8965337a6abd7bfec6cb774978b4198b", + "img_48.png": "b6daebc286bc1c22a586ee1233c5b420", + "img_66.png": "59e227fc6b06a2cd27659a9facf43c0d", + "img_50.png": "6f8b764e0973cb5c34b0c02f79b202ca", + "20160903_200935.jpg": "1cf5a582c8a40610640898ebaee2ade3", + "img_62.png": "c2c444a31001421a69dbc9ecf8588149", + "img_82.png": "724fcb641da5f3294aa800ce0a9b93e4", + "img_57.png": "514f89464e3c79bba7928b69ed01650e", + "img_7.png": "2ad545906c6b99cac1a78305a37a5eed", + "img_67.png": "1970b9952e14688c22f8f54ea7d7b4ec", + "img_37.png": "fefa5a1bb755fb0d4f03d966ac04dae3", + "img_6v1.png": "7ad3913d8fea47ea120a8e958dd2fc62", + "img_26.png": "23ef7f416f21ca3d5d237ecfdc88833e", + "img_75.png": "7b405fc4a4e022a272e5f09c7c485712", + "img_64.png": "d5b235b57e6ec07e790f35b9cda399fb", + "img_31.png": "312874252c58cbb89c8cad46bc17e7e7", + "img_45.png": "2329402c6d8c5b7555a7432eb1aeccd9", + "img_68.png": "4c7fbe72509ab5b08ccdab726b5ff035", + "img_29.png": "5ed1e8acd413beb7165da9880d6b052d", + "img_1.png": "4c09437df56a8beb2a620f420a4d4d5a", + "img_39.png": "732cda29c3f658a9847239d23cbe759b", + "img_87.png": "4ce165b53df962d9e371124bfdec64bd", + "20160903_200728.jpg": "7c93ad8f71045b07aeb390e0c906d5f2", + "img_61.png": "68b1c7a9596ab2f0ff038bb585d7c4d4", + "img_12.png": "3b126df55d41bb48829650a766e3c6f3", + "img_85.png": "f48059d59efd33ec8cce4daa44bbd46d", + "img_69.png": "0bcf667d5603a157159052baddbb6e50", + "img_8.png": "4c453e8e332e92478bf0d49e663dedc9", + "img_92.png": "7e35f295100f51a9a58533c8d1f1fc80", + "img_35.png": "ed1e95446696a97f46d84b246d01e0f7", + "img_81.png": "072948a36c4ba79f4e761a9491f3d8eb", + "img_27.png": "9bb13a4ca7292c964fedd91065af64a0", + "img_33.png": "c5f814c539acc7cdef0da3279544e55f", + "img_47.png": "2fb600fb8f3717bd79a9f56fa32efb0b", + "img_5.png": "3c87ca4219c2ed6f275c044fa888afc0", + "img_46.png": "3c73192c04ca22cc4ecb450565315798", + "img_25.png": "1d51cc605017423c0ae114f0b883bfea", + "img_14.png": "759b2e7532f7bf3a0d956a7f1c4cb7af", + "img_93.png": "ab83477ac7782d7a7b38369ccfa7df80", + "img_10.png": "10635b82a1cfcefb2c97af2ebd61d889", + "img_13.png": "5fb9fc29ca1d32c4ab6816160fcfdfe1", + "img_65.png": "c442724f5a29468eed4e9563e25e06e8", + "img_36.png": "ed1e95446696a97f46d84b246d01e0f7", + "img_19.png": "82660461b10e0545165fe8dade87d4d2", + "img_51.png": "851612780583d06942c119b2c99b7b06", + "img_38.png": "dad813a6e3e919454ba1ff0fb3f8df22", + "img_20.png": "29d28ef9f53d71c066798c46341d30a9", + "img_34.png": "c5f814c539acc7cdef0da3279544e55f", + "img_19_2.png": "e745ea158afbf416df6c53835c11f4c7", + "img_91.png": "7e35f295100f51a9a58533c8d1f1fc80", + "test123.jpeg": "b89b5886901ba89c5d3fcd97430904e8", + "img_49.png": "bd72afa8e00ffff04dc8e860af058d0d", + "test.png": "e569b50c015080e05e36f21307550e1a", + "img_40.png": "6022fd6b8a4580ef4451c3c87e469b85", + "img_83.png": "501207e02d72776b65d705db9f28a179", + "img_70.png": "0bcf667d5603a157159052baddbb6e50", + "img_15.png": "cbd90cb2e2edf2e4eff746c586657ad5", + "imgxxx.png": "8965337a6abd7bfec6cb774978b4198b", + "img_86.png": "9e831c994a69ee1e18a6d279d69c072f", + "img_11.png": "c5e036773ead71f40a1f1966f74abc2b", + "img_4.png": "3c87ca4219c2ed6f275c044fa888afc0", + "img_9.png": "7e35f295100f51a9a58533c8d1f1fc80", + "img_76.png": "29b9c219a777155d576b9f35a3f41cca", + "img_run.png": "72ddfe64a1cea5611ea61425f4f61fd2", + "img_59.png": "4fae0cf0017c9be9a550792167d60ce3", + "img_74.png": "b7c41d0f4c062cc7d7da240173a1f075", + "img.png": "6023644b2237fe301e43431e28a9d2e9", + "img_17.png": "9955e08008340d6b2acd945cc4d9505a", + "img_60.png": "2c31cb016cad120daaf4e441a720a56c", + "img_84.png": "f5dea766c46abfa4011c23d3c466d8dc", + "img_43.png": "e1d75f3326dd89c39fa91b9aaa0b54f9", + "img_42.png": "a4578fb780c2424581d72c862e14af6c" } \ No newline at end of file diff --git a/tour-comfy/watcher.log b/tour-comfy/watcher.log index d3a4e3c..3f3a02e 100644 --- a/tour-comfy/watcher.log +++ b/tour-comfy/watcher.log @@ -1349,3 +1349,688 @@ SyntaxError: broken PNG file (chunk b'END\xae') 2026-06-18 22:31:18,891 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... 2026-06-18 22:31:18,891 - INFO - Output directory: /mnt/zim/tour-comfy/output 2026-06-18 22:31:18,891 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-18 23:40:49,290 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-18 23:40:49,290 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-18 23:40:49,291 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 01:12:51,333 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 01:12:51,333 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 01:12:51,333 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 01:27:41,007 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 01:27:41,007 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 01:27:41,007 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 02:51:36,835 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 02:51:36,835 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 02:51:36,835 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 04:31:56,640 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 04:31:56,640 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 04:31:56,640 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 04:33:26,942 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 04:33:26,942 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 04:33:26,942 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 04:54:47,346 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 04:54:47,346 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 04:54:47,346 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 12:39:49,176 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 12:39:49,176 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 12:39:49,176 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 19:39:35,852 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 19:39:35,854 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 19:39:35,854 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 19:53:51,980 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 19:53:51,983 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 19:53:51,983 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 19:56:28,725 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 19:56:28,725 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 19:56:28,725 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 19:57:23,120 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 19:57:23,120 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 19:57:23,120 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 22:29:55,648 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 22:29:55,648 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 22:29:55,648 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 22:29:56,648 - INFO - Starting processing for img_32.png... +2026-06-19 22:29:56,650 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_32.png to (13, 55, 129, 389) (margin=10, top_margin=20) +2026-06-19 22:29:56,650 - INFO - Adding 16px headroom to /mnt/zim/tour-comfy/stage/img_32.png +2026-06-19 22:29:56,656 - INFO - Calling API for img_32.png -> 20260619_222956_img_32.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:30:18,770 - INFO - Successfully processed img_32.png -> /mnt/zim/tour-comfy/output/20260619_222956_img_32.png +2026-06-19 22:30:18,793 - INFO - Parsing model identifier. Schema: None, Identifier: ViT-H-14 +2026-06-19 22:30:18,793 - INFO - Loaded built-in ViT-H-14 model config. +2026-06-19 22:30:18,970 - INFO - HTTP Request: HEAD https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_model.safetensors "HTTP/1.1 302 Found" +2026-06-19 22:30:18,972 - INFO - Instantiating model architecture: CLIP +2026-06-19 22:30:22,576 - INFO - Loading full pretrained weights from: /home/mike/.cache/huggingface/hub/models--laion--CLIP-ViT-H-14-laion2B-s32B-b79K/snapshots/1c2b8495b28150b8a4922ee1c8edee224c284c0c/open_clip_model.safetensors +2026-06-19 22:30:23,325 - INFO - Final image preprocessing configuration set: {'size': (224, 224), 'mode': 'RGB', 'mean': (0.48145466, 0.4578275, 0.40821073), 'std': (0.26862954, 0.26130258, 0.27577711), 'interpolation': 'bicubic', 'resize_mode': 'shortest', 'fill_color': 0} +2026-06-19 22:30:23,325 - INFO - Model ViT-H-14 creation process complete. +2026-06-19 22:30:29,949 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 747 images +2026-06-19 22:30:30,950 - INFO - Starting processing for img_24.png... +2026-06-19 22:30:30,950 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_24.png to (11, 42, 111, 304) (margin=10, top_margin=20) +2026-06-19 22:30:30,951 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_24.png +2026-06-19 22:30:30,952 - INFO - Calling API for img_24.png -> 20260619_223030_img_24.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:30:39,631 - INFO - Successfully processed img_24.png -> /mnt/zim/tour-comfy/output/20260619_223030_img_24.png +2026-06-19 22:30:39,791 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 748 images +2026-06-19 22:30:40,792 - INFO - Starting processing for img_78.png... +2026-06-19 22:30:40,796 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_78.png to (0, 0, 287, 574) (margin=10, top_margin=20) +2026-06-19 22:30:40,796 - INFO - Adding 28px headroom to /mnt/zim/tour-comfy/stage/img_78.png +2026-06-19 22:30:40,842 - INFO - Calling API for img_78.png -> 20260619_223040_img_78.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:30:49,999 - INFO - Successfully processed img_78.png -> /mnt/zim/tour-comfy/output/20260619_223040_img_78.png +2026-06-19 22:30:50,161 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 749 images +2026-06-19 22:30:51,162 - INFO - Starting processing for img_44.png... +2026-06-19 22:30:51,163 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_44.png to (32, 57, 220, 396) (margin=10, top_margin=20) +2026-06-19 22:30:51,163 - INFO - Adding 16px headroom to /mnt/zim/tour-comfy/stage/img_44.png +2026-06-19 22:30:51,167 - INFO - Calling API for img_44.png -> 20260619_223051_img_44.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:31:00,240 - INFO - Successfully processed img_44.png -> /mnt/zim/tour-comfy/output/20260619_223051_img_44.png +2026-06-19 22:31:00,392 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 750 images +2026-06-19 22:31:01,393 - INFO - Starting processing for img_41.png... +2026-06-19 22:31:01,395 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_41.png to (60, 88, 284, 554) (margin=10, top_margin=20) +2026-06-19 22:31:01,395 - INFO - Adding 23px headroom to /mnt/zim/tour-comfy/stage/img_41.png +2026-06-19 22:31:01,406 - INFO - Calling API for img_41.png -> 20260619_223101_img_41.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:31:10,485 - INFO - Successfully processed img_41.png -> /mnt/zim/tour-comfy/output/20260619_223101_img_41.png +2026-06-19 22:31:10,668 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 751 images +2026-06-19 22:31:11,669 - INFO - Starting processing for img_55.png... +2026-06-19 22:31:11,670 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_55.png to (14, 40, 114, 298) (margin=10, top_margin=20) +2026-06-19 22:31:11,670 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_55.png +2026-06-19 22:31:11,673 - INFO - Calling API for img_55.png -> 20260619_223111_img_55.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:31:24,846 - INFO - Successfully processed img_55.png -> /mnt/zim/tour-comfy/output/20260619_223111_img_55.png +2026-06-19 22:31:25,081 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 752 images +2026-06-19 22:31:26,083 - INFO - Starting processing for img_23.png... +2026-06-19 22:31:26,084 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_23.png to (23, 54, 174, 364) (margin=10, top_margin=20) +2026-06-19 22:31:26,084 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_23.png +2026-06-19 22:31:26,089 - INFO - Calling API for img_23.png -> 20260619_223126_img_23.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:31:39,670 - INFO - Successfully processed img_23.png -> /mnt/zim/tour-comfy/output/20260619_223126_img_23.png +2026-06-19 22:31:39,941 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 753 images +2026-06-19 22:31:40,941 - INFO - Starting processing for img_53.png... +2026-06-19 22:31:40,942 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_53.png to (14, 40, 114, 298) (margin=10, top_margin=20) +2026-06-19 22:31:40,942 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_53.png +2026-06-19 22:31:40,945 - INFO - Calling API for img_53.png -> 20260619_223140_img_53.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:31:54,022 - INFO - Successfully processed img_53.png -> /mnt/zim/tour-comfy/output/20260619_223140_img_53.png +2026-06-19 22:31:54,216 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 754 images +2026-06-19 22:31:55,216 - INFO - Starting processing for img_56.png... +2026-06-19 22:31:55,217 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_56.png to (20, 36, 154, 282) (margin=10, top_margin=20) +2026-06-19 22:31:55,217 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_56.png +2026-06-19 22:31:55,221 - INFO - Calling API for img_56.png -> 20260619_223155_img_56.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:04,813 - INFO - Successfully processed img_56.png -> /mnt/zim/tour-comfy/output/20260619_223155_img_56.png +2026-06-19 22:32:04,984 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 755 images +2026-06-19 22:32:05,985 - INFO - Starting processing for img_30.png... +2026-06-19 22:32:05,986 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_30.png to (29, 50, 181, 364) (margin=10, top_margin=20) +2026-06-19 22:32:05,986 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_30.png +2026-06-19 22:32:05,990 - INFO - Calling API for img_30.png -> 20260619_223205_img_30.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:17,621 - INFO - Successfully processed img_30.png -> /mnt/zim/tour-comfy/output/20260619_223205_img_30.png +2026-06-19 22:32:17,807 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 756 images +2026-06-19 22:32:18,808 - INFO - Starting processing for img_58.png... +2026-06-19 22:32:18,810 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_58.png to (0, 0, 179, 474) (margin=10, top_margin=20) +2026-06-19 22:32:18,810 - INFO - Adding 23px headroom to /mnt/zim/tour-comfy/stage/img_58.png +2026-06-19 22:32:18,825 - INFO - Calling API for img_58.png -> 20260619_223218_img_58.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:27,445 - INFO - Successfully processed img_58.png -> /mnt/zim/tour-comfy/output/20260619_223218_img_58.png +2026-06-19 22:32:27,632 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 757 images +2026-06-19 22:32:28,634 - INFO - Starting processing for img_79.png... +2026-06-19 22:32:28,635 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_79.png to (0, 0, 194, 415) (margin=10, top_margin=20) +2026-06-19 22:32:28,635 - INFO - Adding 20px headroom to /mnt/zim/tour-comfy/stage/img_79.png +2026-06-19 22:32:28,657 - INFO - Calling API for img_79.png -> 20260619_223228_img_79.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:37,787 - INFO - Successfully processed img_79.png -> /mnt/zim/tour-comfy/output/20260619_223228_img_79.png +2026-06-19 22:32:37,962 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 758 images +2026-06-19 22:32:38,963 - INFO - Starting processing for imgxx.png... +2026-06-19 22:32:38,963 - INFO - Cropping /mnt/zim/tour-comfy/stage/imgxx.png to (0, 0, 100, 149) (margin=10, top_margin=20) +2026-06-19 22:32:38,963 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/imgxx.png +2026-06-19 22:32:38,966 - INFO - Calling API for imgxx.png -> 20260619_223238_imgxx.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:48,265 - INFO - Successfully processed imgxx.png -> /mnt/zim/tour-comfy/output/20260619_223238_imgxx.png +2026-06-19 22:32:48,428 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 759 images +2026-06-19 22:32:49,429 - INFO - Starting processing for img_80.png... +2026-06-19 22:32:49,431 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_80.png to (0, 0, 211, 332) (margin=10, top_margin=20) +2026-06-19 22:32:49,431 - INFO - Adding 16px headroom to /mnt/zim/tour-comfy/stage/img_80.png +2026-06-19 22:32:49,451 - INFO - Calling API for img_80.png -> 20260619_223249_img_80.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:32:58,587 - INFO - Successfully processed img_80.png -> /mnt/zim/tour-comfy/output/20260619_223249_img_80.png +2026-06-19 22:32:58,743 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 760 images +2026-06-19 22:32:59,744 - INFO - Starting processing for img_21.png... +2026-06-19 22:32:59,745 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_21.png to (27, 57, 175, 375) (margin=10, top_margin=20) +2026-06-19 22:32:59,745 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_21.png +2026-06-19 22:32:59,749 - INFO - Calling API for img_21.png -> 20260619_223259_img_21.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:33:08,824 - INFO - Successfully processed img_21.png -> /mnt/zim/tour-comfy/output/20260619_223259_img_21.png +2026-06-19 22:33:08,977 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 761 images +2026-06-19 22:33:09,978 - INFO - Starting processing for img_72.png... +2026-06-19 22:33:09,980 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_72.png to (0, 0, 199, 383) (margin=10, top_margin=20) +2026-06-19 22:33:09,980 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_72.png +2026-06-19 22:33:10,000 - INFO - Calling API for img_72.png -> 20260619_223309_img_72.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:33:19,128 - INFO - Successfully processed img_72.png -> /mnt/zim/tour-comfy/output/20260619_223309_img_72.png +2026-06-19 22:33:19,317 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 762 images +2026-06-19 22:33:20,318 - INFO - Starting processing for img_28.png... +2026-06-19 22:33:20,319 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_28.png to (31, 52, 203, 358) (margin=10, top_margin=20) +2026-06-19 22:33:20,319 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_28.png +2026-06-19 22:33:20,322 - INFO - Calling API for img_28.png -> 20260619_223320_img_28.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:33:29,386 - INFO - Successfully processed img_28.png -> /mnt/zim/tour-comfy/output/20260619_223320_img_28.png +2026-06-19 22:33:29,573 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 763 images +2026-06-19 22:33:30,574 - INFO - Starting processing for img_73.png... +2026-06-19 22:33:30,575 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_73.png to (0, 0, 197, 374) (margin=10, top_margin=20) +2026-06-19 22:33:30,575 - INFO - Adding 18px headroom to /mnt/zim/tour-comfy/stage/img_73.png +2026-06-19 22:33:30,596 - INFO - Calling API for img_73.png -> 20260619_223330_img_73.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:33:39,723 - INFO - Successfully processed img_73.png -> /mnt/zim/tour-comfy/output/20260619_223330_img_73.png +2026-06-19 22:33:39,877 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 764 images +2026-06-19 22:33:40,877 - INFO - Starting processing for img_88.png... +2026-06-19 22:33:40,878 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_88.png to (23, 31, 142, 284) (margin=10, top_margin=20) +2026-06-19 22:33:40,878 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_88.png +2026-06-19 22:33:40,881 - INFO - Calling API for img_88.png -> 20260619_223340_img_88.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:33:50,161 - INFO - Successfully processed img_88.png -> /mnt/zim/tour-comfy/output/20260619_223340_img_88.png +2026-06-19 22:33:50,337 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 765 images +2026-06-19 22:33:51,338 - INFO - Starting processing for img_16.png... +2026-06-19 22:33:51,338 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_16.png to (16, 32, 125, 265) (margin=10, top_margin=20) +2026-06-19 22:33:51,338 - INFO - Adding 11px headroom to /mnt/zim/tour-comfy/stage/img_16.png +2026-06-19 22:33:51,340 - INFO - Calling API for img_16.png -> 20260619_223351_img_16.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:00,404 - INFO - Successfully processed img_16.png -> /mnt/zim/tour-comfy/output/20260619_223351_img_16.png +2026-06-19 22:34:00,591 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 766 images +2026-06-19 22:34:01,592 - INFO - Starting processing for img_63.png... +2026-06-19 22:34:01,593 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_63.png to (27, 46, 188, 329) (margin=10, top_margin=20) +2026-06-19 22:34:01,593 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_63.png +2026-06-19 22:34:01,596 - INFO - Calling API for img_63.png -> 20260619_223401_img_63.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:10,660 - INFO - Successfully processed img_63.png -> /mnt/zim/tour-comfy/output/20260619_223401_img_63.png +2026-06-19 22:34:10,854 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 767 images +2026-06-19 22:34:11,854 - INFO - Starting processing for img_3.png... +2026-06-19 22:34:11,855 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_3.png to (2, 10, 77, 156) (margin=10, top_margin=20) +2026-06-19 22:34:11,855 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/img_3.png +2026-06-19 22:34:11,855 - INFO - Calling API for img_3.png -> 20260619_223411_img_3.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:20,918 - INFO - Successfully processed img_3.png -> /mnt/zim/tour-comfy/output/20260619_223411_img_3.png +2026-06-19 22:34:21,102 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 768 images +2026-06-19 22:34:22,103 - INFO - Starting processing for img_18.png... +2026-06-19 22:34:22,103 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_18.png to (14, 13, 110, 175) (margin=10, top_margin=20) +2026-06-19 22:34:22,103 - INFO - Adding 8px headroom to /mnt/zim/tour-comfy/stage/img_18.png +2026-06-19 22:34:22,105 - INFO - Calling API for img_18.png -> 20260619_223422_img_18.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:30,779 - INFO - Successfully processed img_18.png -> /mnt/zim/tour-comfy/output/20260619_223422_img_18.png +2026-06-19 22:34:30,964 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 769 images +2026-06-19 22:34:31,965 - INFO - Starting processing for img_22.png... +2026-06-19 22:34:31,965 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_22.png to (12, 15, 97, 173) (margin=10, top_margin=20) +2026-06-19 22:34:31,966 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/img_22.png +2026-06-19 22:34:31,967 - INFO - Calling API for img_22.png -> 20260619_223431_img_22.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:40,531 - INFO - Successfully processed img_22.png -> /mnt/zim/tour-comfy/output/20260619_223431_img_22.png +2026-06-19 22:34:40,698 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 770 images +2026-06-19 22:34:41,699 - INFO - Starting processing for img_77.png... +2026-06-19 22:34:41,703 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_77.png to (0, 0, 287, 574) (margin=10, top_margin=20) +2026-06-19 22:34:41,703 - INFO - Adding 28px headroom to /mnt/zim/tour-comfy/stage/img_77.png +2026-06-19 22:34:41,750 - INFO - Calling API for img_77.png -> 20260619_223441_img_77.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:34:50,912 - INFO - Successfully processed img_77.png -> /mnt/zim/tour-comfy/output/20260619_223441_img_77.png +2026-06-19 22:34:51,089 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 771 images +2026-06-19 22:34:52,090 - INFO - Starting processing for image.png... +2026-06-19 22:34:52,090 - INFO - Cropping /mnt/zim/tour-comfy/stage/image.png to (16, 38, 134, 284) (margin=10, top_margin=20) +2026-06-19 22:34:52,090 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/image.png +2026-06-19 22:34:52,093 - INFO - Calling API for image.png -> 20260619_223452_image.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:35:00,776 - INFO - Successfully processed image.png -> /mnt/zim/tour-comfy/output/20260619_223452_image.png +2026-06-19 22:35:00,951 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 772 images +2026-06-19 22:35:01,952 - INFO - Starting processing for img_71.png... +2026-06-19 22:35:01,952 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_71.png to (30, 42, 150, 308) (margin=10, top_margin=20) +2026-06-19 22:35:01,952 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_71.png +2026-06-19 22:35:01,955 - INFO - Calling API for img_71.png -> 20260619_223501_img_71.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:35:11,027 - INFO - Successfully processed img_71.png -> /mnt/zim/tour-comfy/output/20260619_223501_img_71.png +2026-06-19 22:35:11,198 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 773 images +2026-06-19 22:35:12,204 - INFO - Starting processing for 20150913_211324.jpg... +2026-06-19 22:35:12,207 - INFO - Image /mnt/zim/tour-comfy/stage/20150913_211324.jpg is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:35:14,828 - INFO - Calling API for 20150913_211324.jpg -> 20260619_223512_20150913_211324.jpg with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:35:28,629 - INFO - Successfully processed 20150913_211324.jpg -> /mnt/zim/tour-comfy/output/20260619_223512_20150913_211324.jpg +2026-06-19 22:35:28,865 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 774 images +2026-06-19 22:35:29,866 - INFO - Starting processing for img_52.png... +2026-06-19 22:35:29,870 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_52.png to (0, 0, 332, 532) (margin=10, top_margin=20) +2026-06-19 22:35:29,870 - INFO - Adding 26px headroom to /mnt/zim/tour-comfy/stage/img_52.png +2026-06-19 22:35:29,915 - INFO - Calling API for img_52.png -> 20260619_223529_img_52.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:35:43,596 - INFO - Successfully processed img_52.png -> /mnt/zim/tour-comfy/output/20260619_223529_img_52.png +2026-06-19 22:35:43,845 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 775 images +2026-06-19 22:35:44,846 - INFO - Starting processing for img_54.png... +2026-06-19 22:35:44,849 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_54.png to (0, 0, 281, 498) (margin=10, top_margin=20) +2026-06-19 22:35:44,849 - INFO - Adding 24px headroom to /mnt/zim/tour-comfy/stage/img_54.png +2026-06-19 22:35:44,902 - INFO - Calling API for img_54.png -> 20260619_223544_img_54.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:35:58,628 - INFO - Successfully processed img_54.png -> /mnt/zim/tour-comfy/output/20260619_223544_img_54.png +2026-06-19 22:35:58,907 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 776 images +2026-06-19 22:35:59,908 - INFO - Starting processing for img_2.png... +2026-06-19 22:35:59,908 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_2.png to (9, 24, 83, 218) (margin=10, top_margin=20) +2026-06-19 22:35:59,908 - INFO - Adding 9px headroom to /mnt/zim/tour-comfy/stage/img_2.png +2026-06-19 22:35:59,909 - INFO - Calling API for img_2.png -> 20260619_223559_img_2.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:36:14,000 - INFO - Successfully processed img_2.png -> /mnt/zim/tour-comfy/output/20260619_223559_img_2.png +2026-06-19 22:36:14,225 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 777 images +2026-06-19 22:36:15,226 - INFO - Starting processing for img_6.png... +2026-06-19 22:36:15,227 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_6.png to (16, 38, 134, 284) (margin=10, top_margin=20) +2026-06-19 22:36:15,227 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_6.png +2026-06-19 22:36:15,229 - INFO - Calling API for img_6.png -> 20260619_223615_img_6.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:36:28,308 - INFO - Successfully processed img_6.png -> /mnt/zim/tour-comfy/output/20260619_223615_img_6.png +2026-06-19 22:36:28,503 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 778 images +2026-06-19 22:36:29,504 - INFO - Starting processing for imgxxxx.png... +2026-06-19 22:36:29,505 - INFO - Cropping /mnt/zim/tour-comfy/stage/imgxxxx.png to (0, 0, 168, 247) (margin=10, top_margin=20) +2026-06-19 22:36:29,505 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/imgxxxx.png +2026-06-19 22:36:29,514 - INFO - Calling API for imgxxxx.png -> 20260619_223629_imgxxxx.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:36:42,631 - INFO - Successfully processed imgxxxx.png -> /mnt/zim/tour-comfy/output/20260619_223629_imgxxxx.png +2026-06-19 22:36:42,878 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 779 images +2026-06-19 22:36:43,879 - INFO - Starting processing for img_48.png... +2026-06-19 22:36:43,879 - INFO - Image /mnt/zim/tour-comfy/stage/img_48.png is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:36:43,899 - INFO - Calling API for img_48.png -> 20260619_223643_img_48.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:36:57,498 - INFO - Successfully processed img_48.png -> /mnt/zim/tour-comfy/output/20260619_223643_img_48.png +2026-06-19 22:36:57,729 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 780 images +2026-06-19 22:36:58,729 - INFO - Starting processing for img_66.png... +2026-06-19 22:36:58,730 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_66.png to (20, 46, 137, 340) (margin=10, top_margin=20) +2026-06-19 22:36:58,730 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_66.png +2026-06-19 22:36:58,735 - INFO - Calling API for img_66.png -> 20260619_223658_img_66.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:37:11,529 - INFO - Successfully processed img_66.png -> /mnt/zim/tour-comfy/output/20260619_223658_img_66.png +2026-06-19 22:37:11,752 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 781 images +2026-06-19 22:37:12,756 - INFO - Starting processing for img_50.png... +2026-06-19 22:37:12,769 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_50.png to (0, 0, 636, 1201) (margin=10, top_margin=20) +2026-06-19 22:37:12,770 - INFO - Adding 60px headroom to /mnt/zim/tour-comfy/stage/img_50.png +2026-06-19 22:37:12,920 - INFO - Calling API for img_50.png -> 20260619_223712_img_50.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:37:24,575 - INFO - Successfully processed img_50.png -> /mnt/zim/tour-comfy/output/20260619_223712_img_50.png +2026-06-19 22:37:24,804 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 782 images +2026-06-19 22:37:25,808 - INFO - Starting processing for 20160903_200935.jpg... +2026-06-19 22:37:25,808 - INFO - Image /mnt/zim/tour-comfy/stage/20160903_200935.jpg is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:37:28,168 - INFO - Calling API for 20160903_200935.jpg -> 20260619_223725_20160903_200935.jpg with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:37:41,860 - INFO - Successfully processed 20160903_200935.jpg -> /mnt/zim/tour-comfy/output/20260619_223725_20160903_200935.jpg +2026-06-19 22:37:42,145 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 783 images +2026-06-19 22:37:43,146 - INFO - Starting processing for img_62.png... +2026-06-19 22:37:43,147 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_62.png to (12, 43, 114, 306) (margin=10, top_margin=20) +2026-06-19 22:37:43,147 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_62.png +2026-06-19 22:37:43,149 - INFO - Calling API for img_62.png -> 20260619_223743_img_62.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:37:56,737 - INFO - Successfully processed img_62.png -> /mnt/zim/tour-comfy/output/20260619_223743_img_62.png +2026-06-19 22:37:56,932 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 784 images +2026-06-19 22:37:57,933 - INFO - Starting processing for img_82.png... +2026-06-19 22:37:57,934 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_82.png to (0, 0, 124, 386) (margin=10, top_margin=20) +2026-06-19 22:37:57,934 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_82.png +2026-06-19 22:37:57,948 - INFO - Calling API for img_82.png -> 20260619_223757_img_82.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:38:11,595 - INFO - Successfully processed img_82.png -> /mnt/zim/tour-comfy/output/20260619_223757_img_82.png +2026-06-19 22:38:11,843 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 785 images +2026-06-19 22:38:12,844 - INFO - Starting processing for img_57.png... +2026-06-19 22:38:12,844 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_57.png to (14, 58, 130, 398) (margin=10, top_margin=20) +2026-06-19 22:38:12,844 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_57.png +2026-06-19 22:38:12,847 - INFO - Calling API for img_57.png -> 20260619_223812_img_57.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:38:25,122 - INFO - Successfully processed img_57.png -> /mnt/zim/tour-comfy/output/20260619_223812_img_57.png +2026-06-19 22:38:25,333 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 786 images +2026-06-19 22:38:26,333 - INFO - Starting processing for img_7.png... +2026-06-19 22:38:26,334 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_7.png to (17, 45, 126, 337) (margin=10, top_margin=20) +2026-06-19 22:38:26,334 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_7.png +2026-06-19 22:38:26,337 - INFO - Calling API for img_7.png -> 20260619_223826_img_7.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:38:39,949 - INFO - Successfully processed img_7.png -> /mnt/zim/tour-comfy/output/20260619_223826_img_7.png +2026-06-19 22:38:40,218 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 787 images +2026-06-19 22:38:41,219 - INFO - Starting processing for img_67.png... +2026-06-19 22:38:41,220 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_67.png to (14, 41, 115, 300) (margin=10, top_margin=20) +2026-06-19 22:38:41,220 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_67.png +2026-06-19 22:38:41,222 - INFO - Calling API for img_67.png -> 20260619_223841_img_67.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:38:54,811 - INFO - Successfully processed img_67.png -> /mnt/zim/tour-comfy/output/20260619_223841_img_67.png +2026-06-19 22:38:55,056 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 788 images +2026-06-19 22:38:56,056 - INFO - Starting processing for img_37.png... +2026-06-19 22:38:56,057 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_37.png to (29, 64, 193, 406) (margin=10, top_margin=20) +2026-06-19 22:38:56,057 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_37.png +2026-06-19 22:38:56,063 - INFO - Calling API for img_37.png -> 20260619_223856_img_37.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:39:09,667 - INFO - Successfully processed img_37.png -> /mnt/zim/tour-comfy/output/20260619_223856_img_37.png +2026-06-19 22:39:09,886 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 789 images +2026-06-19 22:39:10,887 - INFO - Starting processing for img_6v1.png... +2026-06-19 22:39:10,887 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_6v1.png to (16, 38, 134, 284) (margin=10, top_margin=20) +2026-06-19 22:39:10,887 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_6v1.png +2026-06-19 22:39:10,889 - INFO - Calling API for img_6v1.png -> 20260619_223910_img_6v1.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:39:24,057 - INFO - Successfully processed img_6v1.png -> /mnt/zim/tour-comfy/output/20260619_223910_img_6v1.png +2026-06-19 22:39:24,327 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 790 images +2026-06-19 22:39:25,328 - INFO - Starting processing for img_26.png... +2026-06-19 22:39:25,329 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_26.png to (26, 46, 182, 308) (margin=10, top_margin=20) +2026-06-19 22:39:25,329 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_26.png +2026-06-19 22:39:25,332 - INFO - Calling API for img_26.png -> 20260619_223925_img_26.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:39:38,920 - INFO - Successfully processed img_26.png -> /mnt/zim/tour-comfy/output/20260619_223925_img_26.png +2026-06-19 22:39:39,206 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 791 images +2026-06-19 22:39:40,207 - INFO - Starting processing for img_75.png... +2026-06-19 22:39:40,208 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_75.png to (0, 0, 103, 190) (margin=10, top_margin=20) +2026-06-19 22:39:40,208 - INFO - Adding 9px headroom to /mnt/zim/tour-comfy/stage/img_75.png +2026-06-19 22:39:40,216 - INFO - Calling API for img_75.png -> 20260619_223940_img_75.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:39:54,352 - INFO - Successfully processed img_75.png -> /mnt/zim/tour-comfy/output/20260619_223940_img_75.png +2026-06-19 22:39:54,694 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 792 images +2026-06-19 22:39:55,695 - INFO - Starting processing for img_64.png... +2026-06-19 22:39:55,696 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_64.png to (16, 37, 115, 292) (margin=10, top_margin=20) +2026-06-19 22:39:55,696 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_64.png +2026-06-19 22:39:55,698 - INFO - Calling API for img_64.png -> 20260619_223955_img_64.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:40:06,292 - INFO - Successfully processed img_64.png -> /mnt/zim/tour-comfy/output/20260619_223955_img_64.png +2026-06-19 22:40:06,446 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 793 images +2026-06-19 22:40:07,447 - INFO - Starting processing for img_31.png... +2026-06-19 22:40:07,448 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_31.png to (24, 49, 152, 335) (margin=10, top_margin=20) +2026-06-19 22:40:07,448 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_31.png +2026-06-19 22:40:07,453 - INFO - Calling API for img_31.png -> 20260619_224007_img_31.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:40:20,557 - INFO - Successfully processed img_31.png -> /mnt/zim/tour-comfy/output/20260619_224007_img_31.png +2026-06-19 22:40:20,790 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 794 images +2026-06-19 22:40:21,791 - INFO - Starting processing for img_45.png... +2026-06-19 22:40:21,791 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_45.png to (17, 45, 148, 336) (margin=10, top_margin=20) +2026-06-19 22:40:21,791 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_45.png +2026-06-19 22:40:21,795 - INFO - Calling API for img_45.png -> 20260619_224021_img_45.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:40:33,876 - INFO - Successfully processed img_45.png -> /mnt/zim/tour-comfy/output/20260619_224021_img_45.png +2026-06-19 22:40:34,108 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 795 images +2026-06-19 22:40:35,109 - INFO - Starting processing for img_68.png... +2026-06-19 22:40:35,109 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_68.png to (9, 28, 93, 249) (margin=10, top_margin=20) +2026-06-19 22:40:35,109 - INFO - Adding 11px headroom to /mnt/zim/tour-comfy/stage/img_68.png +2026-06-19 22:40:35,111 - INFO - Calling API for img_68.png -> 20260619_224035_img_68.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:40:48,261 - INFO - Successfully processed img_68.png -> /mnt/zim/tour-comfy/output/20260619_224035_img_68.png +2026-06-19 22:40:48,519 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 796 images +2026-06-19 22:40:49,521 - INFO - Starting processing for img_29.png... +2026-06-19 22:40:49,523 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_29.png to (0, 0, 202, 449) (margin=10, top_margin=20) +2026-06-19 22:40:49,523 - INFO - Adding 22px headroom to /mnt/zim/tour-comfy/stage/img_29.png +2026-06-19 22:40:49,543 - INFO - Calling API for img_29.png -> 20260619_224049_img_29.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:41:03,184 - INFO - Successfully processed img_29.png -> /mnt/zim/tour-comfy/output/20260619_224049_img_29.png +2026-06-19 22:41:03,419 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 797 images +2026-06-19 22:41:04,419 - INFO - Starting processing for img_1.png... +2026-06-19 22:41:04,420 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_1.png to (22, 36, 155, 282) (margin=10, top_margin=20) +2026-06-19 22:41:04,420 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_1.png +2026-06-19 22:41:04,422 - INFO - Calling API for img_1.png -> 20260619_224104_img_1.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:41:17,554 - INFO - Successfully processed img_1.png -> /mnt/zim/tour-comfy/output/20260619_224104_img_1.png +2026-06-19 22:41:17,786 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 798 images +2026-06-19 22:41:18,787 - INFO - Starting processing for img_39.png... +2026-06-19 22:41:18,788 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_39.png to (15, 19, 127, 193) (margin=10, top_margin=20) +2026-06-19 22:41:18,788 - INFO - Adding 8px headroom to /mnt/zim/tour-comfy/stage/img_39.png +2026-06-19 22:41:18,790 - INFO - Calling API for img_39.png -> 20260619_224118_img_39.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:41:32,367 - INFO - Successfully processed img_39.png -> /mnt/zim/tour-comfy/output/20260619_224118_img_39.png +2026-06-19 22:41:32,590 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 799 images +2026-06-19 22:41:33,592 - INFO - Starting processing for img_87.png... +2026-06-19 22:41:33,595 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_87.png to (0, 0, 391, 546) (margin=10, top_margin=20) +2026-06-19 22:41:33,596 - INFO - Adding 27px headroom to /mnt/zim/tour-comfy/stage/img_87.png +2026-06-19 22:41:33,654 - INFO - Calling API for img_87.png -> 20260619_224133_img_87.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:41:47,537 - INFO - Successfully processed img_87.png -> /mnt/zim/tour-comfy/output/20260619_224133_img_87.png +2026-06-19 22:41:47,765 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 800 images +2026-06-19 22:41:48,771 - INFO - Starting processing for 20160903_200728.jpg... +2026-06-19 22:41:48,771 - INFO - Image /mnt/zim/tour-comfy/stage/20160903_200728.jpg is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:41:51,428 - INFO - Calling API for 20160903_200728.jpg -> 20260619_224148_20160903_200728.jpg with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:42:04,693 - INFO - Successfully processed 20160903_200728.jpg -> /mnt/zim/tour-comfy/output/20260619_224148_20160903_200728.jpg +2026-06-19 22:42:04,945 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 801 images +2026-06-19 22:42:05,946 - INFO - Starting processing for img_61.png... +2026-06-19 22:42:05,947 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_61.png to (9, 49, 121, 336) (margin=10, top_margin=20) +2026-06-19 22:42:05,947 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_61.png +2026-06-19 22:42:05,950 - INFO - Calling API for img_61.png -> 20260619_224205_img_61.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:42:18,042 - INFO - Successfully processed img_61.png -> /mnt/zim/tour-comfy/output/20260619_224205_img_61.png +2026-06-19 22:42:18,269 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 802 images +2026-06-19 22:42:19,270 - INFO - Starting processing for img_12.png... +2026-06-19 22:42:19,271 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_12.png to (14, 74, 166, 456) (margin=10, top_margin=20) +2026-06-19 22:42:19,271 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_12.png +2026-06-19 22:42:19,277 - INFO - Calling API for img_12.png -> 20260619_224219_img_12.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:42:32,875 - INFO - Successfully processed img_12.png -> /mnt/zim/tour-comfy/output/20260619_224219_img_12.png +2026-06-19 22:42:33,100 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 803 images +2026-06-19 22:42:36,891 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 22:42:36,891 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 22:42:36,891 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 22:43:34,921 - INFO - Starting processing for img_85.png... +2026-06-19 22:43:34,925 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_85.png to (0, 0, 242, 511) (margin=10, top_margin=20) +2026-06-19 22:43:34,925 - INFO - Adding 25px headroom to /mnt/zim/tour-comfy/stage/img_85.png +2026-06-19 22:43:34,962 - INFO - Calling API for img_85.png -> 20260619_224334_img_85.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:44:43,773 - INFO - Successfully processed img_85.png -> /mnt/zim/tour-comfy/output/20260619_224334_img_85.png +2026-06-19 22:44:43,809 - INFO - Parsing model identifier. Schema: None, Identifier: ViT-H-14 +2026-06-19 22:44:43,809 - INFO - Loaded built-in ViT-H-14 model config. +2026-06-19 22:44:44,001 - INFO - HTTP Request: HEAD https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/resolve/main/open_clip_model.safetensors "HTTP/1.1 302 Found" +2026-06-19 22:44:44,002 - INFO - Instantiating model architecture: CLIP +2026-06-19 22:44:47,954 - INFO - Loading full pretrained weights from: /home/mike/.cache/huggingface/hub/models--laion--CLIP-ViT-H-14-laion2B-s32B-b79K/snapshots/1c2b8495b28150b8a4922ee1c8edee224c284c0c/open_clip_model.safetensors +2026-06-19 22:44:48,419 - INFO - Final image preprocessing configuration set: {'size': (224, 224), 'mode': 'RGB', 'mean': (0.48145466, 0.4578275, 0.40821073), 'std': (0.26862954, 0.26130258, 0.27577711), 'interpolation': 'bicubic', 'resize_mode': 'shortest', 'fill_color': 0} +2026-06-19 22:44:48,419 - INFO - Model ViT-H-14 creation process complete. +2026-06-19 22:44:56,519 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 804 images +2026-06-19 22:44:57,520 - INFO - Starting processing for img_69.png... +2026-06-19 22:44:57,521 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_69.png to (24, 46, 132, 316) (margin=10, top_margin=20) +2026-06-19 22:44:57,521 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_69.png +2026-06-19 22:44:57,523 - INFO - Calling API for img_69.png -> 20260619_224457_img_69.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:45:11,338 - INFO - Successfully processed img_69.png -> /mnt/zim/tour-comfy/output/20260619_224457_img_69.png +2026-06-19 22:45:11,571 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 805 images +2026-06-19 22:45:12,572 - INFO - Starting processing for img_8.png... +2026-06-19 22:45:12,572 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_8.png to (12, 40, 100, 301) (margin=10, top_margin=20) +2026-06-19 22:45:12,572 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_8.png +2026-06-19 22:45:12,574 - INFO - Calling API for img_8.png -> 20260619_224512_img_8.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:45:26,362 - INFO - Successfully processed img_8.png -> /mnt/zim/tour-comfy/output/20260619_224512_img_8.png +2026-06-19 22:45:26,565 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 806 images +2026-06-19 22:45:27,566 - INFO - Starting processing for img_92.png... +2026-06-19 22:45:27,566 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_92.png to (23, 36, 154, 283) (margin=10, top_margin=20) +2026-06-19 22:45:27,566 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_92.png +2026-06-19 22:45:27,568 - INFO - Calling API for img_92.png -> 20260619_224527_img_92.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:45:41,147 - INFO - Successfully processed img_92.png -> /mnt/zim/tour-comfy/output/20260619_224527_img_92.png +2026-06-19 22:45:41,387 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 807 images +2026-06-19 22:45:42,388 - INFO - Starting processing for img_35.png... +2026-06-19 22:45:42,389 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_35.png to (34, 75, 262, 473) (margin=10, top_margin=20) +2026-06-19 22:45:42,390 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_35.png +2026-06-19 22:45:42,397 - INFO - Calling API for img_35.png -> 20260619_224542_img_35.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:45:56,203 - INFO - Successfully processed img_35.png -> /mnt/zim/tour-comfy/output/20260619_224542_img_35.png +2026-06-19 22:45:56,479 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 808 images +2026-06-19 22:45:57,480 - INFO - Starting processing for img_81.png... +2026-06-19 22:45:57,481 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_81.png to (0, 0, 158, 203) (margin=10, top_margin=20) +2026-06-19 22:45:57,481 - INFO - Adding 10px headroom to /mnt/zim/tour-comfy/stage/img_81.png +2026-06-19 22:45:57,489 - INFO - Calling API for img_81.png -> 20260619_224557_img_81.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:46:11,741 - INFO - Successfully processed img_81.png -> /mnt/zim/tour-comfy/output/20260619_224557_img_81.png +2026-06-19 22:46:11,947 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 809 images +2026-06-19 22:46:12,947 - INFO - Starting processing for img_27.png... +2026-06-19 22:46:12,948 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_27.png to (23, 52, 145, 346) (margin=10, top_margin=20) +2026-06-19 22:46:12,948 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_27.png +2026-06-19 22:46:12,951 - INFO - Calling API for img_27.png -> 20260619_224612_img_27.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:46:25,540 - INFO - Successfully processed img_27.png -> /mnt/zim/tour-comfy/output/20260619_224612_img_27.png +2026-06-19 22:46:25,711 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 810 images +2026-06-19 22:46:26,712 - INFO - Starting processing for img_33.png... +2026-06-19 22:46:26,713 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_33.png to (40, 69, 180, 423) (margin=10, top_margin=20) +2026-06-19 22:46:26,713 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_33.png +2026-06-19 22:46:26,717 - INFO - Calling API for img_33.png -> 20260619_224626_img_33.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:46:36,380 - INFO - Successfully processed img_33.png -> /mnt/zim/tour-comfy/output/20260619_224626_img_33.png +2026-06-19 22:46:36,578 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 811 images +2026-06-19 22:46:37,579 - INFO - Starting processing for img_47.png... +2026-06-19 22:46:37,582 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_47.png to (49, 85, 301, 535) (margin=10, top_margin=20) +2026-06-19 22:46:37,582 - INFO - Adding 22px headroom to /mnt/zim/tour-comfy/stage/img_47.png +2026-06-19 22:46:37,600 - INFO - Calling API for img_47.png -> 20260619_224637_img_47.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:46:51,203 - INFO - Successfully processed img_47.png -> /mnt/zim/tour-comfy/output/20260619_224637_img_47.png +2026-06-19 22:46:51,436 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 812 images +2026-06-19 22:46:52,437 - INFO - Starting processing for img_5.png... +2026-06-19 22:46:52,437 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_5.png to (2, 10, 77, 156) (margin=10, top_margin=20) +2026-06-19 22:46:52,437 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/img_5.png +2026-06-19 22:46:52,438 - INFO - Calling API for img_5.png -> 20260619_224652_img_5.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:47:06,016 - INFO - Successfully processed img_5.png -> /mnt/zim/tour-comfy/output/20260619_224652_img_5.png +2026-06-19 22:47:06,294 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 813 images +2026-06-19 22:47:07,295 - INFO - Starting processing for img_46.png... +2026-06-19 22:47:07,296 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_46.png to (32, 61, 207, 409) (margin=10, top_margin=20) +2026-06-19 22:47:07,297 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_46.png +2026-06-19 22:47:07,302 - INFO - Calling API for img_46.png -> 20260619_224707_img_46.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:47:20,883 - INFO - Successfully processed img_46.png -> /mnt/zim/tour-comfy/output/20260619_224707_img_46.png +2026-06-19 22:47:21,115 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 814 images +2026-06-19 22:47:22,116 - INFO - Starting processing for img_25.png... +2026-06-19 22:47:22,117 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_25.png to (34, 47, 222, 341) (margin=10, top_margin=20) +2026-06-19 22:47:22,117 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_25.png +2026-06-19 22:47:22,126 - INFO - Calling API for img_25.png -> 20260619_224722_img_25.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:47:35,794 - INFO - Successfully processed img_25.png -> /mnt/zim/tour-comfy/output/20260619_224722_img_25.png +2026-06-19 22:47:36,032 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 815 images +2026-06-19 22:47:37,033 - INFO - Starting processing for img_14.png... +2026-06-19 22:47:37,034 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_14.png to (10, 33, 104, 288) (margin=10, top_margin=20) +2026-06-19 22:47:37,034 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_14.png +2026-06-19 22:47:37,036 - INFO - Calling API for img_14.png -> 20260619_224737_img_14.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:47:50,629 - INFO - Successfully processed img_14.png -> /mnt/zim/tour-comfy/output/20260619_224737_img_14.png +2026-06-19 22:47:50,832 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 816 images +2026-06-19 22:47:51,833 - INFO - Starting processing for img_93.png... +2026-06-19 22:47:51,833 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_93.png to (0, 0, 80, 204) (margin=10, top_margin=20) +2026-06-19 22:47:51,833 - INFO - Adding 10px headroom to /mnt/zim/tour-comfy/stage/img_93.png +2026-06-19 22:47:51,835 - INFO - Calling API for img_93.png -> 20260619_224751_img_93.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:48:04,941 - INFO - Successfully processed img_93.png -> /mnt/zim/tour-comfy/output/20260619_224751_img_93.png +2026-06-19 22:48:05,185 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 817 images +2026-06-19 22:48:06,186 - INFO - Starting processing for img_10.png... +2026-06-19 22:48:06,187 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_10.png to (18, 44, 139, 318) (margin=10, top_margin=20) +2026-06-19 22:48:06,187 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_10.png +2026-06-19 22:48:06,190 - INFO - Calling API for img_10.png -> 20260619_224806_img_10.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:48:19,776 - INFO - Successfully processed img_10.png -> /mnt/zim/tour-comfy/output/20260619_224806_img_10.png +2026-06-19 22:48:20,005 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 818 images +2026-06-19 22:48:21,006 - INFO - Starting processing for img_13.png... +2026-06-19 22:48:21,007 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_13.png to (24, 62, 155, 412) (margin=10, top_margin=20) +2026-06-19 22:48:21,007 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_13.png +2026-06-19 22:48:21,011 - INFO - Calling API for img_13.png -> 20260619_224821_img_13.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:48:35,095 - INFO - Successfully processed img_13.png -> /mnt/zim/tour-comfy/output/20260619_224821_img_13.png +2026-06-19 22:48:35,315 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 819 images +2026-06-19 22:48:36,316 - INFO - Starting processing for img_65.png... +2026-06-19 22:48:36,316 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_65.png to (15, 37, 136, 286) (margin=10, top_margin=20) +2026-06-19 22:48:36,316 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_65.png +2026-06-19 22:48:36,319 - INFO - Calling API for img_65.png -> 20260619_224836_img_65.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:48:49,898 - INFO - Successfully processed img_65.png -> /mnt/zim/tour-comfy/output/20260619_224836_img_65.png +2026-06-19 22:48:50,125 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 820 images +2026-06-19 22:48:51,126 - INFO - Starting processing for img_36.png... +2026-06-19 22:48:51,127 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_36.png to (34, 75, 262, 473) (margin=10, top_margin=20) +2026-06-19 22:48:51,127 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_36.png +2026-06-19 22:48:51,135 - INFO - Calling API for img_36.png -> 20260619_224851_img_36.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:49:03,728 - INFO - Successfully processed img_36.png -> /mnt/zim/tour-comfy/output/20260619_224851_img_36.png +2026-06-19 22:49:04,008 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 821 images +2026-06-19 22:49:05,009 - INFO - Starting processing for img_19.png... +2026-06-19 22:49:05,010 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_19.png to (27, 57, 175, 375) (margin=10, top_margin=20) +2026-06-19 22:49:05,010 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_19.png +2026-06-19 22:49:05,014 - INFO - Calling API for img_19.png -> 20260619_224905_img_19.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:49:18,605 - INFO - Successfully processed img_19.png -> /mnt/zim/tour-comfy/output/20260619_224905_img_19.png +2026-06-19 22:49:18,838 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 822 images +2026-06-19 22:49:19,839 - INFO - Starting processing for img_51.png... +2026-06-19 22:49:19,839 - INFO - Image /mnt/zim/tour-comfy/stage/img_51.png is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:49:19,894 - INFO - Calling API for img_51.png -> 20260619_224919_img_51.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:49:33,163 - INFO - Successfully processed img_51.png -> /mnt/zim/tour-comfy/output/20260619_224919_img_51.png +2026-06-19 22:49:33,437 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 823 images +2026-06-19 22:49:34,438 - INFO - Starting processing for img_38.png... +2026-06-19 22:49:34,440 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_38.png to (47, 79, 275, 473) (margin=10, top_margin=20) +2026-06-19 22:49:34,440 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_38.png +2026-06-19 22:49:34,449 - INFO - Calling API for img_38.png -> 20260619_224934_img_38.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:49:48,074 - INFO - Successfully processed img_38.png -> /mnt/zim/tour-comfy/output/20260619_224934_img_38.png +2026-06-19 22:49:48,363 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 824 images +2026-06-19 22:49:49,364 - INFO - Starting processing for img_20.png... +2026-06-19 22:49:49,365 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_20.png to (11, 40, 119, 354) (margin=10, top_margin=20) +2026-06-19 22:49:49,365 - INFO - Adding 15px headroom to /mnt/zim/tour-comfy/stage/img_20.png +2026-06-19 22:49:49,368 - INFO - Calling API for img_20.png -> 20260619_224949_img_20.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:50:02,949 - INFO - Successfully processed img_20.png -> /mnt/zim/tour-comfy/output/20260619_224949_img_20.png +2026-06-19 22:50:03,187 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 825 images +2026-06-19 22:50:04,188 - INFO - Starting processing for img_34.png... +2026-06-19 22:50:04,188 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_34.png to (40, 69, 180, 423) (margin=10, top_margin=20) +2026-06-19 22:50:04,188 - INFO - Adding 17px headroom to /mnt/zim/tour-comfy/stage/img_34.png +2026-06-19 22:50:04,192 - INFO - Calling API for img_34.png -> 20260619_225004_img_34.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:50:15,772 - INFO - Successfully processed img_34.png -> /mnt/zim/tour-comfy/output/20260619_225004_img_34.png +2026-06-19 22:50:16,013 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 826 images +2026-06-19 22:50:17,014 - INFO - Starting processing for img_19_2.png... +2026-06-19 22:50:17,014 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_19_2.png to (23, 7, 151, 161) (margin=10, top_margin=20) +2026-06-19 22:50:17,014 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/img_19_2.png +2026-06-19 22:50:17,016 - INFO - Calling API for img_19_2.png -> 20260619_225017_img_19_2.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:50:31,410 - INFO - Successfully processed img_19_2.png -> /mnt/zim/tour-comfy/output/20260619_225017_img_19_2.png +2026-06-19 22:50:31,658 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 827 images +2026-06-19 22:50:32,658 - INFO - Starting processing for img_91.png... +2026-06-19 22:50:32,659 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_91.png to (23, 36, 154, 283) (margin=10, top_margin=20) +2026-06-19 22:50:32,659 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_91.png +2026-06-19 22:50:32,663 - INFO - Calling API for img_91.png -> 20260619_225032_img_91.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:50:46,238 - INFO - Successfully processed img_91.png -> /mnt/zim/tour-comfy/output/20260619_225032_img_91.png +2026-06-19 22:50:46,464 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 828 images +2026-06-19 22:50:47,465 - INFO - Starting processing for test123.jpeg... +2026-06-19 22:50:47,465 - INFO - Image /mnt/zim/tour-comfy/stage/test123.jpeg is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:50:47,630 - INFO - Calling API for test123.jpeg -> 20260619_225047_test123.jpeg with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:50:59,800 - INFO - Successfully processed test123.jpeg -> /mnt/zim/tour-comfy/output/20260619_225047_test123.jpeg +2026-06-19 22:51:00,023 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 829 images +2026-06-19 22:51:01,025 - INFO - Starting processing for img_49.png... +2026-06-19 22:51:01,025 - INFO - Image /mnt/zim/tour-comfy/stage/img_49.png is mode RGB, not RGBA. Skipping crop. +2026-06-19 22:51:01,053 - INFO - Calling API for img_49.png -> 20260619_225101_img_49.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:51:14,705 - INFO - Successfully processed img_49.png -> /mnt/zim/tour-comfy/output/20260619_225101_img_49.png +2026-06-19 22:51:14,957 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 830 images +2026-06-19 22:51:15,957 - INFO - Starting processing for test.png... +2026-06-19 22:51:15,958 - INFO - Cropping /mnt/zim/tour-comfy/stage/test.png to (31, 45, 145, 331) (margin=10, top_margin=20) +2026-06-19 22:51:15,958 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/test.png +2026-06-19 22:51:15,962 - INFO - Calling API for test.png -> 20260619_225115_test.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:51:29,553 - INFO - Successfully processed test.png -> /mnt/zim/tour-comfy/output/20260619_225115_test.png +2026-06-19 22:51:29,825 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 831 images +2026-06-19 22:51:30,825 - INFO - Starting processing for img_40.png... +2026-06-19 22:51:30,826 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_40.png to (20, 49, 152, 347) (margin=10, top_margin=20) +2026-06-19 22:51:30,826 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_40.png +2026-06-19 22:51:30,829 - INFO - Calling API for img_40.png -> 20260619_225130_img_40.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:51:44,825 - INFO - Successfully processed img_40.png -> /mnt/zim/tour-comfy/output/20260619_225130_img_40.png +2026-06-19 22:51:45,022 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 832 images +2026-06-19 22:51:46,023 - INFO - Starting processing for img_83.png... +2026-06-19 22:51:46,024 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_83.png to (0, 0, 124, 386) (margin=10, top_margin=20) +2026-06-19 22:51:46,024 - INFO - Adding 19px headroom to /mnt/zim/tour-comfy/stage/img_83.png +2026-06-19 22:51:46,037 - INFO - Calling API for img_83.png -> 20260619_225146_img_83.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:51:59,671 - INFO - Successfully processed img_83.png -> /mnt/zim/tour-comfy/output/20260619_225146_img_83.png +2026-06-19 22:51:59,902 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 833 images +2026-06-19 22:52:00,902 - INFO - Starting processing for img_70.png... +2026-06-19 22:52:00,903 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_70.png to (24, 46, 132, 316) (margin=10, top_margin=20) +2026-06-19 22:52:00,903 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_70.png +2026-06-19 22:52:00,908 - INFO - Calling API for img_70.png -> 20260619_225200_img_70.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:52:14,508 - INFO - Successfully processed img_70.png -> /mnt/zim/tour-comfy/output/20260619_225200_img_70.png +2026-06-19 22:52:14,710 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 834 images +2026-06-19 22:52:15,711 - INFO - Starting processing for img_15.png... +2026-06-19 22:52:15,711 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_15.png to (8, 39, 100, 302) (margin=10, top_margin=20) +2026-06-19 22:52:15,711 - INFO - Adding 13px headroom to /mnt/zim/tour-comfy/stage/img_15.png +2026-06-19 22:52:15,713 - INFO - Calling API for img_15.png -> 20260619_225215_img_15.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:52:27,798 - INFO - Successfully processed img_15.png -> /mnt/zim/tour-comfy/output/20260619_225215_img_15.png +2026-06-19 22:52:28,049 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 835 images +2026-06-19 22:52:29,050 - INFO - Starting processing for imgxxx.png... +2026-06-19 22:52:29,051 - INFO - Cropping /mnt/zim/tour-comfy/stage/imgxxx.png to (0, 0, 168, 247) (margin=10, top_margin=20) +2026-06-19 22:52:29,051 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/imgxxx.png +2026-06-19 22:52:29,060 - INFO - Calling API for imgxxx.png -> 20260619_225229_imgxxx.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:52:43,686 - INFO - Successfully processed imgxxx.png -> /mnt/zim/tour-comfy/output/20260619_225229_imgxxx.png +2026-06-19 22:52:43,900 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 836 images +2026-06-19 22:52:44,901 - INFO - Starting processing for img_86.png... +2026-06-19 22:52:44,905 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_86.png to (0, 0, 242, 511) (margin=10, top_margin=20) +2026-06-19 22:52:44,905 - INFO - Adding 25px headroom to /mnt/zim/tour-comfy/stage/img_86.png +2026-06-19 22:52:44,954 - INFO - Calling API for img_86.png -> 20260619_225244_img_86.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:52:58,750 - INFO - Successfully processed img_86.png -> /mnt/zim/tour-comfy/output/20260619_225244_img_86.png +2026-06-19 22:52:59,011 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 837 images +2026-06-19 22:53:00,012 - INFO - Starting processing for img_11.png... +2026-06-19 22:53:00,013 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_11.png to (26, 46, 189, 340) (margin=10, top_margin=20) +2026-06-19 22:53:00,013 - INFO - Adding 14px headroom to /mnt/zim/tour-comfy/stage/img_11.png +2026-06-19 22:53:00,019 - INFO - Calling API for img_11.png -> 20260619_225300_img_11.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:53:13,622 - INFO - Successfully processed img_11.png -> /mnt/zim/tour-comfy/output/20260619_225300_img_11.png +2026-06-19 22:53:13,896 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 838 images +2026-06-19 22:53:14,896 - INFO - Starting processing for img_4.png... +2026-06-19 22:53:14,897 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_4.png to (2, 10, 77, 156) (margin=10, top_margin=20) +2026-06-19 22:53:14,897 - INFO - Adding 7px headroom to /mnt/zim/tour-comfy/stage/img_4.png +2026-06-19 22:53:14,898 - INFO - Calling API for img_4.png -> 20260619_225314_img_4.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:53:26,593 - INFO - Successfully processed img_4.png -> /mnt/zim/tour-comfy/output/20260619_225314_img_4.png +2026-06-19 22:53:26,800 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 839 images +2026-06-19 22:53:27,801 - INFO - Starting processing for img_9.png... +2026-06-19 22:53:27,801 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_9.png to (23, 36, 154, 283) (margin=10, top_margin=20) +2026-06-19 22:53:27,801 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_9.png +2026-06-19 22:53:27,804 - INFO - Calling API for img_9.png -> 20260619_225327_img_9.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:53:39,878 - INFO - Successfully processed img_9.png -> /mnt/zim/tour-comfy/output/20260619_225327_img_9.png +2026-06-19 22:53:40,095 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 840 images +2026-06-19 22:53:41,095 - INFO - Starting processing for img_76.png... +2026-06-19 22:53:41,096 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_76.png to (0, 0, 103, 190) (margin=10, top_margin=20) +2026-06-19 22:53:41,096 - INFO - Adding 9px headroom to /mnt/zim/tour-comfy/stage/img_76.png +2026-06-19 22:53:41,102 - INFO - Calling API for img_76.png -> 20260619_225341_img_76.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:53:54,227 - INFO - Successfully processed img_76.png -> /mnt/zim/tour-comfy/output/20260619_225341_img_76.png +2026-06-19 22:53:54,495 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 841 images +2026-06-19 22:53:55,496 - INFO - Starting processing for img_run.png... +2026-06-19 22:53:55,496 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_run.png to (18, 54, 138, 380) (margin=10, top_margin=20) +2026-06-19 22:53:55,497 - INFO - Adding 16px headroom to /mnt/zim/tour-comfy/stage/img_run.png +2026-06-19 22:53:55,500 - INFO - Calling API for img_run.png -> 20260619_225355_img_run.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:54:08,714 - INFO - Successfully processed img_run.png -> /mnt/zim/tour-comfy/output/20260619_225355_img_run.png +2026-06-19 22:54:08,910 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 842 images +2026-06-19 22:54:09,911 - INFO - Starting processing for img_59.png... +2026-06-19 22:54:09,912 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_59.png to (0, 0, 179, 474) (margin=10, top_margin=20) +2026-06-19 22:54:09,912 - INFO - Adding 23px headroom to /mnt/zim/tour-comfy/stage/img_59.png +2026-06-19 22:54:09,928 - INFO - Calling API for img_59.png -> 20260619_225409_img_59.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:54:23,337 - INFO - Successfully processed img_59.png -> /mnt/zim/tour-comfy/output/20260619_225409_img_59.png +2026-06-19 22:54:23,567 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 843 images +2026-06-19 22:54:24,567 - INFO - Starting processing for img_74.png... +2026-06-19 22:54:24,568 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_74.png to (0, 0, 172, 190) (margin=10, top_margin=20) +2026-06-19 22:54:24,568 - INFO - Adding 9px headroom to /mnt/zim/tour-comfy/stage/img_74.png +2026-06-19 22:54:24,579 - INFO - Calling API for img_74.png -> 20260619_225424_img_74.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:54:38,228 - INFO - Successfully processed img_74.png -> /mnt/zim/tour-comfy/output/20260619_225424_img_74.png +2026-06-19 22:54:38,469 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 844 images +2026-06-19 22:54:39,469 - INFO - Starting processing for img.png... +2026-06-19 22:54:39,470 - INFO - Cropping /mnt/zim/tour-comfy/stage/img.png to (22, 31, 145, 265) (margin=10, top_margin=20) +2026-06-19 22:54:39,470 - INFO - Adding 11px headroom to /mnt/zim/tour-comfy/stage/img.png +2026-06-19 22:54:39,472 - INFO - Calling API for img.png -> 20260619_225439_img.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:54:53,053 - INFO - Successfully processed img.png -> /mnt/zim/tour-comfy/output/20260619_225439_img.png +2026-06-19 22:54:53,296 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 845 images +2026-06-19 22:54:54,296 - INFO - Starting processing for img_17.png... +2026-06-19 22:54:54,297 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_17.png to (12, 34, 110, 274) (margin=10, top_margin=20) +2026-06-19 22:54:54,297 - INFO - Adding 12px headroom to /mnt/zim/tour-comfy/stage/img_17.png +2026-06-19 22:54:54,298 - INFO - Calling API for img_17.png -> 20260619_225454_img_17.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:55:07,877 - INFO - Successfully processed img_17.png -> /mnt/zim/tour-comfy/output/20260619_225454_img_17.png +2026-06-19 22:55:08,169 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 846 images +2026-06-19 22:55:09,170 - INFO - Starting processing for img_60.png... +2026-06-19 22:55:09,172 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_60.png to (0, 0, 170, 458) (margin=10, top_margin=20) +2026-06-19 22:55:09,172 - INFO - Adding 22px headroom to /mnt/zim/tour-comfy/stage/img_60.png +2026-06-19 22:55:09,188 - INFO - Calling API for img_60.png -> 20260619_225509_img_60.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:55:22,403 - INFO - Successfully processed img_60.png -> /mnt/zim/tour-comfy/output/20260619_225509_img_60.png +2026-06-19 22:55:22,660 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 847 images +2026-06-19 22:55:23,661 - INFO - Starting processing for img_84.png... +2026-06-19 22:55:23,663 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_84.png to (0, 0, 188, 469) (margin=10, top_margin=20) +2026-06-19 22:55:23,663 - INFO - Adding 23px headroom to /mnt/zim/tour-comfy/stage/img_84.png +2026-06-19 22:55:23,687 - INFO - Calling API for img_84.png -> 20260619_225523_img_84.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:55:37,332 - INFO - Successfully processed img_84.png -> /mnt/zim/tour-comfy/output/20260619_225523_img_84.png +2026-06-19 22:55:37,563 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 848 images +2026-06-19 22:55:38,564 - INFO - Starting processing for img_43.png... +2026-06-19 22:55:38,565 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_43.png to (32, 75, 208, 481) (margin=10, top_margin=20) +2026-06-19 22:55:38,565 - INFO - Adding 20px headroom to /mnt/zim/tour-comfy/stage/img_43.png +2026-06-19 22:55:38,570 - INFO - Calling API for img_43.png -> 20260619_225538_img_43.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:55:52,659 - INFO - Successfully processed img_43.png -> /mnt/zim/tour-comfy/output/20260619_225538_img_43.png +2026-06-19 22:55:52,864 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 849 images +2026-06-19 22:55:53,865 - INFO - Starting processing for img_42.png... +2026-06-19 22:55:53,866 - INFO - Cropping /mnt/zim/tour-comfy/stage/img_42.png to (48, 74, 228, 476) (margin=10, top_margin=20) +2026-06-19 22:55:53,866 - INFO - Adding 20px headroom to /mnt/zim/tour-comfy/stage/img_42.png +2026-06-19 22:55:53,873 - INFO - Calling API for img_42.png -> 20260619_225553_img_42.png with prompt: high quality. detailed, female nude, high quality. realistic. detailed. female nude +2026-06-19 22:56:06,963 - INFO - Successfully processed img_42.png -> /mnt/zim/tour-comfy/output/20260619_225553_img_42.png +2026-06-19 22:56:07,166 - INFO - Updated /mnt/zim/tour-comfy/output/car.html with 850 images +2026-06-19 23:09:20,403 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 23:09:20,403 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 23:09:20,403 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 23:30:14,960 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 23:30:14,960 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 23:30:14,960 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 23:39:35,718 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 23:39:35,718 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 23:39:35,718 - INFO - API URL: http://127.0.0.1:8500/edit +2026-06-19 23:45:09,379 - INFO - Watcher started. Monitoring /mnt/zim/tour-comfy/stage... +2026-06-19 23:45:09,379 - INFO - Output directory: /mnt/zim/tour-comfy/output +2026-06-19 23:45:09,379 - INFO - API URL: http://127.0.0.1:8500/edit