Saltar al contenido principal

init y arranque

OBVto.init(opts) → Promise<VtoEngine>

Carga los módulos solicitados, resuelve la licencia y devuelve el motor listo para arrancar.

Campos de InitOptions

CampoTipoObligatorioDescripción
modulesstring[]Módulos a activar, p.ej. ['hair-color'].
containerstring | HTMLElementNoSelector CSS o elemento destino. Sin él, se crea un overlay de pantalla completa.
licenseKeystringNoClave de licencia (requerida en producción). En dev puede omitirse.
configEndpointstringNoURL del endpoint que devuelve la LicenseConfig (?key=…).
licenseProviderLicenseProviderNoProvider explícito (enchufable; tiene prioridad sobre configEndpoint). Útil en tests.
moduleConfigRecord<string, Record<string, unknown>>NoOpciones por módulo pasadas a su factory (p.ej. modelUrl, wasmPaths).
experienceExperienceConfigNoActiva la pantalla de inicio. Requiere start. Ver 03-inicio-y-branding.md.
startStartOptionsNoOpciones del visor para el arranque automático tras elegir modo en la pantalla de inicio. Requiere experience.

Tabla exhaustiva de tipos en 10-referencia-de-tipos.md.

Headless vs selector de inicio

Sin experience (modo headless): init devuelve el motor y no monta ninguna pantalla. El host decide cuándo y cómo llamar a vto.start():

const vto = await OBVto.init({
modules: ['hair-color'],
container: '#vto',
})
// El host llama start() cuando quiera (p.ej. al pulsar un botón)
await vto.start({ module: 'hair-color', colors: TONOS })

Con experience + start: init monta la pantalla de inicio (selector de modo: cámara / foto). Al elegir modo, el SDK arranca el visor automáticamente con las opciones de start. El host no llama vto.start() directamente:

const vto = await OBVto.init({
modules: ['hair-color'],
container: '#vto',
experience: {
branding: { name: 'AURA' },
},
start: {
module: 'hair-color',
colors: TONOS,
ui: { branding: { name: 'AURA' } },
},
})
// El SDK gestiona el flujo completo desde aquí

Si se pasa experience sin start, init lanza un error en tiempo de ejecución.


vto.start(opts)

Arranca la captura (cámara o foto) y aplica el módulo. Los campos principales de StartOptions:

CampoTipoDefaultDescripción
modulestringId del módulo a activar (debe estar en modules del init).
source'camera' | 'photo''camera'Fuente de imagen. 'camera' abre getUserMedia; 'photo' usa una imagen fija.
imageHTMLImageElementRequerido cuando source es 'photo'.
colorsColor[]Lista de tonos de la paleta. El primero se aplica al arrancar.
defaultIntensitynumber0.7Intensidad inicial del efecto (rango 0–1).
uiViewerUIConfigSi se pasa, el SDK monta el chrome del visor (barra, card, favoritos). Sin él, el SDK es headless.

Ejemplo con UI mínima

const TONOS = [
{ id: 'cobrizo', name: 'Cobrizo Rubí', h: 358, s: 82, l: 46 },
{ id: 'neon-verde', name: 'Neón Verde', h: 110, s: 100, l: 50 },
]

await vto.start({
module: 'hair-color',
source: 'camera',
colors: TONOS,
ui: { branding: { name: 'AURA' } },
})

Pasar ui monta la barra del visor con la marca AURA. Para configurar controles, producto y favoritos ver las páginas 0406.

Modo foto

const img = new Image()
img.src = '/foto-cliente.jpg'
await img.decode()

await vto.start({
module: 'hair-color',
source: 'photo',
image: img,
colors: TONOS,
})

image es obligatorio cuando source es 'photo'. El loop renderiza sobre la imagen estática en lugar de video.