SDK 2.0.0. Autenticação: Autenticação e licença.
Autenticação em produção
Mantenhaapp_id / app_key no servidor. Busque um licenseToken de curta duração no seu backend e, em seguida, passe-o para o mecanismo.
.lic offline.
Um mecanismo por página
Crie umBeautyEffectEngine, chame init() uma vez e reutilize-o durante a sessão. Não construa um mecanismo novo a cada quadro.
Loop de quadros
- Dirija o vídeo com
requestAnimationFrame, não umwhilesem limite. - Use
FrameType.Videopara a câmera;FrameType.Imagepara stills. - Combine o tamanho do canvas com o
ImageDataprocessado para evitar scaling extra. - Pule quadros até
video.readyState >= 2evideoWidth > 0. - Prefira
processImagepara câmera e canvas.processTexturenão aplica espelhamento.
Stills grandes (prévia e exportação)
Em galeria ou retoque, não envie pixels em resolução total paraprocessImage a cada movimento do slider. Ao abrir o arquivo, mantenha dois buffers:
- Quadro de prévia — um
ImageDatareduzido (lado longo cerca de 1280–1440, ou o tamanho CSS do canvas ×devicePixelRatio, o que for menor). Use este enquanto o usuário ajusta os efeitos. - Original — o
HTMLImageElement(ou um bitmap sem reduzir). ChameprocessImageuma vez, na exportação.
FrameType.Image nos dois. Mesmo mecanismo, mesmos setters. O tamanho da saída acompanha a entrada: a prévia é pequena; a exportação é em resolução total. Não amplie o resultado da prévia para fingir uma exportação.
Não passe um <img> sem reduzir no loop de prévia — processImage lê naturalWidth / naturalHeight.
FrameType.Video. Faça debounce das chamadas de processImage do slider. Mostre um estado de ocupado antes de exportar; o processamento em resolução total é síncrono e pode travar a página.
Parâmetros
Comece baixo na prévia em tempo real (smoothing ~ 0.2–0.5). A remodelagem é [-1, 1]; valores pequenos ficam mais naturais na câmera.
Não registre onFaceLandmarks a menos que a UI precise deles — isso força detecção por quadro.
setBeautySkinOnly(true) evita borrar fundos quando a suavização está alta.
Recursos
- Hospede
.fbdde filtro / adesivo e jpg/png de fundo como arquivos estáticos; passe a URL parasetFilter/setSticker/setVirtualBackground. - Os recursos de runtime são carregados pelo SDK durante
init(). Não coloque umresource.fbdna raiz do site para o mecanismo. - Troque filtro / adesivo na entrada do usuário, não a cada quadro.
Memória
- Chame
destroy()no unmount /beforeunload. - Reutilize o canvas de exibição; não aloque um canvas novo a cada quadro.

