Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador
SDK 2.0.0. El SDK Web no tiene un “callback unificado de preprocess de textura GL” al estilo nativo. Usa este pipeline:Captura → processImage → dibujar en canvas → captureStream / tomar un MediaStreamTrack → pasarlo al SDK de terceros (replaceTrack o un track de vídeo personalizado).La autenticación usa solo licenseToken. Obténlo desde tu servidor antes de init(). Nunca incrustes appKey en el JS del frontend. Consulta Autenticación y licencia e Implementar belleza.
import { BeautyEffectEngine, EngineConfig, FrameType, MirrorMode,} from 'facebetter';const engine = new BeautyEffectEngine(new EngineConfig({ licenseToken: await fetch('/api/facebetter/auth', { method: 'POST' }).then((r) => r.text()),}));await engine.setLogConfig({ consoleEnabled: true, level: 2 });await engine.init();const video = document.createElement('video');video.playsInline = true;video.muted = true;video.srcObject = await navigator.mediaDevices.getUserMedia({ video: { width: 1280, height: 720 }, audio: false,});await video.play();const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');function loop() { if (engine.initialized && video.readyState >= 2 && video.videoWidth > 0) { const result = engine.processImage( video, video.videoWidth, video.videoHeight, FrameType.Video, MirrorMode.Horizontal, // front camera as needed ); if (result) { if (canvas.width !== result.width) canvas.width = result.width; if (canvas.height !== result.height) canvas.height = result.height; ctx.putImageData(result, 0, 0); } } requestAnimationFrame(loop);}loop();// Beauty video track — pass to any RTC / meeting SDKconst beautyStream = canvas.captureStream(30);const beautyTrack = beautyStream.getVideoTracks()[0];
Prefiere processImage. processTexture es para handles de textura GPU existentes y no aplica espejo. Para vista previa / publicación en directo, usa el pipeline de canvas de arriba.
Al descargar la página: beautyTrack.stop(), cancela requestAnimationFrame y engine.destroy().
Las APIs Web de los vendors cambian entre versiones. Abajo solo se indica cómo alimentar beautyTrack; join, tokens y selección de dispositivo se quedan en su documentación.
Dos patrones habituales (revisa tu versión de trtc-js-sdk / TUI):
Crear el stream local a partir del track de belleza (fuente de vídeo personalizada / pasar un MediaStreamTrack)
Crear primero un stream de cámara y luego replaceTrack(beautyTrack)
// Sketch: replace the video track on a local stream// const localStream = TRTC.createStream({ ... });// await localStream.initialize();// await localStream.replaceTrack(beautyTrack);// await client.publish(localStream);
No asumas que existe un onProcessVideoFrame(textureId) al estilo nativo en Web.
Usa un track de vídeo personalizado o replaceTrack en un track existente:
import AgoraRTC from 'agora-rtc-sdk-ng';// A: custom video track from MediaStreamTrack (API name per agora-rtc-sdk-ng)const customVideoTrack = AgoraRTC.createCustomVideoTrack({ mediaStreamTrack: beautyTrack,});await client.publish([customVideoTrack /*, microphoneTrack */]);// B: already have a camera track// await cameraTrack.replaceTrack(beautyTrack);
Pasa el track procesado a la factory de track de vídeo local de LiveKit, o reemplaza en un track publicado:
import { Room, LocalVideoTrack, createLocalVideoTrack } from 'livekit-client';// Sketch: create from MediaStreamTrack and publish (factory name per livekit-client)const track = LocalVideoTrack.createFromMediaStreamTrack(beautyTrack);await room.localParticipant.publishTrack(track);// Or on an existing LocalVideoTrack:// await localVideoTrack.replaceTrack(beautyTrack);
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Facebetter Docs","description":"Realtime AI beauty SDK documentation","colors":{"primary":"#30A46C","light":"#34D399","dark":"#18794E"},"logo":{"light":"https://mintcdn.com/facebetter/mm9bFyHVX2GTlJSl/logo/light.png?fit=max\u0026auto=format\u0026n=mm9bFyHVX2GTlJSl\u0026q=85\u0026s=ba93740f2f6ce1ce1929d9420b2a0386","dark":"https://mintcdn.com/facebetter/mm9bFyHVX2GTlJSl/logo/dark.png?fit=max\u0026auto=format\u0026n=mm9bFyHVX2GTlJSl\u0026q=85\u0026s=10b4748a6af46d98b65771f1a35be2b7","href":"https://facebetter.net"},"favicon":"https://mintcdn.com/facebetter/mm9bFyHVX2GTlJSl/favicon.png?fit=max\u0026auto=format\u0026n=mm9bFyHVX2GTlJSl\u0026q=85\u0026s=e215c35996f449da48a1c4f1c15cbe44","navbar":{"links":[{"href":"https://facebetter.net","label":"Website"},{"href":"https://facebetter.net/dashboard","label":"Dashboard"}],"primary":{"type":"button","label":"Download","href":"https://facebetter.net/download"}},"footer":{"socials":{"github":"https://github.com/pixpark/facebetter-sdk"}},"seo":{"metatags":{"og:site_name":"Facebetter Docs"}},"icons":{"library":"fontawesome"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","navbar":{"links":[{"href":"https://facebetter.net","label":"Website"},{"href":"https://facebetter.net/dashboard","label":"Dashboard"},{"href":"https://facebetter.net/download","label":"Download"}]},"href":""},{"language":"zh","navbar":{"links":[{"href":"https://facebetter.net/zh","label":"官网"},{"href":"https://facebetter.net/zh/dashboard","label":"控制台"},{"href":"https://facebetter.net/zh/download","label":"下载"}]},"href":"zh"},{"language":"ja","navbar":{"links":[{"href":"https://facebetter.net/ja","label":"ウェブサイト"},{"href":"https://facebetter.net/ja/dashboard","label":"コンソール"},{"href":"https://facebetter.net/ja/download","label":"ダウンロード"}]},"href":"ja"},{"language":"ko","navbar":{"links":[{"href":"https://facebetter.net/ko","label":"웹사이트"},{"href":"https://facebetter.net/ko/dashboard","label":"콘솔"},{"href":"https://facebetter.net/ko/download","label":"다운로드"}]},"href":"ko"},{"language":"es","navbar":{"links":[{"href":"https://facebetter.net/es","label":"Sitio web"},{"href":"https://facebetter.net/es/dashboard","label":"Consola"},{"href":"https://facebetter.net/es/download","label":"Descargas"}]},"href":"es"},{"language":"pt-BR","navbar":{"links":[{"href":"https://facebetter.net/pt-BR","label":"Site"},{"href":"https://facebetter.net/pt-BR/dashboard","label":"Console"},{"href":"https://facebetter.net/pt-BR/download","label":"Downloads"}]},"href":"pt-BR"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"facebetter","hasAudioNarration":false,"actualSubdomain":"facebetter","customDomains":["docs.facebetter.net"],"gitSource":{"type":"github","owner":"parkergrt","repo":"facebetter-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae42036d9294bdce1b30942","collectionId":"9c665788-6552-48c4-97a2-fe76eb1aa7d8","liveDeploymentHistoryId":"6ae42036d9294bdce1b30942","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae42036d9294bdce1b30942","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"en","tag":"SDK Docs","count":51},{"language":"es","tag":"Docs del SDK","count":51},{"language":"ja","tag":"SDK ドキュメント","count":51},{"language":"ko","tag":"SDK 문서","count":51},{"language":"pt-BR","tag":"Docs do SDK","count":51},{"language":"zh","tag":"SDK 文档","count":51},{"language":"en","tag":"OBS Plugin","count":12},{"language":"es","tag":"Plugin de OBS","count":12},{"language":"ja","tag":"OBS プラグイン","count":12},{"language":"ko","tag":"OBS 플러그인","count":12},{"language":"pt-BR","tag":"Plugin para OBS","count":12},{"language":"zh","tag":"OBS 插件","count":12},{"language":"en","tag":"Introduction","count":9},{"language":"es","tag":"Introducción","count":9},{"language":"ja","tag":"はじめに","count":9},{"language":"ko","tag":"소개","count":9},{"language":"pt-BR","tag":"Introdução","count":9},{"language":"zh","tag":"产品介绍","count":9},{"language":"en","tag":"Effect Creator","count":8},{"language":"es","tag":"Effect Creator","count":8},{"language":"ja","tag":"エフェクト作成","count":8},{"language":"ko","tag":"이펙트 제작","count":8},{"language":"pt-BR","tag":"Effect Creator","count":8},{"language":"zh","tag":"贴纸制作","count":8},{"language":"en","tag":"Android","count":7},{"language":"en","tag":"iOS","count":7},{"language":"en","tag":"Linux","count":7},{"language":"en","tag":"macOS","count":7},{"language":"en","tag":"Web","count":7},{"language":"en","tag":"Windows","count":7},{"language":"es","tag":"Android","count":7},{"language":"es","tag":"iOS","count":7},{"language":"es","tag":"Linux","count":7},{"language":"es","tag":"macOS","count":7},{"language":"es","tag":"Web","count":7},{"language":"es","tag":"Windows","count":7},{"language":"ja","tag":"Android","count":7},{"language":"ja","tag":"iOS","count":7},{"language":"ja","tag":"Linux","count":7},{"language":"ja","tag":"macOS","count":7},{"language":"ja","tag":"Web","count":7},{"language":"ja","tag":"Windows","count":7},{"language":"ko","tag":"Android","count":7},{"language":"ko","tag":"iOS","count":7},{"language":"ko","tag":"Linux","count":7},{"language":"ko","tag":"macOS","count":7},{"language":"ko","tag":"Web","count":7},{"language":"ko","tag":"Windows","count":7},{"language":"pt-BR","tag":"Android","count":7},{"language":"pt-BR","tag":"iOS","count":7},{"language":"pt-BR","tag":"Linux","count":7},{"language":"pt-BR","tag":"macOS","count":7},{"language":"pt-BR","tag":"Web","count":7},{"language":"pt-BR","tag":"Windows","count":7},{"language":"zh","tag":"Android","count":7},{"language":"zh","tag":"iOS","count":7},{"language":"zh","tag":"Linux","count":7},{"language":"zh","tag":"macOS","count":7},{"language":"zh","tag":"Web","count":7},{"language":"zh","tag":"Windows","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"es/web/third-party-integration","slug":"/es/web/third-party-integration","pageMetadata":{"title":"Integración con terceros","description":"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador","href":"/es/web/third-party-integration"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`SDK `,_jsx(_components.strong,{children:`2.0.0`}),`. El SDK Web `,_jsx(_components.strong,{children:`no`}),` tiene un “callback unificado de preprocess de textura GL” al estilo nativo. Usa este pipeline:`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Captura → `,_jsx(_components.code,{children:`processImage`}),` → dibujar en canvas → `,_jsx(_components.code,{children:`captureStream`}),` / tomar un `,_jsx(_components.code,{children:`MediaStreamTrack`}),` → pasarlo al SDK de terceros (`,_jsx(_components.code,{children:`replaceTrack`}),` o un track de vídeo personalizado).`]})}),`\n`,_jsxs(_components.p,{children:[`La autenticación usa solo `,_jsx(_components.code,{children:`licenseToken`}),`. Obténlo desde tu servidor antes de `,_jsx(_components.code,{children:`init()`}),`. `,_jsx(_components.strong,{children:`Nunca`}),` incrustes `,_jsx(_components.code,{children:`appKey`}),` en el JS del frontend. Consulta `,_jsx(_components.a,{href:`/es/intro/license`,children:`Autenticación y licencia`}),` e `,_jsx(_components.a,{href:`/es/web/implement-beauty`,children:`Implementar belleza`}),`.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`12`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`getUserMedia / vendor preview track`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`HTMLVideoElement`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BeautyEffectEngine.processImage(...)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`canvas + putImageData`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`canvas.captureStream() → MediaStreamTrack`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TRTC / Agora / LiveKit publish or replaceTrack`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`pipeline-recomendado-independiente-del-vendor`,children:`Pipeline recomendado (independiente del vendor)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`47`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`47`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` BeautyEffectEngine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` EngineConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` FrameType`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MirrorMode`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`} `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'facebetter'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` engine`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` BeautyEffectEngine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` EngineConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` licenseToken:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/api/facebetter/auth'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`method:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'POST'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`then`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`r`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` r`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`text`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}));`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` engine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setLogConfig`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`consoleEnabled:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`level:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` engine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`init`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` video`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'video'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`playsInline`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`muted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`srcObject`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` navigator`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`mediaDevices`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getUserMedia`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`width:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1280`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 720`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` audio:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`play`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` canvas`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` document`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createElement`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'canvas'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ctx`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getContext`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'2d'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` loop`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`engine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`initialized`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`readyState`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`videoWidth`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` result`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` engine`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`processImage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`videoWidth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`videoHeight`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` FrameType`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Video`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MirrorMode`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Horizontal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// front camera as needed`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`width`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`width`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`width`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`width`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`height`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`putImageData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`result`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` requestAnimationFrame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`loop`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`loop`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Beauty video track — pass to any RTC / meeting SDK`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` beautyStream`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` canvas`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`captureStream`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`30`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` beautyTrack`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` beautyStream`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getVideoTracks`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Prefiere `,_jsx(_components.code,{children:`processImage`}),`. `,_jsx(_components.code,{children:`processTexture`}),` es para handles de textura GPU existentes y `,_jsx(_components.strong,{children:`no aplica espejo`}),`. Para vista previa / publicación en directo, usa el pipeline de canvas de arriba.`]})}),`\n`,_jsxs(_components.p,{children:[`Al descargar la página: `,_jsx(_components.code,{children:`beautyTrack.stop()`}),`, cancela `,_jsx(_components.code,{children:`requestAnimationFrame`}),` y `,_jsx(_components.code,{children:`engine.destroy()`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`enganchar-sdk-de-terceros`,children:`Enganchar SDK de terceros`}),`\n`,_jsxs(_components.p,{children:[`Las APIs Web de los vendors cambian entre versiones. Abajo solo se indica cómo `,_jsxs(_components.strong,{children:[`alimentar `,_jsx(_components.code,{children:`beautyTrack`})]}),`; join, tokens y selección de dispositivo se quedan en su documentación.`]}),`\n`,_jsx(Heading,{level:`3`,id:`trtc-tencent-web`,children:`TRTC (Tencent Web)`}),`\n`,_jsxs(_components.p,{children:[`Dos patrones habituales (revisa tu versión de `,_jsx(_components.code,{children:`trtc-js-sdk`}),` / TUI):`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Crear el stream local a partir del track de belleza`}),` (fuente de vídeo personalizada / pasar un `,_jsx(_components.code,{children:`MediaStreamTrack`}),`)`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`Crear primero un stream de cámara y luego `,_jsx(_components.code,{children:`replaceTrack(beautyTrack)`})]})}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Sketch: replace the video track on a local stream`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// const localStream = TRTC.createStream({ ... });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await localStream.initialize();`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await localStream.replaceTrack(beautyTrack);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await client.publish(localStream);`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`No asumas que existe un `,_jsx(_components.code,{children:`onProcessVideoFrame(textureId)`}),` al estilo nativo en Web.`]}),`\n`,_jsx(Heading,{level:`3`,id:`agora-web`,children:`Agora Web`}),`\n`,_jsxs(_components.p,{children:[`Usa un `,_jsx(_components.strong,{children:`track de vídeo personalizado`}),` o `,_jsx(_components.code,{children:`replaceTrack`}),` en un track existente:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` AgoraRTC`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'agora-rtc-sdk-ng'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// A: custom video track from MediaStreamTrack (API name per agora-rtc-sdk-ng)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` customVideoTrack`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` AgoraRTC`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createCustomVideoTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` mediaStreamTrack:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` beautyTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`publish`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`customVideoTrack`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /*, microphoneTrack */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// B: already have a camera track`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await cameraTrack.replaceTrack(beautyTrack);`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`livekit-web`,children:`LiveKit Web`}),`\n`,_jsx(_components.p,{children:`Pasa el track procesado a la factory de track de vídeo local de LiveKit, o reemplaza en un track publicado:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`LocalVideoTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`createLocalVideoTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'livekit-client'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Sketch: create from MediaStreamTrack and publish (factory name per livekit-client)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` track`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` LocalVideoTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createFromMediaStreamTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`beautyTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` room`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`localParticipant`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`publishTrack`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`track`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Or on an existing LocalVideoTrack:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await localVideoTrack.replaceTrack(beautyTrack);`})}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`notas`,children:`Notas`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Elemento`}),_jsx(_components.th,{children:`Detalle`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Autenticación`}),_jsxs(_components.td,{children:[`Obtén `,_jsx(_components.code,{children:`licenseToken`}),` desde tu servidor`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Rendimiento`}),_jsxs(_components.td,{children:[`Reutiliza un canvas; limita el FPS de `,_jsx(_components.code,{children:`captureStream`}),`; no asignes un canvas nuevo en cada fotograma`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Audio`}),_jsxs(_components.td,{children:[`El ejemplo es solo vídeo; toma el micrófono de un `,_jsx(_components.code,{children:`getUserMedia({ audio: true })`}),` separado y publícalo`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Espejo`}),_jsxs(_components.td,{children:[`La vista previa puede usar `,_jsx(_components.code,{children:`MirrorMode`}),` en `,_jsx(_components.code,{children:`processImage`}),`; decide si la codificación debe coincidir`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cambios del vendor`}),_jsxs(_components.td,{children:[`Las firmas de `,_jsx(_components.code,{children:`replaceTrack`}),` / `,_jsx(_components.code,{children:`createCustomVideoTrack`}),` cambian: sigue el SDK Web actual`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`solución-de-problemas`,children:`Solución de problemas`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Síntoma`}),_jsx(_components.th,{children:`Comprueba`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Fotograma negro`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`video.videoWidth === 0`}),`, olvidaste `,_jsx(_components.code,{children:`await engine.init()`}),`, tamaño del canvas no actualizado`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`El remoto no tiene belleza`}),_jsxs(_components.td,{children:[`Publicaste `,_jsx(_components.strong,{children:`beautyTrack`}),`, no el track crudo de cámara`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Fallo de autenticación`}),_jsx(_components.td,{children:`El proxy devuelve el cuerpo de autenticación tal cual; dominio vinculado en la Consola`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Entrecortado`}),_jsxs(_components.td,{children:[`Baja resolución / FPS; asegúrate de un solo bucle `,_jsx(_components.code,{children:`processImage`})]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`relacionado`,children:`Relacionado`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/es/web/implement-beauty`,children:`Implementar belleza`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/es/web/best-practices`,children:`Prácticas recomendadas`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/es/web/error-handling`,children:`Manejo de errores`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/es/intro/license`,children:`Autenticación y licencia`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/es/web/api-reference`,children:`Referencia de la API`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Integración con terceros","description":"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador","href":"/es/web/third-party-integration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pipeline recomendado (independiente del vendor)","slug":"pipeline-recomendado-independiente-del-vendor","depth":2,"children":[]},{"title":"Enganchar SDK de terceros","slug":"enganchar-sdk-de-terceros","depth":2,"children":[{"title":"TRTC (Tencent Web)","slug":"trtc-tencent-web","depth":3,"children":[]},{"title":"Agora Web","slug":"agora-web","depth":3,"children":[]},{"title":"LiveKit Web","slug":"livekit-web","depth":3,"children":[]}]},{"title":"Notas","slug":"notas","depth":2,"children":[]},{"title":"Solución de problemas","slug":"solución-de-problemas","depth":2,"children":[]},{"title":"Relacionado","slug":"relacionado","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"facebetter","siteName":"Facebetter Docs","title":"Integración con terceros - Facebetter Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/web/third-party-integration","matchLevel":1},"zh":{"href":"/zh/web/third-party-integration","matchLevel":1},"ja":{"href":"/ja/web/third-party-integration","matchLevel":1},"ko":{"href":"/ko/web/third-party-integration","matchLevel":1},"es":{"href":"/es/web/third-party-integration","matchLevel":0},"pt-BR":{"href":"/pt-BR/web/third-party-integration","matchLevel":1}}},"lastModified":"2026-09-20T07:11:02.033Z","originalFileLocation":"es/web/third-party-integration.mdx","locale":"es"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\">\u003cmeta data-mint-head name=\"application-name\" content=\"Facebetter Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Integración con terceros - Facebetter Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Facebetter Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.facebetter.net/es/web/third-party-integration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://facebetter.mintlify.app/_mintlify/api/og/v2?division=Web\u0026amp;title=Integraci%C3%B3n+con+terceros\u0026amp;description=Conecta+la+belleza+Facebetter+a+TRTC%2C+Agora%2C+LiveKit+y+otros+pipelines+en+tiempo+real+del+navegador\u0026amp;theme=e51ae4b5db1db928bd4b6cfc\u0026amp;signature=5c66ab8f30ad3b1da9aa6bff889be4cf192f317526508501a4773b3d4f66b4c6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Integración con terceros - Facebetter Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://facebetter.mintlify.app/_mintlify/api/og/v2?division=Web\u0026amp;title=Integraci%C3%B3n+con+terceros\u0026amp;description=Conecta+la+belleza+Facebetter+a+TRTC%2C+Agora%2C+LiveKit+y+otros+pipelines+en+tiempo+real+del+navegador\u0026amp;theme=e51ae4b5db1db928bd4b6cfc\u0026amp;signature=5c66ab8f30ad3b1da9aa6bff889be4cf192f317526508501a4773b3d4f66b4c6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/facebetter/IGWl7Lrb-idg1WGj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Facebetter Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#30A46C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.facebetter.net/es/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/es/web/third-party-integration.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.facebetter.net/es/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.facebetter.net/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.facebetter.net/zh/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.facebetter.net/ja/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.facebetter.net/ko/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.facebetter.net/pt-BR/web/third-party-integration\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.facebetter.net/web/third-party-integration\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.facebetter.net/#organization\",\"name\":\"Facebetter Docs\",\"url\":\"https://docs.facebetter.net\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/facebetter/mm9bFyHVX2GTlJSl/logo/light.png?fit=max\u0026auto=format\u0026n=mm9bFyHVX2GTlJSl\u0026q=85\u0026s=ba93740f2f6ce1ce1929d9420b2a0386\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.facebetter.net#website\",\"name\":\"Facebetter Docs\",\"url\":\"https://docs.facebetter.net\",\"publisher\":{\"@id\":\"https://docs.facebetter.net/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.facebetter.net/es/web/third-party-integration#webpage\",\"url\":\"https://docs.facebetter.net/es/web/third-party-integration\",\"name\":\"Integración con terceros\",\"description\":\"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\",\"dateModified\":\"2026-09-20T07:11:02.033Z\",\"isPartOf\":{\"@id\":\"https://docs.facebetter.net#website\"},\"breadcrumb\":{\"@id\":\"https://docs.facebetter.net/es/web/third-party-integration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.facebetter.net/es/web/third-party-integration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Web\",\"item\":\"https://docs.facebetter.net/es/web/quick-start\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integración con terceros\",\"item\":\"https://docs.facebetter.net/es/web/third-party-integration\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.facebetter.net/es/web/third-party-integration#article\",\"headline\":\"Integración con terceros\",\"name\":\"Integración con terceros\",\"description\":\"Conecta la belleza Facebetter a TRTC, Agora, LiveKit y otros pipelines en tiempo real del navegador\",\"url\":\"https://docs.facebetter.net/es/web/third-party-integration\",\"mainEntityOfPage\":{\"@id\":\"https://docs.facebetter.net/es/web/third-party-integration#webpage\"},\"dateModified\":\"2026-09-20T07:11:02.033Z\",\"publisher\":{\"@id\":\"https://docs.facebetter.net/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.facebetter.net#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Facebetter Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Facebetter Docs","nav":{"global":null,"languages":[{"language":"en","navbar":{"links":[{"href":"https://facebetter.net","label":"Website"},{"href":"https://facebetter.net/dashboard","label":"Dashboard"},{"href":"https://facebetter.net/download","label":"Download"}]},"pages":[{"title":"en","href":"/web/third-party-integration"}]},{"language":"zh","navbar":{"links":[{"href":"https://facebetter.net/zh","label":"官网"},{"href":"https://facebetter.net/zh/dashboard","label":"控制台"},{"href":"https://facebetter.net/zh/download","label":"下载"}]},"pages":[{"title":"zh","href":"/zh/web/third-party-integration"}]},{"language":"ja","navbar":{"links":[{"href":"https://facebetter.net/ja","label":"ウェブサイト"},{"href":"https://facebetter.net/ja/dashboard","label":"コンソール"},{"href":"https://facebetter.net/ja/download","label":"ダウンロード"}]},"pages":[{"title":"ja","href":"/ja/web/third-party-integration"}]},{"language":"ko","navbar":{"links":[{"href":"https://facebetter.net/ko","label":"웹사이트"},{"href":"https://facebetter.net/ko/dashboard","label":"콘솔"},{"href":"https://facebetter.net/ko/download","label":"다운로드"}]},"pages":[{"title":"ko","href":"/ko/web/third-party-integration"}]},{"language":"es","navbar":{"links":[{"href":"https://facebetter.net/es","label":"Sitio web"},{"href":"https://facebetter.net/es/dashboard","label":"Consola"},{"href":"https://facebetter.net/es/download","label":"Descargas"}]},"tabs":[{"tab":"Docs del SDK","groups":[{"group":"Introducción","icon":"book-open","pages":[{"title":"Documentación del SDK","sidebarTitle":"Inicio","href":"/es"},{"title":"Descripción general","href":"/es/intro/overview"},{"title":"Planes y funciones","href":"/es/intro/pricing"},{"title":"Suscripción","href":"/es/intro/enable-service"},{"title":"Autenticación y licencia","href":"/es/intro/license"},{"title":"Paquetes de recursos opcionales","href":"/es/intro/resource-packs"},{"title":"Uso con IA","href":"/es/intro/use-with-ai"},{"title":"Enumeraciones de parámetros","href":"/es/intro/makeup"},{"title":"Registro de cambios","href":"/es/intro/release-note"}]},{"group":"Android","icon":"android","pages":[{"title":"Inicio rápido","href":"/es/android/quick-start"},{"title":"Implementar belleza","href":"/es/android/implement-beauty"},{"title":"Integración con terceros","href":"/es/android/third-party-integration"},{"title":"Manejo de errores","href":"/es/android/error-handling"},{"title":"Referencia de la API","href":"/es/android/api-reference"},{"title":"Prácticas recomendadas","href":"/es/android/best-practices"},{"title":"Preguntas frecuentes","href":"/es/android/faq"}]},{"group":"iOS","icon":"apple","pages":[{"title":"Inicio rápido","href":"/es/ios/quick-start"},{"title":"Implementar belleza","href":"/es/ios/implement-beauty"},{"title":"Integración con terceros","href":"/es/ios/third-party-integration"},{"title":"Manejo de errores","href":"/es/ios/error-handling"},{"title":"Referencia de la API","href":"/es/ios/api-reference"},{"title":"Prácticas recomendadas","href":"/es/ios/best-practices"},{"title":"Preguntas frecuentes","href":"/es/ios/faq"}]},{"group":"macOS","icon":"laptop","pages":[{"title":"Inicio rápido","href":"/es/macos/quick-start"},{"title":"Implementar belleza","href":"/es/macos/implement-beauty"},{"title":"Integración con terceros","href":"/es/macos/third-party-integration"},{"title":"Manejo de errores","href":"/es/macos/error-handling"},{"title":"Referencia de la API","href":"/es/macos/api-reference"},{"title":"Prácticas recomendadas","href":"/es/macos/best-practices"},{"title":"Preguntas frecuentes","href":"/es/macos/faq"}]},{"group":"Windows","icon":"windows","pages":[{"title":"Inicio rápido","href":"/es/windows/quick-start"},{"title":"Implementar belleza","href":"/es/windows/implement-beauty"},{"title":"Integración con terceros","href":"/es/windows/third-party-integration"},{"title":"Manejo de errores","href":"/es/windows/error-handling"},{"title":"Referencia de la API","href":"/es/windows/api-reference"},{"title":"Prácticas recomendadas","href":"/es/windows/best-practices"},{"title":"Preguntas frecuentes","href":"/es/windows/faq"}]},{"group":"Linux","icon":"linux","pages":[{"title":"Inicio rápido","href":"/es/linux/quick-start"},{"title":"Implementar belleza","href":"/es/linux/implement-beauty"},{"title":"Integración con terceros","href":"/es/linux/third-party-integration"},{"title":"Manejo de errores","href":"/es/linux/error-handling"},{"title":"Referencia de la API","href":"/es/linux/api-reference"},{"title":"Prácticas recomendadas","href":"/es/linux/best-practices"},{"title":"Preguntas frecuentes","href":"/es/linux/faq"}]},{"group":"Web","icon":"globe","pages":[{"title":"Inicio rápido","href":"/es/web/quick-start"},{"title":"Implementar belleza","description":"Integra Facebetter Web SDK 2.0","href":"/es/web/implement-beauty"},{"title":"Integración con terceros","href":"/es/web/third-party-integration"},{"title":"Manejo de errores","description":"Errores del SDK Web Facebetter 2.0","href":"/es/web/error-handling"},{"title":"Referencia de la API","href":"/es/web/api-reference"},{"title":"Prácticas recomendadas","href":"/es/web/best-practices"},{"title":"Preguntas frecuentes","href":"/es/web/faq"}]}]},{"tab":"Effect Creator","pages":[{"title":"Effect Creator","href":"/es/effect-creator/introduction"}]},{"tab":"Plugin de OBS","pages":[{"title":"Plugin de OBS","href":"/es/obs/install"}]},{"tab":"Plugins de edición","pages":[{"title":"Plugins de edición","href":"/es/fcp/install"}]}]},{"language":"pt-BR","navbar":{"links":[{"href":"https://facebetter.net/pt-BR","label":"Site"},{"href":"https://facebetter.net/pt-BR/dashboard","label":"Console"},{"href":"https://facebetter.net/pt-BR/download","label":"Downloads"}]},"pages":[{"title":"pt-BR","href":"/pt-BR/web/third-party-integration"}]}]},"basePath":"","title":"Integración con terceros - Facebetter Docs","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}