SDK 2.0.0. 인증: 인증 및 라이선스.
프로덕션 인증
app_id / app_key는 서버에 두세요. 백엔드에서 수명이 짧은 licenseToken을 받은 뒤 엔진에 전달합니다.
.lic를 사용할 수 없습니다.
페이지당 엔진 하나
하나의BeautyEffectEngine을 만들고, init()을 한 번 호출하고, 세션 동안 재사용하세요. 매 프레임 새 엔진을 만들지 마세요.
프레임 루프
- 제한 없는
while이 아니라requestAnimationFrame으로 비디오를 구동하세요. - 카메라에는
FrameType.Video, 정지에는FrameType.Image를 사용하세요. - 추가 스케일을 피하려면 캔버스 크기를 처리된
ImageData에 맞추세요. video.readyState >= 2이고videoWidth > 0일 때까지 프레임을 건너뛰세요.- 카메라와 캔버스에는
processImage를 권장합니다.processTexture는 미러를 적용하지 않습니다.
큰 정지 이미지(미리보기와 내보내기)
갤러리 사진·리터칭에서는 슬라이더를 움직일 때마다 원본 픽셀을processImage에 넣지 마세요. 파일을 열 때 버퍼를 두 개 만듭니다.
- 미리보기 프레임 — 축소된
ImageData(긴 변 약 1280–1440, 또는 표시 캔버스 CSS 크기 ×devicePixelRatio중 작은 값). 파라미터 조절 중에는 이것만 처리합니다. - 원본 —
HTMLImageElement(또는 축소하지 않은 비트맵). 사용자가 내보낼 때processImage를 한 번 호출합니다.
FrameType.Image입니다. 같은 엔진, 같은 setter. 출력 크기는 입력과 같습니다. 미리보기 결과를 확대해서 내보내기로 쓰지 마세요.
축소하지 않은 <img>를 미리보기 루프에 넣지 마세요. processImage는 naturalWidth / naturalHeight를 읽습니다.
FrameType.Video를 쓰세요. 슬라이더로 호출하는 processImage는 짧게 debounce 하세요. 내보내기는 동기라 페이지가 멈출 수 있으니, 처리 전에 진행 UI를 그리세요.
파라미터
실시간 미리보기에서는 낮게 시작하세요(smoothing 약 0.2–0.5). 리셰이프는 [-1, 1]이며, 작은 값이 카메라에서 더 자연스럽습니다.
UI가 필요하지 않으면 onFaceLandmarks를 등록하지 마세요. 프레임마다 검출이 강제됩니다.
스무딩이 높을 때 setBeautySkinOnly(true)는 배경이 번지는 것을 막습니다.
리소스
- 필터 / 스티커
.fbd와 배경 jpg/png를 정적 파일로 호스팅하고 URL을setFilter/setSticker/setVirtualBackground에 전달하세요. - 런타임 리소스는
init()동안 SDK가 로드합니다. 엔진을 위해 사이트 루트에resource.fbd를 두지 마세요. - 매 프레임이 아니라 사용자 입력에서 필터 / 스티커를 바꾸세요.
메모리
- unmount /
beforeunload에서destroy()를 호출하세요. - 표시용 캔버스를 재사용하고, 프레임마다 새 캔버스를 할당하지 마세요.

