Guía de API
Nano Banana 2 API
Muestra los ajustes de API que usa YingTu actualmente. El código nunca incluye tu Key real.
Inicio rápido
- 1
Crea o elige una API Key de LaoZhang.
- 2
Copia el ID actual y el ejemplo Python.
- 3
Ejecuta una petición pequeña y revisa la respuesta.
Datos de la petición
- Endpoint de generación
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- Endpoint de edición
- POST /v1beta/models/gemini-3.1-flash-image:generateContent
- URL base
- https://api2.laozhang.ai
- Autenticación
- Bearer API Key
- Familia de petición
- Gemini native
- Imágenes de referencia
- Compatible
- Límite de referencias
- Hasta 5 imágenes en YingTu (no es el máximo del proveedor)
- Estado de verificación
- Aún no verificado: no hay una fecha de comprobación disponible.
Ejemplo en Python
Sustituye la Key de ejemplo y tu propio prompt.
Ejemplo de texto a imagen
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.Ejemplo de edición con referencia
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})")
Parámetros de la petición
Los campos coinciden con el cliente actual de YingTu y los ejemplos de código.
- model
- Obligatorio. Usa el ID exacto de esta página.
- prompt
- Obligatorio. Envía la instrucción visual, nunca la API Key.
- controles de salida
generationConfig.imageConfig.aspectRatioeimageSize; la proporción automática se omite.- imágenes de referencia
- Opcional. Hasta 5 imágenes en el navegador de YingTu se envían como
contents[].parts[].inline_data.
Respuesta y timeout
- Respuesta de imagen
- El cliente lee base64 de
candidates[].content.parts[].inlineDataoinline_datay conserva el tipo MIME. - Respuesta sin imagen
- No se considera éxito sin datos de imagen. Se muestra motivo de bloqueo, fin o response ID cuando existe.
Timeout del cliente: 500 segundos
Tras 500 segundos YingTu deja de esperar; el resultado y el cargo pueden seguir siendo desconocidos.
Sin reintento automático
YingTu no reintenta automáticamente. Revisa los registros de petición y facturación antes de otra llamada de pago.
Errores habituales
- Autenticación
- Comprueba la Key en la variable de entorno y la cabecera Bearer.
- Acceso o saldo
- Revisa en LaoZhang el acceso al modelo, saldo, facturación y restricciones.
- Límite de peticiones
- Reduce la concurrencia y revisa el mensaje devuelto por el proveedor o la cuenta.
- Sin imagen
- Revisa motivos de bloqueo y finalización, mensaje de API y response ID.
- Timeout
- El estado final puede ser desconocido; revisa llamadas y cargos antes de reintentar.
Limitaciones conocidas
Estos puntos describen lo que conviene comprobar antes de usar el resultado.
- Comprueba las dimensiones reales del archivo descargado.
- Revisa identidad, logotipos, envase, colores y detalles.
- La disponibilidad y latencia pueden variar.
- Confirma precio, saldo, acceso y cargos en LaoZhang.
Preguntas sobre la API
¿Dónde guardo la API Key?
Usa la variable de entorno del ejemplo. No guardes la Key completa en código, logs ni prompts.
¿Un timeout significa que falló?
No siempre. Tras 500 segundos el resultado o cargo puede ser desconocido; revisa los registros.
¿El límite de referencias es del proveedor?
No. Es el límite actual del navegador YingTu guardado en el registro del modelo.
¿Dónde confirmo precio y acceso?
El precio, saldo, acceso y cargos actuales se confirman en la cuenta LaoZhang.
Precio y facturación
La página muestra un precio de referencia. Confirma precio, saldo, acceso y cargos actuales en tu cuenta LaoZhang.
- ID del modelo
- gemini-3.1-flash-image
- Precio de referencia
- $0.055/ llamada
- Tamaños de salida
- 512 / 1K / 2K / 4K
- Formato API
- Gemini native
Probar este modelo en el estudio
Estos son los ajustes disponibles actualmente en el estudio de imágenes.
YingTuLaoZhang