사용자들의 강한 기대에 부응하기 위해 특별히 두 가지 리버스 엔지니어링 인터페이스인 gpt-4o-image와 gpt-4o-image-vip를 출시했습니다. VIP 모델은 우수한 성능과 안정성을 제공합니다.
리버스 엔지니어링 인터페이스는 완전한 안정성을 보장할 수 없으며 🕐 대기 중... 상태 또는 생성 실패가 발생할 수 있습니다. 체험 및 기능 테스트용으로만 권장됩니다.
OpenAI의 공식 인터페이스 gpt-image-1이 출시되었습니다. 사용 비용을 고려하여 현재 리버스 엔지니어링 인터페이스는 일시적으로 유지되며 모든 사람에게 호환되는 호출 방법이 제공됩니다.
익숙한 v1/completions 엔드포인트를 사용하여 완벽하게 호환되는 지원을 제공합니다. 특정 사용법은 다음을 참조하십시오:
复制
from openai import OpenAIclient = OpenAI( api_key="AIHUBMIX_API_KEY", # 여기에 키 입력 base_url="https://aihubmix.com/v1")# 채팅 완료 요청 생성stream = client.chat.completions.create( model="gpt-4o-image-vip", #list: gpt-4o-image-vip, gpt-4o-image messages=[ { "role": "user", "content": [ { "type": "text", "text": """[진주 귀걸이를 한 소녀]를 애니메이션 스타일의 일러스트 표지로 재디자인하세요. 원본의 본질과 구성을 보존하세요. 세련된 교토 애니메이션 스타일(부드러운 붓놀림, 영화 같은 조명, 점진적인 깊이)로 렌더링하세요. AV 표지 레이아웃 형식: 일본어-영어 혼합 타이포그래피, 시각적 계층 구조가 중요한 세리프 제목 - 디자인 감각이 핵심입니다.심오한 의미를 전달하는 단어를 제목으로 추출한 다음 창의적인 슬로건을 만드세요. 필요한 경우에만 원본 이름을 더 작은 정보로 사용할 수 있습니다.의류나 배경에 "jerlin" 워터마크를 미묘하게 삽입하세요. 감정적인 톤과 자세를 유지하고 필요할 때만 부드럽게 처리하세요. 2:3 세로""" } ] } ], stream=True)# 스트리밍 응답 처리for chunk in stream: try: if chunk.choices and len(chunk.choices) > 0 and chunk.choices[0].delta and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) except Exception as e: print(f"\n응답 처리 중 오류 발생: {str(e)}")
{ "prompt": "'진주 귀걸이를 한 소녀'를 애니메이션 스타일의 일러스트 표지로 재디자인하세요. 상징적인 옆모습 포즈, 고요한 표정, 친밀한 프레임 등 원본의 본질과 구성을 보존하세요. 부드러운 붓놀림, 영화 같은 조명, 점진적인 깊이를 갖춘 세련된 교토 애니메이션 스타일로 렌더링하세요. 일본어-영어 혼합 타이포그래피를 사용하여 AV 표지 레이아웃을 만들고, 강한 시각적 계층 구조를 가진 눈에 띄는 세리프 제목을 사용하세요. 제목에 심오한 단어를 추출하고 창의적인 슬로건을 포함하세요. 원본 이름 '진주 귀걸이를 한 소녀'는 필요한 경우 더 작은 텍스트로 표시되어야 합니다. 의류나 배경에 'jerlin' 워터마크를 미묘하게 삽입하세요. 겸손을 위해 잠재적인 노출을 흐르는 천, 머리카락 또는 베일로 대체하면서 감정적인 톤과 자세를 유지하세요. 필요한 경우에만 세부 사항을 부드럽게 처리하세요.", "ratio": "2:3"}>🕐 대기 중.>⚡ 생성 중.....>🏃 진행률 11....19....27...34....42....50....57...64....[100](https://videos.openai.com/vg-assets/assets%2Ftask_01jsccq77nfcsab7dn8bx7z230%2Fsrc_1.png?st=2025-04-21T13%3A08%3A48Z&se=2025-04-27T14%3A08%3A48Z&sks=b&skt=2025-04-21T13%3A08%3A48Z&ske=2025-04-27T14%3A08%3A48Z&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skoid=aa5ddad1-c91a-4f0a-9aca-e20682cc8969&skv=2019-02-02&sv=2018-11-09&sr=b&sp=r&spr=https%2Chttp&sig=xm6K6M7au3F3Vd9qcYxR3mYWrqAHsgbagbUV5GQo39w%3D&az=oaivgprodscus)> ✅ 생성 완료[다운로드하려면 클릭](https://filesystem.site/cdn/download/20250421/XBCrAs6qvMARG7BkFX0KI3MBs1qoto.png)[다운로드하려면 클릭](https://filesystem.site/cdn/download/20250421/tQ62gh0BbdESApNmFJMNzsdUFDflkl.png)%
OpenAI에서 출시한 최신 이미지 생성 방법을 선호하는 경우 다음 구현을 참조할 수 있습니다. 다음 3가지만 기억하면 됩니다:
quality 매개변수를 포함하지 마십시오. gpt-4o-image-vip 및 gpt-4o-image와 같은 모델에는 내부적으로 번들로 제공됩니다.
usage 필드(토큰 추적)는 지원되지 않습니다.
최신 출력은 Base64로 인코딩된 이미지 데이터를 반환하며 현재 스크립트는 이미 자동 저장을 처리합니다.
Python
复制
from openai import OpenAIimport osimport requestsimport base64client = OpenAI( api_key="AIHUBMIX_API_KEY", # AiHubMix API 키로 교체 base_url="https://aihubmix.com/v1")prompt = """영화 [블랙 스완]의 포스터를 재디자인하세요, 3D 만화, 부드러운 렌더링, 밝은 톤, 2:3"""result = client.images.generate( model="gpt-4o-image-vip", prompt=prompt, n=1, # 생성할 이미지 수 size="1024x1536", # 1024x1024 (정사각형), 1536x1024 (3:2 가로), 1024x1536 (2:3 세로), auto (기본값) #quality="high" # 리버스 모델에 대해 품질을 전달하지 마십시오. 내부적으로 바인딩됩니다 📍)print(result) # 전체 API 응답 인쇄, 리버스 API에 대해 사용량은 지원되지 않음 📍# 출력 파일 이름 접두사 및 디렉토리 정의output_dir = "." # 다른 디렉토리를 지정할 수 있습니다file_prefix = "image_gen-reverse"# 출력 디렉토리가 있는지 확인os.makedirs(output_dir, exist_ok=True)# 반환된 모든 이미지 데이터 반복for i, image_data in enumerate(result.data): # 먼저 base64 문자열 처리 if hasattr(image_data, "b64_json") and image_data.b64_json: image_bytes = base64.b64decode(image_data.b64_json) current_index = i while True: file_name = f"{file_prefix}_{current_index}.png" file_path = os.path.join(output_dir, file_name) if not os.path.exists(file_path): break current_index += 1 with open(file_path, "wb") as f: f.write(image_bytes) print(f"이미지가 다음 위치에 저장되었습니다: {file_path} (base64)") # 그런 다음 url 필드 처리 (인터페이스 변경 시 강력한 대체) elif hasattr(image_data, "url") and image_data.url: try: response = requests.get(image_data.url, stream=True) response.raise_for_status() image_bytes = response.content current_index = i while True: file_name = f"{file_prefix}_{current_index}.png" file_path = os.path.join(output_dir, file_name) if not os.path.exists(file_path): break current_index += 1 with open(file_path, "wb") as f: f.write(image_bytes) print(f"이미지가 다음 위치에 저장되었습니다: {file_path} (url)") except requests.exceptions.RequestException as e: print(f"이미지 #{i} 다운로드 실패: {e}") except Exception as e: print(f"이미지 #{i} 처리 중 오류 발생: {e}") else: print(f"이미지 #{i}에서 b64_json 또는 url을 찾을 수 없어 저장을 건너뜁니다.")