chatQwenne / flux_avatar_manager.py
K00B404's picture
Update flux_avatar_manager.py
0e940c7 verified
# filename: flux_avatar_manager.py
import os
from pathlib import Path
from PIL import Image
from huggingface_hub import HfApi
from flux_client_wrapper import FluxImageGenerator
class AvatarManager:
def __init__(
self,
hf_space_id="K00B404/chatQwenne",
hf_folder="chatbot_images",
initial_prompt="a photo realistic fullbody ,head to toe, adult cyborg Chatbuddy avatar ",
client=None
):
self.hf_space_id = hf_space_id
self.hf_folder = Path(hf_folder)
self.hf_folder.mkdir(parents=True, exist_ok=True)
self.api = HfApi()
self.client = client or FluxImageGenerator()
self.initial_prompt = initial_prompt
self.avatar_image_path = self.hf_folder / "avatar.png"
self.has_uploaded = False
def generate_initial_avatar(self):
if self.avatar_image_path.exists():
print("Avatar already exists locally.")
return Image.open(self.avatar_image_path)
result = self.client.generate_image(prompt=self.initial_prompt)
# Assuming `result` is a path or PIL.Image object
if isinstance(result, str) and result.endswith((".png", ".jpg", ".jpeg")):
image = Image.open(result)
elif isinstance(result, Image.Image):
image = result
else:
raise ValueError("Unrecognized image format from result.")
image.save(self.avatar_image_path)
print(f"Saved avatar to {self.avatar_image_path}")
return image
def upload_avatar_to_hf(self):
if not self.avatar_image_path.exists():
raise FileNotFoundError("Avatar image not found, generate it first.")
if self.has_uploaded:
print("Avatar already uploaded.")
return
self.api.upload_folder(
folder_path=str(self.hf_folder),
repo_id=self.hf_space_id,
repo_type="space"
)
self.has_uploaded = True
print(f"Uploaded avatar to {self.hf_space_id}/{self.hf_folder.name}")
def get_avatar_path(self):
return self.avatar_image_path if self.avatar_image_path.exists() else None
def refresh_avatar(self, new_prompt=None):
prompt = new_prompt or self.initial_prompt
print(f"Refreshing avatar with prompt: {prompt}")
self.initial_prompt = prompt
if self.avatar_image_path.exists():
os.remove(self.avatar_image_path)
self.has_uploaded = False
return self.generate_initial_avatar()