diff --git a/change2/change_fast2.json b/change2/change_fast2.json new file mode 100644 index 0000000..d81a52d --- /dev/null +++ b/change2/change_fast2.json @@ -0,0 +1,411 @@ +{ + "1": { + "inputs": { + "samples": [ + "22", + 0 + ], + "vae": [ + "13", + 0 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE解码" + } + }, + "2": { + "inputs": { + "to_ref": true, + "ref_main_image": true, + "ref_longest_edge": [ + "20", + 0 + ], + "ref_crop": "center", + "ref_upscale": "lanczos", + "to_vl": true, + "vl_resize": true, + "vl_target_size": 384, + "vl_crop": "disabled", + "vl_upscale": "bicubic", + "image": [ + "10", + 0 + ], + "configs": [ + "8", + 0 + ] + }, + "class_type": "QwenEditConfigPreparer", + "_meta": { + "title": "Qwen Edit Config Preparer" + } + }, + "7": { + "inputs": { + "custom_output": [ + "15", + 2 + ] + }, + "class_type": "QwenEditOutputExtractor", + "_meta": { + "title": "Qwen Edit Output Extractor" + } + }, + "8": { + "inputs": { + "to_ref": true, + "ref_main_image": true, + "ref_longest_edge": [ + "9", + 0 + ], + "ref_crop": "center", + "ref_upscale": "lanczos", + "to_vl": true, + "vl_resize": true, + "vl_target_size": 384, + "vl_crop": "disabled", + "vl_upscale": "bicubic", + "image": [ + "11", + 0 + ] + }, + "class_type": "QwenEditConfigPreparer", + "_meta": { + "title": "Qwen Edit Config Preparer" + } + }, + "9": { + "inputs": { + "max_size": [ + "25", + 0 + ], + "image": [ + "11", + 0 + ] + }, + "class_type": "QwenEditAdaptiveLongestEdge", + "_meta": { + "title": "Qwen Edit Adaptive Longest Edge" + } + }, + "10": { + "inputs": { + "image": "cq5dam.web.hE7E3DA.1800.1800 - 2024-04-29T161212.795.jpg" + }, + "class_type": "LoadImage", + "_meta": { + "title": "加载图像" + } + }, + "11": { + "inputs": { + "image": "cq5dam.web.hE7E3DA.1800.1800 - 2024-04-29T161206.244.jpg" + }, + "class_type": "LoadImage", + "_meta": { + "title": "加载图像" + } + }, + "13": { + "inputs": { + "vae_name": "qwen_image_vae.safetensors" + }, + "class_type": "VAELoader", + "_meta": { + "title": "加载VAE" + } + }, + "14": { + "inputs": { + "prompt": "", + "return_full_refs_cond": true, + "instruction": "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "clip": [ + "38", + 0 + ], + "vae": [ + "13", + 0 + ], + "configs": [ + "2", + 0 + ] + }, + "class_type": "TextEncodeQwenImageEditPlusCustom_lrzjason", + "_meta": { + "title": "TextEncodeQwenImageEditPlusCustom lrzjason" + } + }, + "15": { + "inputs": { + "prompt": [ + "31", + 0 + ], + "return_full_refs_cond": true, + "instruction": "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "clip": [ + "38", + 0 + ], + "vae": [ + "13", + 0 + ], + "configs": [ + "2", + 0 + ] + }, + "class_type": "TextEncodeQwenImageEditPlusCustom_lrzjason", + "_meta": { + "title": "TextEncodeQwenImageEditPlusCustom lrzjason" + } + }, + "16": { + "inputs": { + "gguf_name": "FireRed-Image-Edit-1.1-Q4_0.gguf" + }, + "class_type": "LoaderGGUF", + "_meta": { + "title": "GGUF Loader" + } + }, + "17": { + "inputs": { + "lora_name": "FireRed-Image-Edit-1.0-Lightning-8steps-v1.0.safetensors", + "strength_model": 1, + "model": [ + "16", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoRA加载器(仅模型)" + } + }, + "19": { + "inputs": { + "image": [ + "1", + 0 + ], + "pad_info": [ + "7", + 0 + ] + }, + "class_type": "CropWithPadInfo", + "_meta": { + "title": "Crop With Pad Info" + } + }, + "20": { + "inputs": { + "max_size": [ + "25", + 0 + ], + "image": [ + "10", + 0 + ] + }, + "class_type": "QwenEditAdaptiveLongestEdge", + "_meta": { + "title": "Qwen Edit Adaptive Longest Edge" + } + }, + "21": { + "inputs": { + "samples1": [ + "15", + 1 + ], + "samples2": [ + "14", + 1 + ] + }, + "class_type": "LatentAdd", + "_meta": { + "title": "Latent相加" + } + }, + "22": { + "inputs": { + "seed": 1121572473225362, + "steps": 8, + "cfg": 1, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": [ + "17", + 0 + ], + "positive": [ + "15", + 0 + ], + "negative": [ + "14", + 0 + ], + "latent_image": [ + "28", + 0 + ] + }, + "class_type": "KSampler", + "_meta": { + "title": "K采样器" + } + }, + "25": { + "inputs": { + "Number": "1300" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "28": { + "inputs": { + "upscale_method": "nearest-exact", + "width": [ + "29", + 0 + ], + "height": [ + "30", + 0 + ], + "crop": "disabled", + "samples": [ + "21", + 0 + ] + }, + "class_type": "LatentUpscale", + "_meta": { + "title": "缩放Latent" + } + }, + "29": { + "inputs": { + "Number": "768" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "30": { + "inputs": { + "Number": "1024" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "31": { + "inputs": { + "value": "图1的背景改成深灰色。并穿上图2的上衣和短裤。保持图1人物的姿势,人脸,配饰不变,构图不变。" + }, + "class_type": "PrimitiveStringMultiline", + "_meta": { + "title": "字符串(多行)" + } + }, + "32": { + "inputs": { + "upscale_method": "nearest-exact", + "width": [ + "29", + 0 + ], + "height": [ + "30", + 0 + ], + "crop": "center", + "image": [ + "19", + 0 + ] + }, + "class_type": "ImageScale", + "_meta": { + "title": "缩放图像" + } + }, + "33": { + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "32", + 0 + ] + }, + "class_type": "SaveImage", + "_meta": { + "title": "保存图像" + } + }, + "36": { + "inputs": { + "rgthree_comparer": { + "images": [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_olfct_00001_.png&type=temp&subfolder=&rand=0.5054960464066687" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_olfct_00002_.png&type=temp&subfolder=&rand=0.03696578228441516" + } + ] + }, + "image_a": [ + "32", + 0 + ], + "image_b": [ + "11", + 0 + ] + }, + "class_type": "Image Comparer (rgthree)", + "_meta": { + "title": "Image Comparer (rgthree)" + } + }, + "38": { + "inputs": { + "clip_name": "qwen_2.5_vl_7b_fp8_scaled.safetensors", + "type": "qwen_image", + "device": "default" + }, + "class_type": "CLIPLoader", + "_meta": { + "title": "加载CLIP" + } + } +} \ No newline at end of file diff --git a/change2/service2.py b/change2/service2.py index e1f45c5..b30e33f 100644 --- a/change2/service2.py +++ b/change2/service2.py @@ -28,7 +28,9 @@ import oss2 COMFYUI_URL = "http://127.0.0.1:8188" # COMFYUI_URL = "http://117.50.80.187:47697" -WORKFLOW_PATH = Path(__file__).parent / "change2_1_ex.json" +# WORKFLOW_PATH = Path(__file__).parent / "change2_1_ex.json" + +WORKFLOW_PATH = Path(__file__).parent / "change_fast2.json" # 节点 ID 映射 NODE_MODEL = "11" # 模特 diff --git a/change3/change_fast3.json b/change3/change_fast3.json new file mode 100644 index 0000000..f42904b --- /dev/null +++ b/change3/change_fast3.json @@ -0,0 +1,465 @@ +{ + "1": { + "inputs": { + "samples": [ + "22", + 0 + ], + "vae": [ + "13", + 0 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE解码" + } + }, + "2": { + "inputs": { + "to_ref": true, + "ref_main_image": true, + "ref_longest_edge": [ + "20", + 0 + ], + "ref_crop": "center", + "ref_upscale": "lanczos", + "to_vl": true, + "vl_resize": true, + "vl_target_size": 384, + "vl_crop": "disabled", + "vl_upscale": "bicubic", + "image": [ + "10", + 0 + ], + "configs": [ + "8", + 0 + ] + }, + "class_type": "QwenEditConfigPreparer", + "_meta": { + "title": "Qwen Edit Config Preparer" + } + }, + "3": { + "inputs": { + "max_size": [ + "25", + 0 + ], + "image": [ + "4", + 0 + ] + }, + "class_type": "QwenEditAdaptiveLongestEdge", + "_meta": { + "title": "Qwen Edit Adaptive Longest Edge" + } + }, + "4": { + "inputs": { + "image": "70474cfbc4f51e083610b18f441396db.jpg" + }, + "class_type": "LoadImage", + "_meta": { + "title": "加载图像" + } + }, + "5": { + "inputs": { + "to_ref": true, + "ref_main_image": true, + "ref_longest_edge": [ + "3", + 0 + ], + "ref_crop": "center", + "ref_upscale": "lanczos", + "to_vl": true, + "vl_resize": true, + "vl_target_size": 384, + "vl_crop": "disabled", + "vl_upscale": "bicubic", + "image": [ + "4", + 0 + ], + "configs": [ + "2", + 0 + ] + }, + "class_type": "QwenEditConfigPreparer", + "_meta": { + "title": "Qwen Edit Config Preparer" + } + }, + "7": { + "inputs": { + "custom_output": [ + "15", + 2 + ] + }, + "class_type": "QwenEditOutputExtractor", + "_meta": { + "title": "Qwen Edit Output Extractor" + } + }, + "8": { + "inputs": { + "to_ref": true, + "ref_main_image": true, + "ref_longest_edge": [ + "9", + 0 + ], + "ref_crop": "center", + "ref_upscale": "lanczos", + "to_vl": true, + "vl_resize": true, + "vl_target_size": 384, + "vl_crop": "disabled", + "vl_upscale": "bicubic", + "image": [ + "11", + 0 + ] + }, + "class_type": "QwenEditConfigPreparer", + "_meta": { + "title": "Qwen Edit Config Preparer" + } + }, + "9": { + "inputs": { + "max_size": [ + "25", + 0 + ], + "image": [ + "11", + 0 + ] + }, + "class_type": "QwenEditAdaptiveLongestEdge", + "_meta": { + "title": "Qwen Edit Adaptive Longest Edge" + } + }, + "10": { + "inputs": { + "image": "cq5dam.web.hE7E3DA.1800.1800 - 2024-04-29T161212.795.jpg" + }, + "class_type": "LoadImage", + "_meta": { + "title": "加载图像" + } + }, + "11": { + "inputs": { + "image": "cq5dam.web.hE7E3DA.1800.1800 - 2024-04-29T161206.244.jpg" + }, + "class_type": "LoadImage", + "_meta": { + "title": "加载图像" + } + }, + "13": { + "inputs": { + "vae_name": "qwen_image_vae.safetensors" + }, + "class_type": "VAELoader", + "_meta": { + "title": "加载VAE" + } + }, + "14": { + "inputs": { + "prompt": "", + "return_full_refs_cond": true, + "instruction": "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "clip": [ + "38", + 0 + ], + "vae": [ + "13", + 0 + ], + "configs": [ + "5", + 0 + ] + }, + "class_type": "TextEncodeQwenImageEditPlusCustom_lrzjason", + "_meta": { + "title": "TextEncodeQwenImageEditPlusCustom lrzjason" + } + }, + "15": { + "inputs": { + "prompt": [ + "31", + 0 + ], + "return_full_refs_cond": true, + "instruction": "Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.", + "clip": [ + "38", + 0 + ], + "vae": [ + "13", + 0 + ], + "configs": [ + "5", + 0 + ] + }, + "class_type": "TextEncodeQwenImageEditPlusCustom_lrzjason", + "_meta": { + "title": "TextEncodeQwenImageEditPlusCustom lrzjason" + } + }, + "16": { + "inputs": { + "gguf_name": "FireRed-Image-Edit-1.1-Q4_0.gguf" + }, + "class_type": "LoaderGGUF", + "_meta": { + "title": "GGUF Loader" + } + }, + "17": { + "inputs": { + "lora_name": "FireRed-Image-Edit-1.0-Lightning-8steps-v1.0.safetensors", + "strength_model": 1, + "model": [ + "16", + 0 + ] + }, + "class_type": "LoraLoaderModelOnly", + "_meta": { + "title": "LoRA加载器(仅模型)" + } + }, + "19": { + "inputs": { + "image": [ + "1", + 0 + ], + "pad_info": [ + "7", + 0 + ] + }, + "class_type": "CropWithPadInfo", + "_meta": { + "title": "Crop With Pad Info" + } + }, + "20": { + "inputs": { + "max_size": [ + "25", + 0 + ], + "image": [ + "10", + 0 + ] + }, + "class_type": "QwenEditAdaptiveLongestEdge", + "_meta": { + "title": "Qwen Edit Adaptive Longest Edge" + } + }, + "21": { + "inputs": { + "samples1": [ + "15", + 1 + ], + "samples2": [ + "14", + 1 + ] + }, + "class_type": "LatentAdd", + "_meta": { + "title": "Latent相加" + } + }, + "22": { + "inputs": { + "seed": 1121572473225362, + "steps": 8, + "cfg": 1, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": [ + "17", + 0 + ], + "positive": [ + "15", + 0 + ], + "negative": [ + "14", + 0 + ], + "latent_image": [ + "28", + 0 + ] + }, + "class_type": "KSampler", + "_meta": { + "title": "K采样器" + } + }, + "25": { + "inputs": { + "Number": "1300" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "28": { + "inputs": { + "upscale_method": "nearest-exact", + "width": [ + "29", + 0 + ], + "height": [ + "30", + 0 + ], + "crop": "disabled", + "samples": [ + "21", + 0 + ] + }, + "class_type": "LatentUpscale", + "_meta": { + "title": "缩放Latent" + } + }, + "29": { + "inputs": { + "Number": "768" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "30": { + "inputs": { + "Number": "1024" + }, + "class_type": "Int", + "_meta": { + "title": "Int" + } + }, + "31": { + "inputs": { + "value": "图1的背景改成纯色深灰色,生成人物全身站立图,穿图2的衣服,穿图3的衣服。维持衣服材质。" + }, + "class_type": "PrimitiveStringMultiline", + "_meta": { + "title": "字符串(多行)" + } + }, + "32": { + "inputs": { + "upscale_method": "nearest-exact", + "width": [ + "29", + 0 + ], + "height": [ + "30", + 0 + ], + "crop": "center", + "image": [ + "19", + 0 + ] + }, + "class_type": "ImageScale", + "_meta": { + "title": "缩放图像" + } + }, + "33": { + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "32", + 0 + ] + }, + "class_type": "SaveImage", + "_meta": { + "title": "保存图像" + } + }, + "36": { + "inputs": { + "rgthree_comparer": { + "images": [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_olfct_00001_.png&type=temp&subfolder=&rand=0.5054960464066687" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_olfct_00002_.png&type=temp&subfolder=&rand=0.03696578228441516" + } + ] + }, + "image_a": [ + "32", + 0 + ], + "image_b": [ + "11", + 0 + ] + }, + "class_type": "Image Comparer (rgthree)", + "_meta": { + "title": "Image Comparer (rgthree)" + } + }, + "38": { + "inputs": { + "clip_name": "qwen_2.5_vl_7b_fp8_scaled.safetensors", + "type": "qwen_image", + "device": "default" + }, + "class_type": "CLIPLoader", + "_meta": { + "title": "加载CLIP" + } + } +} \ No newline at end of file diff --git a/change3/service3.py b/change3/service3.py index 03884b8..1a4c60a 100644 --- a/change3/service3.py +++ b/change3/service3.py @@ -27,7 +27,9 @@ from pydantic import BaseModel COMFYUI_URL = "http://127.0.0.1:8188" # COMFYUI_URL = "http://117.50.80.187:47697" -WORKFLOW_PATH = Path(__file__).parent / "change2_2_0308.json" +#WORKFLOW_PATH = Path(__file__).parent / "change2_2_0308.json" + +WORKFLOW_PATH = Path(__file__).parent / "change_fast3.json" # 节点 ID 映射 NODE_MODEL = "11" # 模特 diff --git a/change_app.py b/change_app.py index ddf8f45..966a90a 100644 --- a/change_app.py +++ b/change_app.py @@ -68,4 +68,4 @@ def change_cloth_base64(): if __name__ == '__main__': - app.run(host="0.0.0.0", port=28888, debug=True) + app.run(host="0.0.0.0", port=28889, debug=True) diff --git a/proxy/proxy.log b/proxy/proxy.log new file mode 100644 index 0000000..8ce6a51 --- /dev/null +++ b/proxy/proxy.log @@ -0,0 +1,497 @@ +[startup] worker-0 started → http://117.50.89.68:28889 +[startup] worker-1 started → http://117.50.226.22:28889 +[startup] proxy listening on 0.0.0.0:28888 +[startup] queue-0 → http://117.50.89.68:28889 +[startup] queue-1 → http://117.50.226.22:28889 + * Serving Flask app 'proxy' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:28888 + * Running on http://10.60.190.115:28888 +Press CTRL+C to quit +221.218.70.61 - - [19/Mar/2026 22:33:30] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:33:32] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:35:17] "GET / HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:35:17] "GET /favicon.ico HTTP/1.1" 404 - +221.218.70.61 - - [19/Mar/2026 22:40:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:41:01] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:41:26] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:41:49] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:42:14] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:42:37] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:42:58] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:43:23] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:43:50] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:44:14] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:44:49] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:45:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:45:36] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:45:55] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:46:26] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:46:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:47:14] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:47:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:47:50] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 22:48:15] "POST /change_cloth_base64 HTTP/1.1" 200 - +[startup] worker-0 started → http://117.50.89.68:28889 +[startup] worker-1 started → http://117.50.226.22:28889 +[startup] proxy listening on 0.0.0.0:28888 +[startup] queue-0 → http://117.50.89.68:28889 +[startup] queue-1 → http://117.50.226.22:28889 + * Serving Flask app 'proxy' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:28888 + * Running on http://10.60.190.115:28888 +Press CTRL+C to quit +[startup] worker-0 started → http://117.50.89.68:28889 +[startup] worker-1 started → http://117.50.226.22:28889 +[startup] proxy listening on 0.0.0.0:28888 +[startup] queue-0 → http://117.50.89.68:28889 +[startup] queue-1 → http://117.50.226.22:28889 + * Serving Flask app 'proxy' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:28888 + * Running on http://10.60.190.115:28888 +Press CTRL+C to quit +221.218.70.61 - - [19/Mar/2026 23:00:07] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:00:15] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:00:18] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:00:33] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:00:42] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:00:57] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:01] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:17] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:25] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:45] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:01:59] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:02:06] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:02:20] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:02:22] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:02:43] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:02:50] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:03:03] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:03:16] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:05:19] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:05:36] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:06:01] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:06:15] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:06:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:06:34] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:06:57] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:07:00] "POST /change_cloth_base64 HTTP/1.1" 200 - +[proxy] 2026-03-19 22:59:53 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[proxy] 2026-03-19 22:59:53 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 22:59:53 end=2026-03-19 23:00:07 | 14.45s | status=200 +[proxy] 2026-03-19 23:00:07 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 22:59:53 end=2026-03-19 23:00:15 | 22.45s | status=200 +[proxy] 2026-03-19 23:00:16 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:00:07 end=2026-03-19 23:00:18 | 10.49s | status=200 +[proxy] 2026-03-19 23:00:18 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:00:18 end=2026-03-19 23:00:33 | 14.40s | status=200 +[proxy] 2026-03-19 23:00:33 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:00:16 end=2026-03-19 23:00:42 | 26.47s | status=200 +[proxy] 2026-03-19 23:00:42 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:00:42 end=2026-03-19 23:00:57 | 14.54s | status=200 +[proxy] 2026-03-19 23:00:57 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:00:42 end=2026-03-19 23:01:01 | 18.41s | status=200 +[proxy] 2026-03-19 23:01:01 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:01:01 end=2026-03-19 23:01:17 | 16.44s | status=200 +[proxy] 2026-03-19 23:01:17 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:01:01 end=2026-03-19 23:01:25 | 24.45s | status=200 +[proxy] 2026-03-19 23:01:26 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:01:17 end=2026-03-19 23:01:38 | 20.39s | status=200 +[proxy] 2026-03-19 23:01:38 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:01:26 end=2026-03-19 23:01:45 | 18.63s | status=200 +[proxy] 2026-03-19 23:01:45 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:01:38 end=2026-03-19 23:01:59 | 20.43s | status=200 +[proxy] 2026-03-19 23:01:59 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:01:45 end=2026-03-19 23:02:06 | 20.54s | status=200 +[proxy] 2026-03-19 23:02:06 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:01:59 end=2026-03-19 23:02:20 | 20.43s | status=200 +[proxy] 2026-03-19 23:02:20 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:02:06 end=2026-03-19 23:02:22 | 16.47s | status=200 +[proxy] 2026-03-19 23:02:23 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:02:20 end=2026-03-19 23:02:43 | 22.45s | status=200 +[proxy] 2026-03-19 23:02:43 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:02:23 end=2026-03-19 23:02:50 | 26.49s | status=200 +[proxy] 2026-03-19 23:02:51 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:02:43 end=2026-03-19 23:03:03 | 20.44s | status=200 +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:02:51 end=2026-03-19 23:03:16 | 24.55s | status=200 +[proxy] 2026-03-19 23:04:58 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:04:58 end=2026-03-19 23:05:19 | 20.39s | status=200 +[proxy] 2026-03-19 23:05:19 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:05:19 end=2026-03-19 23:05:36 | 16.50s | status=200 +[proxy] 2026-03-19 23:05:36 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[proxy] 2026-03-19 23:06:00 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:05:36 end=2026-03-19 23:06:01 | 24.47s | status=200 +[proxy] 2026-03-19 23:06:01 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:06:00 end=2026-03-19 23:06:15 | 14.39s | status=200 +[proxy] 2026-03-19 23:06:15 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:06:01 end=2026-03-19 23:06:31 | 30.47s | status=200 +[proxy] 2026-03-19 23:06:32 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:06:15 end=2026-03-19 23:06:34 | 18.45s | status=200 +[proxy] 2026-03-19 23:06:34 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:06:34 end=2026-03-19 23:06:57 | 22.47s | status=200 +[proxy] 2026-03-19 23:06:57 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:06:32 end=2026-03-19 23:07:00 | 28.45s | status=200 +[proxy] 2026-03-19 23:07:01 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +221.218.70.61 - - [19/Mar/2026 23:07:27] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:07:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:07:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:07:58] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:08:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:08:23] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:08:35] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:08:54] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:03] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:11] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:29] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:44] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:45] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:09:58] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:10:15] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:10:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:10:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:10:58] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:11:00] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:11:21] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:11:27] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:11:48] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:11:50] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:12:06] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:12:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:12:29] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:12:29] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:12:56] "POST /change_cloth_base64 HTTP/1.1" 200 - +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:07:00 end=2026-03-19 23:07:27 | 26.41s | status=200 +[proxy] 2026-03-19 23:07:27 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:07:01 end=2026-03-19 23:07:31 | 30.41s | status=200 +[proxy] 2026-03-19 23:07:31 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:07:27 end=2026-03-19 23:07:47 | 20.43s | status=200 +[proxy] 2026-03-19 23:07:48 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:07:31 end=2026-03-19 23:07:58 | 26.42s | status=200 +[proxy] 2026-03-19 23:07:59 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:07:48 end=2026-03-19 23:08:10 | 22.47s | status=200 +[proxy] 2026-03-19 23:08:10 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:07:59 end=2026-03-19 23:08:23 | 24.58s | status=200 +[proxy] 2026-03-19 23:08:24 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:08:10 end=2026-03-19 23:08:35 | 24.40s | status=200 +[proxy] 2026-03-19 23:08:35 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:08:24 end=2026-03-19 23:08:54 | 30.44s | status=200 +[proxy] 2026-03-19 23:08:55 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:08:35 end=2026-03-19 23:09:03 | 28.44s | status=200 +[proxy] 2026-03-19 23:09:04 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:08:55 end=2026-03-19 23:09:11 | 16.36s | status=200 +[proxy] 2026-03-19 23:09:12 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:09:04 end=2026-03-19 23:09:29 | 24.67s | status=200 +[proxy] 2026-03-19 23:09:29 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:09:12 end=2026-03-19 23:09:44 | 32.45s | status=200 +[proxy] 2026-03-19 23:09:44 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:09:29 end=2026-03-19 23:09:45 | 16.42s | status=200 +[proxy] 2026-03-19 23:09:46 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:09:46 end=2026-03-19 23:09:58 | 12.41s | status=200 +[proxy] 2026-03-19 23:09:58 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:09:44 end=2026-03-19 23:10:15 | 30.57s | status=200 +[proxy] 2026-03-19 23:10:15 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:10:15 end=2026-03-19 23:10:31 | 16.40s | status=200 +[proxy] 2026-03-19 23:10:32 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:10:15 end=2026-03-19 23:10:38 | 22.48s | status=200 +[proxy] 2026-03-19 23:10:38 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:10:38 end=2026-03-19 23:10:58 | 20.40s | status=200 +[proxy] 2026-03-19 23:10:59 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:10:32 end=2026-03-19 23:11:00 | 28.41s | status=200 +[proxy] 2026-03-19 23:11:01 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:11:00 end=2026-03-19 23:11:21 | 20.44s | status=200 +[proxy] 2026-03-19 23:11:21 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:11:01 end=2026-03-19 23:11:27 | 26.47s | status=200 +[proxy] 2026-03-19 23:11:28 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:11:28 end=2026-03-19 23:11:48 | 20.41s | status=200 +[proxy] 2026-03-19 23:11:48 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:11:21 end=2026-03-19 23:11:50 | 28.45s | status=200 +[proxy] 2026-03-19 23:11:50 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:11:50 end=2026-03-19 23:12:06 | 16.41s | status=200 +[proxy] 2026-03-19 23:12:06 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:11:50 end=2026-03-19 23:12:10 | 20.44s | status=200 +[proxy] 2026-03-19 23:12:11 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:12:06 end=2026-03-19 23:12:29 | 22.45s | status=200 +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:12:11 end=2026-03-19 23:12:29 | 18.38s | status=200 +[proxy] 2026-03-19 23:12:29 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[proxy] 2026-03-19 23:12:30 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:12:29 end=2026-03-19 23:12:56 | 26.45s | status=200 +221.218.70.61 - - [19/Mar/2026 23:13:03] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:13:17] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:13:34] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:13:48] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:13:52] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:14:03] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:14:11] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:14:22] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:14:32] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:14:45] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:03] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:07] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:22] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:26] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:40] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:15:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:16:02] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:16:09] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:16:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:17:07] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:17:36] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:26:15] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:26:36] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:26:59] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:27:30] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:27:53] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:28:12] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:28:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +[proxy] 2026-03-19 23:12:57 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:12:30 end=2026-03-19 23:13:03 | 32.68s | status=200 +[proxy] 2026-03-19 23:13:03 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:12:57 end=2026-03-19 23:13:17 | 20.43s | status=200 +[proxy] 2026-03-19 23:13:18 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:13:03 end=2026-03-19 23:13:34 | 30.68s | status=200 +[proxy] 2026-03-19 23:13:34 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:13:18 end=2026-03-19 23:13:48 | 30.51s | status=200 +[proxy] 2026-03-19 23:13:49 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:13:34 end=2026-03-19 23:13:52 | 18.38s | status=200 +[proxy] 2026-03-19 23:13:53 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:13:49 end=2026-03-19 23:14:03 | 14.38s | status=200 +[proxy] 2026-03-19 23:14:03 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:13:53 end=2026-03-19 23:14:11 | 18.41s | status=200 +[proxy] 2026-03-19 23:14:11 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:14:03 end=2026-03-19 23:14:22 | 18.49s | status=200 +[proxy] 2026-03-19 23:14:22 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:14:11 end=2026-03-19 23:14:32 | 20.40s | status=200 +[proxy] 2026-03-19 23:14:32 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:14:22 end=2026-03-19 23:14:45 | 22.42s | status=200 +[proxy] 2026-03-19 23:14:45 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:14:32 end=2026-03-19 23:15:03 | 30.46s | status=200 +[proxy] 2026-03-19 23:15:03 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:14:45 end=2026-03-19 23:15:07 | 22.46s | status=200 +[proxy] 2026-03-19 23:15:08 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:15:03 end=2026-03-19 23:15:21 | 18.42s | status=200 +[proxy] 2026-03-19 23:15:22 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:15:08 end=2026-03-19 23:15:26 | 18.39s | status=200 +[proxy] 2026-03-19 23:15:27 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:15:22 end=2026-03-19 23:15:40 | 18.40s | status=200 +[proxy] 2026-03-19 23:15:41 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:15:27 end=2026-03-19 23:15:47 | 20.57s | status=200 +[proxy] 2026-03-19 23:15:48 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:15:48 end=2026-03-19 23:16:02 | 14.36s | status=200 +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:15:41 end=2026-03-19 23:16:09 | 28.43s | status=200 +[proxy] 2026-03-19 23:16:10 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:16:10 end=2026-03-19 23:16:38 | 28.43s | status=200 +[proxy] 2026-03-19 23:16:38 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:16:38 end=2026-03-19 23:17:07 | 28.48s | status=200 +[proxy] 2026-03-19 23:17:07 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:17:07 end=2026-03-19 23:17:36 | 28.45s | status=200 +[proxy] 2026-03-19 23:25:53 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:25:53 end=2026-03-19 23:26:15 | 22.48s | status=200 +[proxy] 2026-03-19 23:26:16 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:26:16 end=2026-03-19 23:26:36 | 20.49s | status=200 +[proxy] 2026-03-19 23:26:37 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:26:37 end=2026-03-19 23:26:59 | 22.46s | status=200 +[proxy] 2026-03-19 23:27:00 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:27:00 end=2026-03-19 23:27:30 | 30.47s | status=200 +[proxy] 2026-03-19 23:27:30 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:27:30 end=2026-03-19 23:27:53 | 22.42s | status=200 +[proxy] 2026-03-19 23:27:53 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:27:53 end=2026-03-19 23:28:12 | 18.50s | status=200 +[proxy] 2026-03-19 23:28:12 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:28:12 end=2026-03-19 23:28:31 | 18.41s | status=200 +221.218.70.61 - - [19/Mar/2026 23:28:52] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:29:12] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:29:29] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:30:00] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:30:17] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:30:40] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:31:09] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:31:30] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:31:51] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:32:18] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:32:40] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:33:11] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:33:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:33:40] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:34:01] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:34:09] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:34:22] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:34:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:34:43] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:04] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:05] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:26] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:36] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:35:51] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:36:07] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:36:12] "POST /change_cloth_base64 HTTP/1.1" 200 - +[proxy] 2026-03-19 23:28:31 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:28:31 end=2026-03-19 23:28:52 | 20.46s | status=200 +[proxy] 2026-03-19 23:28:52 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:28:52 end=2026-03-19 23:29:12 | 20.42s | status=200 +[proxy] 2026-03-19 23:29:13 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:29:13 end=2026-03-19 23:29:29 | 16.64s | status=200 +[proxy] 2026-03-19 23:29:30 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:29:30 end=2026-03-19 23:30:00 | 30.65s | status=200 +[proxy] 2026-03-19 23:30:01 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:30:01 end=2026-03-19 23:30:17 | 16.60s | status=200 +[proxy] 2026-03-19 23:30:18 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:30:18 end=2026-03-19 23:30:40 | 22.70s | status=200 +[proxy] 2026-03-19 23:30:41 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:30:41 end=2026-03-19 23:31:09 | 28.41s | status=200 +[proxy] 2026-03-19 23:31:10 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:31:10 end=2026-03-19 23:31:30 | 20.44s | status=200 +[proxy] 2026-03-19 23:31:31 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:31:31 end=2026-03-19 23:31:51 | 20.47s | status=200 +[proxy] 2026-03-19 23:31:51 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:31:51 end=2026-03-19 23:32:18 | 26.45s | status=200 +[proxy] 2026-03-19 23:32:18 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:32:18 end=2026-03-19 23:32:40 | 22.43s | status=200 +[proxy] 2026-03-19 23:32:41 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:32:41 end=2026-03-19 23:33:11 | 30.61s | status=200 +[proxy] 2026-03-19 23:33:12 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[proxy] 2026-03-19 23:33:17 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:33:17 end=2026-03-19 23:33:38 | 20.47s | status=200 +[proxy] 2026-03-19 23:33:38 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:33:12 end=2026-03-19 23:33:40 | 28.47s | status=200 +[proxy] 2026-03-19 23:33:41 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:33:40 end=2026-03-19 23:34:01 | 20.43s | status=200 +[proxy] 2026-03-19 23:34:01 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:33:41 end=2026-03-19 23:34:09 | 28.40s | status=200 +[proxy] 2026-03-19 23:34:10 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:34:01 end=2026-03-19 23:34:22 | 20.46s | status=200 +[proxy] 2026-03-19 23:34:22 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:34:10 end=2026-03-19 23:34:38 | 28.51s | status=200 +[proxy] 2026-03-19 23:34:39 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:34:22 end=2026-03-19 23:34:43 | 20.45s | status=200 +[proxy] 2026-03-19 23:34:43 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:34:43 end=2026-03-19 23:35:04 | 20.44s | status=200 +[proxy] 2026-03-19 23:35:04 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:34:39 end=2026-03-19 23:35:05 | 26.44s | status=200 +[proxy] 2026-03-19 23:35:06 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:35:05 end=2026-03-19 23:35:26 | 20.49s | status=200 +[proxy] 2026-03-19 23:35:26 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:35:06 end=2026-03-19 23:35:36 | 30.70s | status=200 +[proxy] 2026-03-19 23:35:37 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:35:26 end=2026-03-19 23:35:47 | 20.41s | status=200 +[proxy] 2026-03-19 23:35:47 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:35:37 end=2026-03-19 23:35:51 | 14.38s | status=200 +[proxy] 2026-03-19 23:35:51 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:35:47 end=2026-03-19 23:36:07 | 20.44s | status=200 +[proxy] 2026-03-19 23:36:08 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:35:51 end=2026-03-19 23:36:12 | 20.41s | status=200 +[proxy] 2026-03-19 23:36:12 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +221.218.70.61 - - [19/Mar/2026 23:36:28] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:36:41] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:36:49] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:36:57] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:37:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:37:18] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:37:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:37:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:37:52] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:38:13] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:38:35] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:38:56] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:39:17] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:39:38] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:39:59] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:40:20] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:40:41] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:41:02] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:41:23] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:41:44] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:42:05] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:42:26] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:42:47] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:43:08] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:43:28] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:43:49] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:44:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:44:31] "POST /change_cloth_base64 HTTP/1.1" 200 - +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:36:08 end=2026-03-19 23:36:28 | 20.43s | status=200 +[proxy] 2026-03-19 23:36:29 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:36:12 end=2026-03-19 23:36:41 | 28.43s | status=200 +[proxy] 2026-03-19 23:36:41 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:36:29 end=2026-03-19 23:36:49 | 20.43s | status=200 +[proxy] 2026-03-19 23:36:50 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:36:41 end=2026-03-19 23:36:57 | 16.42s | status=200 +[proxy] 2026-03-19 23:36:58 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:36:50 end=2026-03-19 23:37:10 | 20.55s | status=200 +[proxy] 2026-03-19 23:37:11 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:36:58 end=2026-03-19 23:37:18 | 20.44s | status=200 +[proxy] 2026-03-19 23:37:19 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:37:11 end=2026-03-19 23:37:31 | 20.45s | status=200 +[proxy] 2026-03-19 23:37:31 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:37:19 end=2026-03-19 23:37:47 | 28.46s | status=200 +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:37:31 end=2026-03-19 23:37:52 | 20.45s | status=200 +[proxy] 2026-03-19 23:37:52 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:37:52 end=2026-03-19 23:38:13 | 20.68s | status=200 +[proxy] 2026-03-19 23:38:14 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:38:14 end=2026-03-19 23:38:35 | 20.49s | status=200 +[proxy] 2026-03-19 23:38:35 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:38:35 end=2026-03-19 23:38:56 | 20.50s | status=200 +[proxy] 2026-03-19 23:38:56 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:38:56 end=2026-03-19 23:39:17 | 20.68s | status=200 +[proxy] 2026-03-19 23:39:18 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:39:18 end=2026-03-19 23:39:38 | 20.60s | status=200 +[proxy] 2026-03-19 23:39:39 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:39:39 end=2026-03-19 23:39:59 | 20.47s | status=200 +[proxy] 2026-03-19 23:40:00 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:40:00 end=2026-03-19 23:40:20 | 20.49s | status=200 +[proxy] 2026-03-19 23:40:20 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:40:20 end=2026-03-19 23:40:41 | 20.44s | status=200 +[proxy] 2026-03-19 23:40:41 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:40:41 end=2026-03-19 23:41:02 | 20.47s | status=200 +[proxy] 2026-03-19 23:41:02 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:41:02 end=2026-03-19 23:41:23 | 20.47s | status=200 +[proxy] 2026-03-19 23:41:23 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:41:23 end=2026-03-19 23:41:44 | 20.57s | status=200 +[proxy] 2026-03-19 23:41:44 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:41:44 end=2026-03-19 23:42:05 | 20.44s | status=200 +[proxy] 2026-03-19 23:42:05 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:42:05 end=2026-03-19 23:42:26 | 20.44s | status=200 +[proxy] 2026-03-19 23:42:26 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:42:26 end=2026-03-19 23:42:47 | 20.45s | status=200 +[proxy] 2026-03-19 23:42:47 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:42:47 end=2026-03-19 23:43:08 | 20.45s | status=200 +[proxy] 2026-03-19 23:43:08 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:43:08 end=2026-03-19 23:43:28 | 20.46s | status=200 +[proxy] 2026-03-19 23:43:29 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:43:29 end=2026-03-19 23:43:49 | 20.43s | status=200 +[proxy] 2026-03-19 23:43:50 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.89.68:28889/change_cloth_base64 | backend=http://117.50.89.68:28889 | start=2026-03-19 23:43:50 end=2026-03-19 23:44:10 | 20.56s | status=200 +[proxy] 2026-03-19 23:44:11 | 221.218.70.61 | queued → queue-1 (http://117.50.226.22:28889) | POST /change_cloth_base64? +[proxy] 2026-03-19 23:44:15 | 221.218.70.61 | queued → queue-0 (http://117.50.89.68:28889) | POST /change_cloth_base64? +[worker] POST http://117.50.226.22:28889/change_cloth_base64 | backend=http://117.50.226.22:28889 | start=2026-03-19 23:44:11 end=2026-03-19 23:44:31 | 20.47s | status=200 +221.218.70.61 - - [19/Mar/2026 23:44:34] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:44:52] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:04] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:13] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:25] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:34] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:48] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:45:55] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:46:13] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:46:16] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:46:37] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:46:41] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:46:56] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:47:02] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:47:20] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:47:23] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:47:43] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:47:44] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:48:05] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:48:10] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:48:30] "POST /change_cloth_base64 HTTP/1.1" 200 - +221.218.70.61 - - [19/Mar/2026 23:48:39] "POST /change_cloth_base64 HTTP/1.1" 200 - diff --git a/proxy/proxy.pid b/proxy/proxy.pid new file mode 100644 index 0000000..10347e1 --- /dev/null +++ b/proxy/proxy.pid @@ -0,0 +1 @@ +10266 diff --git a/proxy/proxy.py b/proxy/proxy.py new file mode 100644 index 0000000..2fa15fa --- /dev/null +++ b/proxy/proxy.py @@ -0,0 +1,118 @@ +from flask import Flask, request, Response, send_from_directory +import itertools +import threading +import queue +import requests +import time +import os + +app = Flask(__name__, static_folder=None) + +BACKENDS = [ + "http://117.50.89.68:28889", + "http://117.50.226.22:28889", +] + +# One queue per backend, auto-sized from BACKENDS +queues = [queue.Queue() for _ in BACKENDS] +_rr = itertools.count() + +EXCLUDED_REQ_HEADERS = {"host", "content-length", "transfer-encoding", "connection"} +EXCLUDED_RESP_HEADERS = {"content-encoding", "content-length", "transfer-encoding", "connection"} + +STATIC_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "static") + + +def _now(): + return time.strftime("%Y-%m-%d %H:%M:%S") + + +def worker(q: queue.Queue, backend_url: str): + """Single worker thread per queue — processes requests one at a time.""" + while True: + task = q.get() + if task is None: + break + + method, url, headers, data, result_event, result_holder = task + t_start = time.time() + start_ts = _now() + + try: + resp = requests.request( + method=method, + url=url, + headers=headers, + data=data, + allow_redirects=False, + timeout=60, + stream=True, + ) + result_holder["response"] = resp + result_holder["error"] = None + except Exception as e: + result_holder["response"] = None + result_holder["error"] = str(e) + finally: + elapsed = time.time() - t_start + end_ts = _now() + status = resp.status_code if result_holder.get("response") else "ERR" + print( + f"[worker] {method} {url} | backend={backend_url} | " + f"start={start_ts} end={end_ts} | " + f"{elapsed:.2f}s | status={status}" + ) + result_event.set() + q.task_done() + + +# Start one worker thread per queue +for i, backend in enumerate(BACKENDS): + t = threading.Thread(target=worker, args=(queues[i], backend), daemon=True, name=f"worker-{i}") + t.start() + print(f"[startup] worker-{i} started → {backend}") + + +@app.route("/", methods=["GET"]) +def index(): + return send_from_directory(STATIC_DIR, "index.html") + + +@app.route("/", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]) +def proxy(path): + idx = next(_rr) % len(queues) + + # Build the full target URL (preserves query string) + target_url = BACKENDS[idx] + request.full_path.rstrip("?") + + # Filter hop-by-hop and host headers before forwarding + headers = {k: v for k, v in request.headers.items() if k.lower() not in EXCLUDED_REQ_HEADERS} + + result_event = threading.Event() + result_holder: dict = {} + + task = (request.method, target_url, headers, request.get_data(), result_event, result_holder) + queues[idx].put(task) + client_ip = request.remote_addr + print(f"[proxy] {_now()} | {client_ip} | queued → queue-{idx} ({BACKENDS[idx]}) | {request.method} {request.full_path}") + + # Block until the worker finishes (or timeout) + if not result_event.wait(timeout=65): + print(f"[proxy] {_now()} | {client_ip} | TIMEOUT → queue-{idx} ({BACKENDS[idx]}) | {request.method} {request.full_path}") + return Response("Gateway Timeout", status=504) + + if result_holder.get("error"): + print(f"[proxy] {_now()} | {client_ip} | ERROR → {result_holder['error']}") + return Response(f"Bad Gateway: {result_holder['error']}", status=502) + + resp = result_holder["response"] + resp_headers = {k: v for k, v in resp.headers.items() if k.lower() not in EXCLUDED_RESP_HEADERS} + + return Response(resp.content, status=resp.status_code, headers=resp_headers) + + +if __name__ == "__main__": + print(f"[startup] proxy listening on 0.0.0.0:28888") + for i, b in enumerate(BACKENDS): + print(f"[startup] queue-{i} → {b}") + app.run(host="0.0.0.0", port=28888, threaded=True) diff --git a/proxy/start.sh b/proxy/start.sh new file mode 100755 index 0000000..1eb3d92 --- /dev/null +++ b/proxy/start.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +cd "$(dirname "$0")" + +PID_FILE=proxy.pid +LOG_FILE=proxy.log + +if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then + echo "already running (pid $(cat "$PID_FILE"))" + exit 1 +fi + +nohup python3 proxy.py >> "$LOG_FILE" 2>&1 & +echo $! > "$PID_FILE" +echo "started (pid $!) → log: $LOG_FILE" diff --git a/proxy/static/index.html b/proxy/static/index.html new file mode 100644 index 0000000..76ad9eb --- /dev/null +++ b/proxy/static/index.html @@ -0,0 +1,374 @@ + + + + + + AI 换装测试 + + + +

AI 换装测试

+

上传模特和衣服图片,调用 /change_cloth_base64 接口测试

+ +
+ +
+ + +
🧍
+
模特图片
+
human_img · 必填
+ 模特预览 +
+ + +
+ + +
👕
+
上衣图片
+
cloth_img · 必填
+ 上衣预览 +
+ + +
+ + +
👖
+
裤子图片
+
kuzi_img · 可选
+ 有则走 8888 服务,无则走 8889 + 裤子预览 +
+
+ + +
+ +
+
换装结果
+ 换装结果 + +
+ +
+
接口原始响应(data 字段已截断)
+

+  
+ + + + diff --git a/proxy/stop.sh b/proxy/stop.sh new file mode 100755 index 0000000..e90e1fe --- /dev/null +++ b/proxy/stop.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +cd "$(dirname "$0")" + +PID_FILE=proxy.pid + +if [ ! -f "$PID_FILE" ]; then + echo "not running (no pid file)" + exit 1 +fi + +PID=$(cat "$PID_FILE") +if kill -0 "$PID" 2>/dev/null; then + kill "$PID" + rm -f "$PID_FILE" + echo "stopped (pid $PID)" +else + rm -f "$PID_FILE" + echo "stale pid file removed (process $PID not found)" +fi