SDK 2.0.0. Autenticación: Autenticación y licencia.
Autenticación en producción
Guardaapp_id / app_key en el servidor. Obtén un licenseToken de corta duración desde tu backend y pásalo al motor.
.lic sin conexión.
Un motor por página
Crea unBeautyEffectEngine, llama a init() una vez y reutilízalo durante la sesión. No construyas un motor nuevo en cada fotograma.
Bucle de fotogramas
- Impulsa el vídeo con
requestAnimationFrame, no con unwhileilimitado. - Usa
FrameType.Videopara cámara;FrameType.Imagepara estáticos. - Haz coincidir el tamaño del canvas con el
ImageDataprocesado para evitar un escalado extra. - Omite fotogramas hasta que
video.readyState >= 2yvideoWidth > 0. - Prefiere
processImagepara cámara y canvas.processTextureno aplica espejo.
Fotos grandes (vista previa y exportación)
En galería o retoque, no envíes los píxeles a resolución completa aprocessImage en cada movimiento del deslizador. Al abrir el archivo, guarda dos búferes:
- Fotograma de vista previa — un
ImageDatareducido (lado largo unos 1280–1440, o el tamaño CSS del canvas ×devicePixelRatio, el que sea menor). Úsalo mientras el usuario ajusta efectos. - Original — el
HTMLImageElement(o un bitmap sin reducir). Llama aprocessImageuna vez, al exportar.
FrameType.Image en ambos. Mismo motor, mismos setters. El tamaño de salida coincide con la entrada: la vista previa es pequeña; la exportación es a resolución completa. No amplíes el resultado de vista previa para fingir una exportación.
No pases un <img> sin reducir al bucle de vista previa: processImage lee naturalWidth / naturalHeight.
FrameType.Video. Debounce las llamadas a processImage desde el deslizador. Muestra un estado de ocupado antes de exportar; el proceso a resolución completa es síncrono y puede congelar la página.
Parámetros
Empieza bajo en vista previa en tiempo real (smoothing ~ 0.2–0.5). El remodelado es [-1, 1]; los valores pequeños se ven más naturales en cámara.
No registres onFaceLandmarks salvo que la UI los necesite: fuerza detección por fotograma.
setBeautySkinOnly(true) evita manchar fondos cuando el suavizado es alto.
Recursos
- Aloja
.fbdde filtro / sticker y jpg/png de fondo como archivos estáticos; pasa la URL asetFilter/setSticker/setVirtualBackground. - Los recursos de runtime los carga el SDK durante
init(). No pongas unresource.fbden la raíz del sitio para el motor. - Cambia filtro / sticker con la entrada del usuario, no en cada fotograma.
Memoria
- Llama a
destroy()al desmontar /beforeunload. - Reutiliza el canvas de visualización; no asignes un canvas nuevo por fotograma.

