Labmagic 1.0: control de la Blackmagic Pocket 4K por Bluetooth, panel para OBS y licencia MIT
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
138
README.md
Archivo normal
138
README.md
Archivo normal
@@ -0,0 +1,138 @@
|
||||
# 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.
|
||||
Referencia en una nueva incidencia
Block a user