139 líneas
10 KiB
Markdown
139 líneas
10 KiB
Markdown
# 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.
|