# 🎭 Character Studio — คู่มือภาษาไทย Space รวมโมเดลสร้างตัวละครหลายตัวไว้ใน UI เดียว ทำงานบน **ZeroGPU** เลือกโมเดลจากรายการ → พิมพ์ prompt → (ถ้าต้องการ) ใส่รูปต้นแบบ → กด Generate --- ## 1) วิธีนำขึ้น Hugging Face 1. สร้าง Space ใหม่: https://huggingface.co/new-space - **SDK = Gradio** - **Hardware = ZeroGPU** (Nvidia, dynamic) 2. อัปโหลดไฟล์ทั้งหมดในโฟลเดอร์นี้ (`app.py`, `pipeline_manager.py`, `models.json`, `requirements.txt`, `README.md`) ขึ้นไปที่ root ของ Space - ผ่านเว็บ (ลากวาง) หรือผ่าน git: ```bash git clone https://huggingface.co/spaces// # คัดลอกไฟล์ในโฟลเดอร์นี้เข้าไป แล้ว git add . && git commit -m "init character studio" && git push ``` 3. ไปที่ **Settings → Variables and secrets** ใส่ค่า (เท่าที่จำเป็น): - `HF_TOKEN` — เฉพาะโมเดล gated เช่น FLUX.1-dev - `CIVITAI_TOKEN` — เฉพาะเมื่อโหลดจากลิงก์ Civitai --- ## 2) เพิ่ม / ลบ / ปิดโมเดล (แก้ `models.json` อย่างเดียว) แก้ไฟล์ `models.json` แล้วกดปุ่ม **🔄 Reload models** ใน UI (หรือ restart Space) ### โครงสร้างแต่ละโมเดล | field | ความหมาย | |---|---| | `id` | รหัสไม่ซ้ำ (อังกฤษ-ขีดกลาง) | | `label` | ชื่อที่โชว์ใน UI | | `base` | `"sd15"` / `"sdxl"` / `"flux"` — **สำคัญมาก** กำหนดว่าโหมดไหนใช้ได้ | | `type` | `"checkpoint"` (โมเดลเต็ม) หรือ `"lora"` | | `repo_id` | repo บน HF (สำหรับ checkpoint) หรือ **base checkpoint** (สำหรับ lora) | | `single_file_url` | ลิงก์ `.safetensors` โดยตรง เช่น Civitai (ใช้แทน repo_id ได้) | | `lora_repo_id` / `lora_weight_name` | สำหรับ LoRA ที่อยู่บน HF | | `lora_url` | สำหรับ LoRA จาก Civitai (ลิงก์ download) | | `lora_scale` | น้ำหนัก LoRA เช่น 0.8 | | `trigger` | คำ trigger ที่จะเติมหน้า prompt อัตโนมัติ | | `recommended_prompt` | prompt ตัวอย่าง (โชว์เป็น placeholder) | | `negative_prompt` | negative เริ่มต้น | | `default_steps` / `default_guidance` | ค่าเริ่มต้นเวลาเลือกโมเดลนี้ | | `enabled` | `true`/`false` ปิดชั่วคราวได้โดยไม่ต้องลบ | ### ตัวอย่าง — checkpoint จาก Civitai (SD1.5) ```json { "id": "asian-realistic-v6", "label": "AsianRealistic SDLife V6 (SD1.5)", "base": "sd15", "type": "checkpoint", "repo_id": null, "single_file_url": "https://civitai.com/api/download/models/130072", "default_steps": 28, "default_guidance": 6.5, "enabled": true } ``` > ต้องใส่ `CIVITAI_TOKEN` ใน Secrets ด้วย ### ตัวอย่าง — LoRA จาก Civitai (วางบน base SD1.5) ```json { "id": "asian-girls-face", "label": "Asian Girls Face (LoRA)", "base": "sd15", "type": "lora", "repo_id": "stable-diffusion-v1-5/stable-diffusion-v1-5", "lora_url": "https://civitai.com/api/download/models/67980", "lora_scale": 0.8, "enabled": true } ``` ### ตัวอย่าง — โมเดลบน HF (SDXL) ```json { "id": "my-sdxl", "label": "My SDXL model", "base": "sdxl", "type": "checkpoint", "repo_id": "author/my-sdxl-repo", "default_steps": 30, "default_guidance": 6.0, "enabled": true } ``` **ลบโมเดล** = ลบ block นั้นออกจาก array `models` หรือตั้ง `"enabled": false` --- ## 3) โหมดรูปต้นแบบ (Input mode) | โหมด | ทำอะไร | ใช้กับ base | |---|---|---| | Text → Image | สร้างจาก prompt อย่างเดียว | ทุก base | | Image → Image | แปลงรูปเดิม (ปรับ denoise) | ทุก base | | IP-Adapter | ดึงสไตล์/องค์ประกอบจากรูป | sd15, sdxl | | Face identity | ล็อกใบหน้าจากรูปต้นแบบ (FaceID) | sd15, sdxl | > FLUX รองรับเฉพาะ txt2img / img2img (IP-Adapter/FaceID ของ FLUX ยังไม่รวมในเวอร์ชันนี้) --- ## 4) ข้อควรรู้เรื่อง ZeroGPU - โมเดลใหญ่จะถูกเก็บทีละตัว สลับโมเดล = โหลดใหม่ (ครั้งแรกช้าหน่อย) - หนึ่งครั้ง generate จำกัดเวลา GPU ~120 วินาที (ปรับใน `@spaces.GPU(duration=...)`) - โมเดล Civitai/checkpoint เต็มก้อนใหญ่ ดาวน์โหลดครั้งแรกใช้เวลา — ใจเย็น --- ## 5) การใช้งานอย่างรับผิดชอบ เครื่องมือนี้สำหรับงานสร้างสรรค์ตัวละครต้นฉบับ/งานที่ได้รับอนุญาต **อย่าใช้โหมด Face identity สร้างภาพบุคคลจริงโดยไม่ได้รับความยินยอม**