Communitygithub.com

Cephalon Cloud (端脑云) → ComfyUI 视频/图片生成 API 链路

Utilizar al invocar recursos de cómputo Cephalon Cloud (端脑云) para generación de video/imagen vía API de ComfyUI. Incluye trampas de firma HMAC, prevención de misiones huérfanas y adaptación de flujos de trabajo.

¿Qué es 图片生成 API 链路?

Este skill detalla la integración completa con la API de Cephalon Cloud para ejecutar flujos de trabajo de ComfyUI orientados a generación de video (T2V, I2V, FL2V, R2V) e imágenes. Proporciona scripts listos para usar que gestionan desde la autenticación SSO mediante escaneo de código QR de WeChat, la consulta de saldo, la subida de activos de imagen, la presentación de trabajos con clave de idempotencia para evitar cobros duplicados, el sondeo de resultados con verificación SHA-256, hasta la descarga segura de los archivos generados. Está diseñado para plataformas Linux/macOS con Python 3.8+ y es especialmente útil para desarrolladores que necesitan un pipeline robusto y eficiente para generar videos de larga duración o secuencias multi-toma. El skill documenta a fondo las trampas descubiertas experimentalmente en la implementación de la firma HMAC-SHA256, la gestión del ciclo de vida de las instancias (incluyendo la facturación por tiempo de suministro), y las técnicas para evitar misiones huérfanas que consumen créditos sin resultado. Además, incluye ejemplos de adaptación de flujos de trabajo oficiales de ComfyUI (Wan2.2, LTX-Video, HunyuanVideo) al formato de API plana, con consejos para manejar subgrafos anidados y optimizar la resolución y los pasos de muestreo.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add Geokkk/cephalon-comfyui-video

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Cephalon Cloud(端脑云)→ ComfyUI 视频/图片生成 API 链路

Scripts completos y funcionales (en scripts/ del repositorio):

  • lucy_run.py — CLI directo a Workbench (ruta recomendada, sin instancia) : escanear código QR de WeChat para iniciar sesión → SSO crea sesión → cotización sin consumo → envío con precio bloqueado (clave de idempotencia evita cobro duplicado) → sondeo → descarga con verificación SHA-256 → subida de activos de imagen. Cuatro plantillas (t2v/i2v/fl2v/r2v) verificadas con ejecución real hasta el 2026-10-14.
  • cephalon_api.py — Firma HMAC de user-center + CLI de instancias (missions)
  • cephalon_verify.py — Verificación de cadena; cephalon_keys.py — Plantilla de claves (prioriza variables de entorno)
  • run_fairy_pipeline.py / concat_fairy.py — Pipeline de múltiples tomas con instancia propia (ruta antigua)

Flujo de trabajo Lucy (flujo de imágenes de lucy-agent, inicio de sesión con código QR de WeChat, cotización y ejecución real en Workbench video.lucy.run): consulte references/lucy-workflow-api.md.

Inicio rápido directo a Workbench (lucy_run.py)

export CEPHALON_PUBLIC_KEY=<32 caracteres hex> CEPHALON_PRIVATE_KEY=<64 caracteres hex>
python scripts/lucy_run.py login                      # Escanear código QR de WeChat, JWT guardado en lucy_state/token.txt
python scripts/lucy_run.py balance                    # Saldo (100 units = 1 CEP)
python scripts/lucy_run.py upload primer_fotograma.png # Necesario para i2v/fl2v/r2v, devuelve asset_id
python scripts/lucy_run.py submit --template t2v --seconds 5 --yes \
  --prompt "…… overall_soundscape: …… non_diegetic_music: None."
python scripts/lucy_run.py download <run_id>

Línea roja: Tarifa 100 units/segundo (5s=5 CEP, 10s=10 CEP, 15s=15 CEP); el cobro se realiza en el momento del envío, no se puede cancelar una vez en ejecución; antes de enviar, revise la cotización impresa por el script. Consulte la referencia para detalles de parámetros y errores.

Autenticación (verificada experimentalmente, documentación con trampas)

  • HMAC-SHA256. Cadena de firma = JSON( relative_uri + body normalizado ), clave = clave privada (64 caracteres hex), cabeceras de solicitud Hmac-Key: clave pública (32 caracteres hex) + Hmac.
  • Trampa clave: requestURI es la ruta relativa a la ruta base de user-center (ej. /v1/load-balance), no el prefijo /cephalon/user-center/v1/... que aparece en los enlaces de la documentación. Incluir el prefijo provoca 401 (capa de transporte rechaza con body vacío, sin mensaje de error).
  • Normalización del body: json.dumps(..., sort_keys=True), exactamente igual al body de la solicitud.
  • 401 (msg vacío) = fallo de firma HMAC; código 40000 estado de inicio de sesión inválido = sin cabecera de autenticación; 404 = ruta no existe. Utilice estos tres puntos para calibrar.
  • Intercambiar clave pública/privada también da 401. El script ya incluye reintento automático con intercambio.
  • Parámetros de consulta en interfaces GET: los nombres de parámetros deben estar en snake_case (page_index/page_size), pero consultas con dos parámetros siempre dan 401 (limitación del servidor, un parámetro sí funciona). La lista de misiones con parámetros de consulta no está disponible; saltarla; usar directamente create/status/access/close.
  • Interfaces POST/PUT: cadena de firma = URI + cadena JSON del body normalizado (verificado experimentalmente).

Endpoints de API (base: https://prod.unicorn.org.cn/cephalon/user-center)

  • POST /v1/user/missions/batch body: {batch_size, type, gpu_version, gpu_num} → data: [ID de copo de nieve]
  • GET /v1/user/missions/{id} → estado/urls (sin necesidad de parámetros de paginación, consulta por ID único funciona)
  • PUT /v1/user/missions/close/batch body: {ids: [...]}
  • GET /v1/load-balance (sin parámetros) → lista de servicios de balanceo de carga del usuario
  • GET /v1/load-balance/access-address/{id} → frpc_address/fb_address

Ciclo de vida de la instancia (facturación)

  • waiting (sin facturar) → doing (aceptada pero no en ejecución) → supplying (facturando, RTX4090 medido unit_cep=36 CEP/hora, verificado en factura del 2026-09-29) → succeed/failed/canceled.
  • La preparación suele tardar 5-8 minutos (waiting unos 5 minutos + doing unos 2 minutos).
  • El campo urls aparece solo después de la creación (["https://wp08.unicorn.org.cn:PORT", ".../fb"]). Las URL son HTTPS con puertos no estándar y certificados autofirmados (requests/urllib deben desactivar la verificación de certificados).
  • Durante la fase doing, las urls pueden no haberse enviado aún: si el script create muestra "no se ha obtenido la dirección de acceso" y sale, es una secuencia temporal normal; espere 1-2 minutos y vuelva a ejecutar create (el script con lógica anti-huérfano reutiliza automáticamente la instancia y completa la base); no cree nuevas instancias repetidamente.
  • El estado de la misión devuelve los campos username/password (credenciales para la UI web de la instancia, ej. admin/cephalon); se utilizan al iniciar sesión en la UI de la instancia; no están relacionados con las claves HMAC.
  • Es obligatorio llamar a la interfaz close una vez terminado, de lo contrario la instancia sigue activa consumiendo CEP. Después de cerrar, el archivo local cephalon_state.json debe actualizarse a succeed para evitar que la próxima vez se malinterprete como una instancia huérfana. La factura de una sola tarea es de aproximadamente 2124 unidades (≈21.24 CEP), que incluye aproximadamente 1 hora de supplying + carga del modelo y generación. Segunda verificación del 2026-09-30: en un flujo compacto (cerrar inmediatamente después de generar), desde la creación hasta el cierre solo unos 24 minutos, estimado ≈14 CEP—clave para ahorrar: cerrar inmediatamente después de completar la generación.

Prevención de instancias huérfanas (con experiencia, 2026-09-28 se consumió aproximadamente 1 hora de CEP)

  • Inmediatamente después de crear con éxito, guarde el mission_id en disco antes de iniciar el bucle de espera. Si la espera se interrumpe por timeout o señal, el ID no se pierde y no se convierte en huérfano.
  • Al inicio de create, primero verifique el archivo de estado: si ya existe una instancia en waiting/doing/supplying, reutilícela, no cree una nueva.
  • Antes de submit, verifique el estado de la instancia; si no está en supplying/doing, rechace el envío.
  • Una vez perdido un ID huérfano, solo se puede desactivar manualmente desde la consola de Cephalon Cloud (los IDs de copo de nieve no se pueden enumerar).

API de ComfyUI (una vez que la instancia esté lista)

  • POST /prompt body: {"prompt": {flujo de trabajo en formato API}, "client_id": "..."} → prompt_id
  • GET /history/{prompt_id} → status.completed + outputs
  • GET /view?filename=...&subfolder=...&type=output → descargar resultado
  • GET /object_info (11MB) → definiciones de todos los nodos; GET /object_info/{NodeName} nodo individual.
  • Formato API: {node_id: {class_type, inputs: {param: value o [from_node, slot]}}}.
  • La plantilla oficial de Wan2.2 utiliza el nuevo formato de subgrafos anidados de la UI (definitions.subgraphs); si el servidor no tiene registrado el tipo de subgrafo, dará error. Es necesario expandir en línea a un formato API plano. Análisis de plantilla: Wan2.2 T2V = modelo de alto ruido (UNETLoader) + LoRA lightx2v + ModelSamplingSD3 (shift 5) + KSamplerAdvanced (pasos 0→2) → modelo de bajo ruido + LoRA + KSamplerAdvanced (pasos 2→4) → VAEDecode → CreateVideo (fps 16) → SaveVideo. Latent con EmptyHunyuanLatentVideo (480x480x73, batch 1). Codificador de texto umt5_xxl_fp8_e4m3fn_scaled.safetensors (CLIPLoader type=wan).
  • 4 pasos generan aproximadamente 4.5 segundos de video 480x480 16fps (medido en RTX4090), desde el envío hasta la finalización unos 3-4 minutos (incluyendo carga del modelo).
  • Los parámetros oficiales de TI2V 5B son completamente diferentes de los de 14B (plantilla oficial video_wan2_2_5B_ti2v.json analizada experimentalmente): un solo KSampler 20 pasos / cfg 5 / uni_pc / simple + ModelSamplingSD3 shift 8 + CreateVideo fps 24; 5B es un solo modelo sin UNET dual de alto/bajo ruido. 5B no tiene LoRA de destilación dedicada, la ruta de 4 pasos no es aplicable.
  • La resolución de TI2V 5B solo puede ser 1280x704 o 704x1280 (Wan22ImageToVideoLatent ancho/alto paso 32, altura 720 no es válida; el "720P" oficial es realmente 704). Restricción de longitud de fotogramas (n-1)%4==0.
  • La plantilla oficial por defecto tiene 121 fotogramas = 5 segundos de longitud de entrenamiento; más de 121 fotogramas tiene riesgo de degradación dinámica; para escenas largas, dividir en múltiples tomas de ≤121 fotogramas.
  • I2V: Wan22ImageToVideoLatent tiene start_image opcional que recibe IMAGE; primer fotograma usar easy loadImageBase64 (entrada de cadena base64_data, evita subida multipart).

Librería de modelos verificados (3755 nodos)

  • Wan2.2 completo (T2V/I2V 14B fp8, TI2V 5B fp16), Wan2.1, LTX-2 (19B/22B dev/distilled), LTX-Video 0.9.5, HunyuanVideo 720p, SVD, Mochi, Hunyuan3D-2. TI2V 5B no tiene LoRA de destilación dedicada (357 LoRA sin 5b/ti2v), muestreo completo de 20 pasos, una sola toma 720p aproximadamente 5-6 minutos.
  • LoRA 357 (incluyendo wan2.2 lightx2v 4steps v1.1 high/low noise).
  • Script de detección: descargar object_info.json y analizar localmente las opciones de CheckpointLoaderSimple/UNETLoader/VAELoader/CLIPLoader + existencia de nodos de video.

Composición encadenada de múltiples tomas (2026-10-01 verificado con 720p)

  • Scripts: scripts/run_fairy_pipeline.py (create/toma1/toma N/descarga/close) + build_ti2v_t2v.py/build_ti2v_i2v.py (generador de flujo de trabajo) + concat_fairy.py (empalme xfade). Archivo de especificaciones shots_spec.json.
  • Continuidad encadenada: toma1 T2V → ffmpeg -sseof -0.15 extraer último fotograma (JPG q2 ~200KB, no usar PNG — 900KB se interrumpe al pasar por el túnel) → cada toma usa el último fotograma de la anterior como start_image.
  • Trío de inestabilidad del túnel: timeout de POST /prompt debe ser 300s (el timeout de lectura predeterminado de 60s no soporta subida de 900KB); bucle de reintento x5 en el envío (reenvío seguro — si ya está en cola, el servidor lo rechaza); socket.setdefaulttimeout(180) evita que la descarga se cuelgue indefinidamente. Cuando se pierde la respuesta de envío, pasar a escanear /history para buscar el resultado por prefijo de nombre de archivo.
  • Lección de toma3: después de que POST se interrumpiera durante la fase de subida, el flujo de trabajo nunca entró en la cola (cola vacía + history sin registros); el sondeo en segundo plano consumiría CEP indefinidamente — primero verificar /queue y /history para confirmar antes de reintentar.
  • 20 pasos 720p, una sola toma aproximadamente 5-6 minutos de generación + 1 minuto de subida/descarga; 8 tomas en total (incluyendo 40 minutos de inactividad por fallos) aproximadamente 2 horas de alquiler de instancia.
  • Empalme xfade: combinar de dos en dos progresivamente (un solo filter_complex largo es difícil de depurar si falla), offset = duración acumulada - 0.5s, duración final = Σ duración individual - (N-1)×0.5s.

Enumeración de tipos de tarea (usar en 4.1 creación)

comfyui_time (versión básica) / sd_time / sd_cmd_time (versión avanzada) / fooocus_time / sd_xl_time / jp_time / jp_conda_time / tabby_time / ascend_time / wt_time / ssh_time. La versión profesional de ComfyUI debe confirmar el valor del tipo en la interfaz web (los comentarios de la documentación indican que la API usa la versión básica por defecto).

Skills relacionados