SDK 2.0.0。認証: 認証とライセンス。
本番の認証
app_id / app_key はサーバーに置きます。自社バックエンドが短命の licenseToken を取得し、エンジンへ渡します。
.lic を使えません。
1 ページに 1 エンジン
BeautyEffectEngine を 1 つ作成し、init() を 1 回行い、セッション全体で再利用します。毎フレーム new しないでください。
フレームループ
- 動画は
requestAnimationFrameで駆動し、空のwhileは使わないでください。 - カメラは
FrameType.Video、静止画はFrameType.Image。 - Canvas サイズを処理後の
ImageDataに合わせ、余分なスケールを避けます。 video.readyState >= 2かつvideoWidth > 0になってから処理します。processImageを優先します。processTextureはミラーを適用しません。
大きな静止画(プレビューと書き出し)
ギャラリー写真やレタッチでは、スライダーを動かすたびに原寸ピクセルをprocessImage に渡さないでください。ファイルを開いたときにバッファを 2 つ用意します。
- プレビューフレーム — 縮小した
ImageData(長辺は約 1280–1440、または表示 canvas の CSS サイズ ×devicePixelRatioの小さい方)。パラメータ調整中はこちらだけ処理します。 - 原寸 —
HTMLImageElement(または未縮小のビットマップ)。ユーザーが書き出すときに 1 回だけprocessImageします。
FrameType.Image。同じエンジン、同じ setter。出力サイズは入力と同じです。プレビュー結果を拡大して書き出しにしないでください。
縮小していない <img> をプレビューループに渡さないでください。processImage は naturalWidth / naturalHeight を読みます。
FrameType.Video を使います。スライダーからの processImage は短く debounce してください。書き出しは同期でページが止まることがあるので、先に進行表示を出します。
パラメータ
ライブプレビューは低強度から始めます(スムージングは約0.2–0.5)。リシェイプ範囲は [-1, 1] で、カメラでは小さめの調整の方が自然です。
UI にキーポイントが不要なら onFaceLandmarks を登録しないでください。登録すると毎フレーム検出が走ります。
スムージングが高いときは setBeautySkinOnly(true) をオンにし、背景がぼやけないようにします。
リソース
- フィルター / ステッカー
.fbdと背景 jpg/png は静的ファイルとしてホストし、URL をsetFilter/setSticker/setVirtualBackgroundに渡します。 - エンジンのランタイムリソースは SDK が
init()時に読み込みます。サイトルートにresource.fbdを置く必要はありません。 - フィルター / ステッカーの切り替えはユーザー操作時に行い、毎フレーム切り替えないでください。
メモリ
- ページのアンロードやルート離脱時に
destroy()を呼び出します。 - 表示用 canvas を再利用し、毎フレーム新規作成しないでください。

