Files
labmagic/README.md

139 líneas
10 KiB
Markdown
Original Blame Histórico

Este archivo contiene caracteres Unicode ambiguos

Este archivo contiene caracteres Unicode que pueden confundirse con otros caracteres. Si crees que esto es intencional, puedes ignorar esta advertencia. Usa el botón de Escape para revelarlos.

# Labmagic
Aplicación sencilla de Windows para controlar una Blackmagic Pocket Cinema Camera por
Bluetooth LE: ver si está conectada, disparar el autofoco, mover foco y diafragma, grabar,
y ajustar ISO, obturador, balance de blancos, LUT y otras funciones.
Probada el 8 de octubre de 2026 con la cámara `A:4A5A3B39` (dirección `90:FD:9F:C4:AD:B2`),
protocolo Blackmagic 0.1.0, Windows 11 y Python 3.12.
## Cómo arrancarla
- **En este PC**: icono «Labmagic» en el escritorio y en el menú Inicio. Abre la app sin
consola (usa el `pythonw.exe` firmado de Python 3.12, que Windows sí deja ejecutar).
- **En otro PC**: `dist\Labmagic.exe` (un solo archivo, sin consola, no necesita Python).
Tarda 2 o 3 segundos en abrir: no hace falta pulsar dos veces.
- **Desde el código**: doble clic en `Iniciar Labmagic.bat` (o `py -3.12 app.py`).
Requiere Python 3.12 y `bleak` 3.x (`py -3.12 -m pip install -r requirements.txt`).
- **Recompilar el .exe** tras cambiar el código: doble clic en `Compilar exe.bat`.
### Por qué el .exe no abre en este PC
Este equipo tiene activado **Smart App Control** de Windows 11. Bloquea cualquier .exe sin firma
digital con reputación, y cada compilación de PyInstaller es un archivo nuevo sin firma, así
que lo bloquea («Una directiva de Control de aplicaciones bloqueó este archivo», evento 3118
de CodeIntegrity). Por eso aquí la app se lanza con los accesos directos a `pythonw.exe`.
Opciones para que el .exe funcione en este PC: firmarlo con un certificado de firma de código
reconocido, o desactivar Smart App Control (Seguridad de Windows > Control de aplicaciones y
navegador; una vez apagado no se puede volver a encender sin reinstalar Windows). En un PC sin
Smart App Control el .exe abre sin más.
Probado el 8 de octubre de 2026 con el .exe y la cámara real: conexión, autofoco, barras de
color, grabar y parar (la cámara confirma cada orden y el timecode corre durante la grabación).
## Panel dentro de OBS
Labmagic sirve una versión web de su panel mini en `http://127.0.0.1:8790/` (archivos
`obs_dock.py` y `dock.html`). OBS Studio 28 o superior la puede acoplar como un dock más con
**Docks → Custom Browser Docks** (nombre `Labmagic`, esa URL). El panel habla con la app, que es
quien tiene la conexión Bluetooth (la cámara solo admite un proceso a la vez): si Labmagic no está
abierta, el dock lo avisa y se conecta solo en cuanto la abres.
- Tiene lo mismo que la vista mini: HUD con timecode y celdas FPS · SHUTTER · IRIS · ISO · WB ·
TINT (pulsables, abren una hoja inferior estilo cámara), AF, PEAK (clic derecho: color), zebra,
falso color, AF auto, foco e iris con pasos, REC, línea de formato y «abrir Labmagic».
- Teclado con el dock enfocado: espacio = AF, ← → = foco (Mayús = pasos grandes).
- En **AJUSTES → Panel para OBS** se apaga o enciende, se copia la URL y el botón **Añadir a OBS**
lo registra en OBS (con OBS cerrado; guarda copia `user.ini.labmagic.bak`). Si el puerto 8790
está ocupado la app prueba los siguientes y guarda el elegido en `config.json` (`obs_port`).
## Uso
1. **Emparejar la cámara** con el botón **Emparejar (PIN)** de la app: quita el emparejamiento
viejo de Windows, pide uno nuevo y abre una ventana para escribir el PIN de 6 cifras que la
cámara muestra en pantalla (en la cámara, Bluetooth activado en Ajustes > Setup). Hay que
repetirlo si la cámara olvida el PC (la app lo avisa: «acceso denegado al servicio de control»
y el estado dice «Hace falta emparejar»). También vale emparejar desde Configuración de
Windows > Bluetooth y dispositivos.
2. Abrir la app. Busca sola las cámaras emparejadas y las que se anuncian y, con **Conectar al
abrir** activado (por defecto), conecta sola con la cámara de la última vez. Si no, elige la de
la lista y pulsa **Conectar**. El punto verde y la línea de estado indican conexión, cámara
encendida, versión de protocolo y alimentación.
3. **HUD superior, como la pantalla de la Pocket**: timecode en grande (se pone rojo y parpadea
un punto al grabar) y las celdas FPS · SHUTTER · IRIS · ISO · WB · TINT con los valores actuales.
Pulsar una celda abre un menú rápido: ángulos y velocidades de obturador, f/ del diafragma
(y Auto iris), ISO, Kelvin (y Auto WB) y tinte.
4. **Organización como la cámara, en pestañas**: PRINCIPAL (enfoque, diafragma y zoom, ISO /
obturador / balance de blancos, REC), GRABACIÓN (formato, códec, rango dinámico,
autoexposición), MONITOR (ayudas y overlays por salida, LUT, barras, reset de color) y AJUSTES
(cámara, emparejar, conectar al abrir, apagar, registro). El HUD queda siempre arriba.
5. Controles:
- **Enfoque**: botón grande de autofoco (también con la **barra espaciadora**); junto a él el
conmutador **PEAKING** (focus assist con líneas de color, color elegible: rojo, verde, azul,
blanco o negro) para ver dónde está enfocando; **AF automático cada N segundos** para mantener
enfocado a alguien sin tocar nada; deslizador de foco manual y pasos ◀ ▶.
**Con objetivos EF por adaptador (24-105 con el Metabones 0.64x) hace falta el firmware del
adaptador al día** (Metabones App, V5.10 en oct-2026): con el firmware viejo la cámara ignoraba
AF y foco manual; con el nuevo, medido el 9-oct-2026 sobre el HDMI, el AF, las posiciones
absolutas (0,05 / 0,5 / 0,95) y los pasos relativos (±0,2) mueven el objetivo. El objetivo EF
sigue sin informar de su posición: la app muestra la última posición enviada y tras un AF la
da por desconocida («—») hasta que se mueve el deslizador. Flechas ← → = pasos de 0,01,
con Mayús = 0,05; barra espaciadora = AF.
**Verificación del AF (9-oct-2026)**: el paquete que envía la app es byte a byte el del ejemplo
oficial del manual (`ff 04 00 00 00 01 00 00`). Midiendo la nitidez del HDMI en OBS a 10
muestras/s, las barras de color y el auto iris cambian la imagen al instante, pero tras el AF
el objetivo no se mueve nada (ni barrido ni cambio). Es decir, la cámara recibe la orden y el
objetivo no la ejecuta. Lista de comprobación: (1) interruptor del objetivo en **AF**;
(2) pulsar el botón **Focus** físico de la cámara: si tampoco enfoca, el adaptador no da AF con
ese objetivo (Metabones XL 0.64x necesita firmware 3.x actualizado con la app de Metabones por
USB; Viltrox EF-M2 igual); (3) si el botón físico enfoca y la app no, avisar para investigar.
- **Diafragma**: auto iris, deslizador 0 (abierto) a 1 (cerrado) y pasos; se muestra el f/ real
que informa la cámara.
- **Zoom**: deslizador para objetivos motorizados; la focal en mm se muestra siempre.
- **Grabación**: botón GRABAR / PARAR, estado de transporte, formato y códec. Debajo, el panel
**Formato de grabación**: códec (BRAW Q0/Q1/Q3/Q5/3:1/5:1/8:1/12:1, ProRes HQ/422/LT/Proxy),
resolución (DCI 4K, 4096×1720, UHD, 2.6K, HD), fotogramas (23.98 a 60), fotogramas del sensor
para off-speed y ventana del sensor; **Aplicar formato** envía códec (10.0) y formato (1.9). La
cámara responde con el formato real que ha aceptado y el panel se actualiza con él.
- **Monitor y utilidades**: selector **Aplicar en** (HDMI, pantalla LCD o ambas; por defecto HDMI
porque la cámara va remota). Las ayudas (zebra, peaking, falso color) y los overlays (texto de
estado, guías de encuadre, señal limpia) se envían con el campo «pantallas destino» del
protocolo (4.1 y 3.0), así que afectan solo a la salida elegida.
- **Exposición y color**: ISO, ángulo o velocidad de obturador, balance de blancos (Kelvin y
tinte, presets y Auto WB), modo de autoexposición, rango dinámico y LUT de monitor.
- **Monitor y utilidades**: zebra, peaking, falso color, barras de color, reset de corrección
de color y apagar la cámara (con confirmación).
- **Registro**: todo lo que se envía y lo que la cámara responde, con nombres legibles.
## Detalles que conviene saber
- **Al conectar, la app pide a la cámara toda su configuración.** La cámara solo la envía sola
cuando el enlace Bluetooth es nuevo, pero escribir el valor 0x21 (Camera Ready sin «Initial
Payload Received») en la característica Camera Status hace que la reenvíe siempre. Así el HUD
(FPS, obturador, iris, ISO, WB, tinte), el formato, el códec y el objetivo se rellenan en unos
6 segundos tras cada conexión, aunque Windows reutilice un enlace ya abierto.
- En este firmware la operación «offset» del protocolo se comporta como asignación absoluta,
por eso los pasos ◀ ▶ del diafragma solo se activan cuando se conoce el valor actual.
- Las ayudas de monitor (zebra, peaking, falso color) y el apagado por Bluetooth dependen del
firmware; si no cambian nada en la cámara es que no las acepta por este canal.
- Los nombres de las variantes de códec (BRAW 5:1, ProRes HQ, etc.) siguen la tabla del
Blackmagic Camera Control Developer Guide; si alguno no coincide con la cámara, es solo etiqueta.
- `config.json` guarda la última cámara usada y el tamaño de la ventana.
- Solo puede haber una copia abierta: si se vuelve a lanzar, trae al frente la que ya está.
- Estética: negro y gris oscuro como la pantalla de la cámara, barra de título oscura. Icono:
cuadrado rojo con bordes redondeados, borde blanco y el «lab» del wordmark real de Labstream
más un punto blanco (opción 2 de `iconos/opciones.png`; `make_icon.py` genera las cuatro
opciones a partir de `0_Modelo Propuestas/Logos/Logo Blanco.png`; para cambiarla, ajusta
`OPCION_POR_DEFECTO` y vuelve a ejecutarlo).
- El «acceso denegado al servicio de control» al conectar casi siempre significa que otra
aplicación de este PC ya está conectada a la cámara (otra copia de Labmagic, un script o la
ventana de Configuración > Bluetooth); solo si no es eso hay que volver a emparejar.
## Archivos
- `app.py`: ventana (Tkinter).
- `bmpcc_ble.py`: protocolo Blackmagic Camera Control sobre BLE (bleak), búsqueda de cámaras
emparejadas y anunciadas, envío y decodificación de parámetros.
- `Iniciar Labmagic.bat`: lanzador.
- `requirements.txt`: dependencias de Python.