
Per què la gravació de pantalla captura el monitor equivocat (i com ho vam corregir)
En una configuració de dos monitors, GeekBye gravava i feia captures de la pantalla principal sense importar en quina pantalla treballaves. La correcció era una petita funció — però la primera versió era errònia, i la revisió de codi va trobar per què.
Aquí teniu un bug que només existeix si tens dos monitors — per això va viure tranquil·lament durant un temps. Treballes a la pantalla lateral, inicies una gravació de GeekBye, i grava el teu monitor principal. El que té la barra de menú. El que no miraves.
El mateix defecte, més silenciós i pitjor, afectava les captures que GeekBye envia a la IA com a context: prem la drecera de captura al teu segon monitor, i la IA rep una imatge del primer. No hi ha cap senyal visual — l'assistent simplement respon sobre la pantalla equivocada i tu et quedes preguntant-te per què està confós. GeekBye v2.0.10 va corregir tots dos.
Dues canonades, un mateix valor per defecte gandul
La captura de pantalla a l'escriptori són dos camins de codi separats, i tots dos havien triat independentment la pantalla principal:
- La gravació de vídeo enumerava les fonts de pantalla disponibles i agafava la primera —
sources[0]. A macOS això és, a efectes pràctics, sempre la pantalla principal. Sense selector, sense cap lògica sobre on eres realment. El comentari al nostre propi codi deia literalment "auto-select first screen source." - Les captures feien servir l'ordre
screencapturede macOS amb la bandera-m. Aquella bandera té exactament un significat: main display only (només pantalla principal). Escrit a foc.
Cap dels dos camins no es va fer mai la pregunta que importa: en quina pantalla és l'usuari?
Una cosa que mai no va estar trencada, que val la pena aclarir perquè la gent assumeix que sí: canviar entre Spaces de macOS al mateix monitor sempre va funcionar. La captura passa a nivell de pantalla — agafa el Space que sigui visible a la pantalla triada. El bug mai no va anar de Spaces. Sempre va anar de triar la pantalla física equivocada.
La correcció que semblava òbvia — i era errònia
El senyal correcte sembla fàcil: capturar la pantalla on l'usuari és. La nostra primera implementació es va ancorar a la finestra overlay de GeekBye — capturar la pantalla on visqui l'overlay.
La revisió de codi la va matar, encertadament. L'overlay de GeekBye es crea com una finestra a àrea de treball completa a la pantalla principal, a la posició (0,0). Només es mou a un altre monitor si arrossegues físicament la seva pastilla fins allà — i les dreceres de teclat que la desplacen la limiten a les dimensions de la pantalla principal, així que no poden moure-la a un segon monitor de cap manera. Ancorar la captura a l'overlay significava: per a cada usuari que no hagués arrossegat casualment l'overlay a la seva pantalla de treball, la "correcció" tornava directament a la pantalla principal. No hauria arreglat gairebé ningú — tot i que, en una prova ràpida en una màquina de desenvolupament d'un sol monitor, semblava que funcionava.
L'àncora correcta és el cursor. Allà on sigui el ratolí, aquella és la pantalla on treballes — i és correcta per a cada manera com comença una captura: una drecera de teclat es dispara allà on apuntes, i clicar el botó Gravar posa el cursor en aquella pantalla per definició. La correcció final és una funció de dues línies: la pantalla més propera al cursor. El vídeo fa coincidir la seva font de captura amb l'id d'aquella pantalla; les captures passen els límits d'aquella pantalla a screencapture -R (un rectangle específic) en lloc de la bandera -m de pantalla principal.
Vam triar -R (un rectangle explícit en coordenades globals de pantalla) per damunt de -D (un índex de pantalla) deliberadament: l'índex de pantalla del sistema operatiu no té cap correspondència garantida amb l'ordre de pantalles del framework, així que un índex seria un segon joc d'endevinar. Un rectangle a partir dels límits reals de la pantalla és inequívoc — i vam verificar el comportament de la bandera, incloses les coordenades negatives per a pantalles situades a l'esquerra de la principal, en un equip multi-monitor real abans de publicar.
Per què aquest és un bon bug per aprendre
- "Captura la pantalla" amaga una decisió. En una sola pantalla no hi ha decisió, així que la decisió mai no es dissenya — es deixa per defecte. El multi-monitor és on aflora cada valor per defecte implícit.
- Fallar en silenci és pitjor que fallar de manera visible. El bug de vídeo molestava la gent. El bug de captura enganyava la IA, invisiblement. Quan construeixes funcions que alimenten context a un model, una entrada errònia produeix una sortida errònia amb confiança i sense cap error enlloc. Aquestes són les fallades que cal caçar amb més ganes.
- Una correcció que passa a la teva màquina pot fallar a la de tothom altre. La versió ancorada a l'overlay funcionava en una prova d'un sol monitor. Tot el sentit del bug són múltiples monitors — i el revisor va raonar sobre la posició real de la finestra en lloc de fiar-se de la prova verda. La revisió no és un segell sobre codi que funciona; és un segon model de per què el codi funciona.
GeekBye v2.0.10 publica la correcció basada en el cursor tant per a la gravació com per a les captures. Si fas servir múltiples pantalles, ara la captura et segueix.
Per als llançaments veïns d'aquesta sèrie, mira per què el teu assistent de notes amb IA deixa de gravar a mitja reunió (v2.0.9) i per què la transcripció amb IA sent malament els termes tècnics (v2.0.11). Per a com es comporta l'overlay durant les trucades, mira com mantenir-te invisible mentre comparteixes pantalla.