File size: 2,262 Bytes
31f8b71
a399ffc
31f8b71
c90e8d6
a399ffc
31f8b71
 
 
c90e8d6
 
 
3d01749
 
 
8064459
 
 
5f35f33
3d01749
31f8b71
 
5f35f33
31f8b71
3d01749
31f8b71
 
 
a804043
 
 
31f8b71
b5bf896
c90e8d6
31f8b71
 
c90e8d6
62cc455
 
8b87cd1
 
 
7220be7
62cc455
31f8b71
b77e67a
 
62cc455
 
 
31f8b71
b77e67a
c90e8d6
b77e67a
 
7220be7
c90e8d6
b77e67a
 
31f8b71
b5bf896
b77e67a
c90e8d6
8b87cd1
c90e8d6
e406364
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import os
import io
import base64
import traceback
from PIL import Image
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

from huggingface_hub import hf_hub_download
from pipeline import IPFacePlusV2Pipeline

# ✅ Hugging Faceのキャッシュ・設定ディレクトリを/tmpに変更
os.environ["HF_HOME"] = "/tmp/hf"
os.environ["HF_HUB_CACHE"] = "/tmp/hf/hub"
os.environ["HUGGINGFACE_HUB_CACHE"] = "/tmp/hf/hub"
os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf/transformers"
os.environ["XDG_CACHE_HOME"] = "/tmp/hf/xdg"

# ✅ トークンを取得(SpacesのSecretsに設定してあるもの)
hf_token = os.environ.get("HUGGINGFACE_HUB_TOKEN")
if not hf_token:
    raise ValueError("環境変数 'HUGGINGFACE_HUB_TOKEN' が設定されていません。")

# ✅ モデルファイルのダウンロード
model_path = hf_hub_download(
    repo_id="revi13/ip-adapter-faceid-private",
    filename="ip-adapter-faceid-plusv2_sd15.bin",
    local_dir="/tmp/hf/models",  # 保存先を手動指定
    local_dir_use_symlinks=False,  # シンボリックリンクではなく実体保存
    token=os.environ["HUGGINGFACE_HUB_TOKEN"]
)

# ✅ パイプライン初期化
pipeline = IPFacePlusV2Pipeline(model_path)

# ✅ FastAPI アプリ作成
app = FastAPI()

@app.get("/")
def root():
    return {"status": "ok"}

@app.post("/generate")
async def generate_image_api(request: Request):
    print("✅ [START] /generate API called")  # ← 呼び出し確認
    
    try:
        body = await request.json()
        base64_image = body.get("image")
        prompt = body.get("prompt", "portrait")
        print(f"🔧 Received prompt: {prompt[:30]}...")  # プロンプト確認

        print("🚀 Start generating image...")
        
        image_base64 = pipeline.generate_image(base64_image, prompt)

        print("✅ Image generation complete")
        
        return JSONResponse(content={"success": True, "image_base64": image_base64})
    except Exception as e:
        print(f"❌ Exception occurred: {str(e)}")
        print("=== ERROR OCCURRED ===")
        traceback.print_exc()
        print("======================")
        return JSONResponse(status_code=500, content={"success": False, "error": str(e)})