diff --git a/smarketing-ai/services/poster_service_v3.py b/smarketing-ai/services/poster_service_v3.py index d55662c..83acd75 100644 --- a/smarketing-ai/services/poster_service_v3.py +++ b/smarketing-ai/services/poster_service_v3.py @@ -173,32 +173,23 @@ class PosterServiceV3: example_links = "\n".join([f"- {link}" for link in self.example_images]) prompt = f""" - 메인 이미지 URL을 참조하여, "글이 없는" 심플한 카페 포스터를 디자인해주세요. + 메인 이미지 URL을 참조하여, "글이 없는" 심플한 포스터를 디자인해주세요. **핵심 기준 이미지:** 메인 이미지 URL: {main_image_url} - 이 이미지 URL에 들어가 이미지를 다운로드 후, 이 이미지를 그대로 반영한 채 홍보 포스터를 디자인해주세요. - 심플한 배경이 중요합니다. + 메인 이미지를 전혀 건들지 말고, 배경만 새로운 홍보 포스터 배경으로 교체해주세요. + 메인 이미지는 100% 유지해야 합니다. AI가 생성하지 않은 것처럼 현실적인 요소를 반영해주세요. **절대 필수 조건:** - - 어떤 형태의 텍스트, 글자, 문자, 숫자도 절대 포함하지 말 것!!!! - 가장 중요 - - 위의 메인 이미지를 임의 변경 없이, 포스터의 중심 요소로 포함할 것 - 하나의 포스터만 생성해주세요 - - 메인 이미지의 색감과 분위기를 살려서 심플한 포스터 디자인 + - 메인 이미지의 색감과 분위기를 살려주세요 + - {example_links}의 이미지 형태를 참고하여 홍보 포스터 생성 - 메인 이미지가 돋보이도록 배경과 레이아웃 구성 - 확실하지도 않은 문자 절대 생성 x **특별 요구사항:** {request.requirement} - - - **반드시 제외할 요소:** - - 모든 형태의 텍스트 (한글, 영어, 숫자, 기호) - - 메뉴판, 가격표, 간판 - - 글자가 적힌 모든 요소 - - 브랜드 로고나 문자 - """ return prompt diff --git a/smarketing-ai/utils/ai_client.py b/smarketing-ai/utils/ai_client.py index 7b1fe52..51a36ab 100644 --- a/smarketing-ai/utils/ai_client.py +++ b/smarketing-ai/utils/ai_client.py @@ -78,19 +78,36 @@ class AIClient: raise Exception("OpenAI API 키가 설정되지 않았습니다.") response = self.openai_client.images.generate( - model="dall-e-3", + model="gpt-image-1", prompt=prompt, - size="1024x1024", - quality="hd", # 고품질 설정 - style="vivid", # 또는 "natural" + size=size, n=1, ) - return response.data[0].url + # base64를 파일로 저장 + import base64 + from datetime import datetime + + b64_data = response.data[0].b64_json + image_data = base64.b64decode(b64_data) + + # 로컬 파일 저장 + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + filename = f"poster_{timestamp}.png" + filepath = os.path.join('uploads', 'temp', filename) + + os.makedirs(os.path.dirname(filepath), exist_ok=True) + + with open(filepath, 'wb') as f: + f.write(image_data) + + print(f"✅ 이미지 저장 완료: {filepath}") + + # 그냥 파일 경로만 반환 + return filepath except Exception as e: - print(f"OpenAI 이미지 생성 실패: {e}") - raise Exception(f"이미지 생성 중 오류가 발생했습니다: {str(e)}") + raise Exception(f"이미지 생성 실패: {str(e)}") def generate_text(self, prompt: str, max_tokens: int = 1000) -> str: """