API 안내
Nano Banana 2 API
YingTu가 현재 사용하는 API 설정을 보여 줍니다. 실제 Key는 코드에 포함되지 않습니다.
빠른 시작
- 1
LaoZhang API Key를 만들거나 선택합니다.
- 2
현재 모델 ID와 Python 예시를 복사합니다.
- 3
작은 요청을 한 번 실행하고 응답을 확인합니다.
요청 정보
- 생성 엔드포인트
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- 편집 엔드포인트
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- Base URL
- https://api2.laozhang.ai
- 인증
- Bearer API Key
- 요청 유형
- Gemini native
- 참고 이미지
- 지원
- 참고 이미지 수
- YingTu에서 최대 5장 선택 가능(제공자 최대값 아님)
- 확인 상태
- 아직 확인되지 않음 — 확인 가능한 날짜 기록이 없습니다.
Python 예시
자리표시자 Key와 자신의 프롬프트를 바꾸세요.
텍스트 이미지 생성 예시
cURL
export LAOZHANG_API_KEY="replace-with-your-key"
curl --fail-with-body --max-time 500 \
-X POST 'https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent' \
-H "Authorization: Bearer ${LAOZHANG_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"contents":[{"parts":[{"text":"A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."}]}],"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"imageSize":"2K"}}}'
# The JSON response can contain base64 image data or an image URL.
# If this request times out, check request and billing logs before retrying.참조 이미지 편집 예시
gemini-3.1-flash-image · edit
import base64
import mimetypes
import os
import sys
import requests
API_KEY = os.environ.get("LAOZHANG_API_KEY")
if not API_KEY:
raise RuntimeError("Set the LAOZHANG_API_KEY environment variable before running this example.")
API_URL = "https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
REQUEST_TIMEOUT_SECONDS = 500
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def encode_image(image_path):
mime_type = mimetypes.guess_type(image_path)[0] or "image/jpeg"
with open(image_path, "rb") as image_file:
data = base64.b64encode(image_file.read()).decode("ascii")
return {"mime_type": mime_type, "data": data}
reference_1 = encode_image("image_1.jpg") # Replace with your image path
payload = {
"contents": [{
"parts": [
{"text": "A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."},
{"inline_data": reference_1}
]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"imageSize": "2K"
}
}
}
try:
response = requests.post(
API_URL,
headers=headers,
json=payload,
timeout=REQUEST_TIMEOUT_SECONDS,
)
except requests.Timeout as error:
print(
"Request timed out after 500 seconds. The result status may be unknown; "
"check call and billing logs before retrying.",
file=sys.stderr,
)
raise SystemExit(1) from error
if response.status_code != 200:
print(f"API error {response.status_code}: {response.text}", file=sys.stderr)
raise SystemExit(1)
try:
result = response.json()
except ValueError as error:
print("API returned a non-JSON response.", file=sys.stderr)
raise SystemExit(1) from error
if not isinstance(result, dict):
print("API returned an unexpected JSON shape.", file=sys.stderr)
raise SystemExit(1)
image_part = None
for candidate in result.get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
inline_data = part.get("inlineData") or part.get("inline_data")
if inline_data and inline_data.get("data"):
image_part = inline_data
break
if image_part:
break
if not image_part:
response_id = result.get("responseId", "not provided")
print(f"No image data in response. responseId={response_id}", file=sys.stderr)
raise SystemExit(1)
mime_type = image_part.get("mimeType") or image_part.get("mime_type") or "image/png"
encoded_image = image_part["data"]
if encoded_image.startswith("data:"):
header, encoded_image = encoded_image.split(",", 1)
mime_type = header[5:].split(";", 1)[0] or mime_type
extension_by_mime = {
"image/jpeg": "jpg",
"image/png": "png",
"image/webp": "webp",
"image/gif": "gif",
}
extension = extension_by_mime.get(mime_type, "bin")
output_path = f"output.{extension}"
with open(output_path, "wb") as output_file:
output_file.write(base64.b64decode(encoded_image, validate=True))
print(f"Image saved: {output_path} ({mime_type})")
실제 사용 전 LaoZhang 계정에서 최신 가격, 잔액, 권한을 확인하세요.
요청 파라미터
현재 YingTu 클라이언트와 코드 예시에 맞춘 필드입니다.
파라미터전송 방식
- model
- 필수. 이 페이지의 정확한 모델 ID를 사용합니다.
- prompt
- 필수. 이미지 지시를 보내며 API Key는 포함하지 않습니다.
- 출력 설정
generationConfig.imageConfig.aspectRatio와imageSize; 자동 비율은 보내지 않습니다.- 참고 이미지
- 선택 사항. YingTu 브라우저에서는 최대 5장을
contents[].parts[].inline_data로 보냅니다.
응답 및 시간 제한
- 이미지 응답
candidates[].content.parts[].inlineData또는inline_data의 base64 이미지와 MIME 유형을 읽습니다.- 이미지가 아닌 응답
- 이미지 데이터가 없으면 성공으로 처리하지 않습니다. 차단/종료 이유와 response ID가 있으면 표시합니다.
클라이언트 500초 제한
500초 후 YingTu 클라이언트는 대기를 중단합니다. 이때 결과와 청구 상태는 알 수 없을 수 있습니다.
자동 재시도 없음
YingTu는 자동 재시도하지 않습니다. 다시 유료 호출하기 전에 요청 및 청구 로그를 확인하세요.
일반적인 오류
- 인증
- 환경 변수의 Key와 Bearer 인증 헤더를 확인하세요.
- 권한 또는 잔액
- LaoZhang에서 모델 권한, 잔액, 청구 및 계정 제한을 확인하세요.
- 요청 제한
- 동시 실행 수를 낮추고 반환된 상위 또는 계정 메시지를 확인하세요.
- 이미지 없음
- 차단/종료 이유, API 메시지 및 response ID를 확인하세요.
- 시간 초과
- 최종 상태가 불명확할 수 있으므로 재시도 전에 호출 및 청구 로그를 확인하세요.
알려진 제한
생성 결과를 사용하기 전에 다음 내용을 확인하세요.
- 다운로드한 파일의 실제 크기를 확인하세요.
- 정체성, 로고, 포장, 색상과 작은 세부 사항을 확인하세요.
- 사용 가능 여부와 대기 시간은 달라질 수 있습니다.
- 가격, 잔액, 권한 및 청구는 LaoZhang에서 확인하세요.
API FAQ
API Key는 어디에 저장하나요?
코드 예시의 환경 변수를 사용하고 코드, 로그, 프롬프트에 전체 Key를 남기지 마세요.
시간 초과는 실패인가요?
항상 그렇지는 않습니다. 500초 후에도 결과나 청구가 불명확할 수 있으므로 로그를 확인하세요.
참고 이미지 수는 제공자 최대값인가요?
아닙니다. 모델 레지스트리에 있는 현재 YingTu 브라우저 제한입니다.
가격과 권한은 어디서 확인하나요?
최신 가격, 잔액, 권한과 청구는 LaoZhang 계정에서 확인하세요.
가격 및 청구
페이지에는 참고 가격이 표시됩니다. 최신 가격, 잔액, 권한, 청구는 LaoZhang 계정에서 확인하세요.
모델 정보
- 모델 ID
- gemini-3.1-flash-image
- 참고 가격
- $0.055/회
- 출력 크기
- 512 / 1K / 2K / 4K
- API 형식
- Gemini native
스튜디오에서 이 모델 테스트
현재 이미지 스튜디오에서 사용할 수 있는 설정입니다.
YingTuLaoZhang