Concepto clave: Todos los botones emiten por socket.io → server.py → state["labels"] → labels_state → layout.html. Algunos son toggle directo (toggleLabel), otros abren modal intermedio (openPodioModal, openUltimasVueltasModal, openSeriesModal, openComparativaModal, openRaceControlModal, openClimaModal, openCustomRotulosModal, openGrupoclasModal, openGrillaPreview, openBatallaPosModal, cdOpen, mmOpen). Las banderas usan toggleBandera(clave) y comparten la misma caja visual en pantalla — solo una manual a la vez. El Cuenta Vueltas tiene además banderas automáticas del timing (data.flag: yellow/green/red/finish/none) configuradas en Editor de Estilo → Banderas → Superior/Inferior.
1. LABELS / OVERLAYS — todos los botones explicados
| Botón (como se ve) | Qué hace exactamente | Cuándo usarlo / dependencias |
| Cuenta Vueltas | Muestra vueltas totales, restantes o tiempo (según CONFIG → Cuentavueltas). Es el único que cambia de color automáticamente con la bandera que manda el cronometraje (amarilla, verde, roja, a cuadros). Debe quedar prendido casi toda la carrera. Internamente data-label="cuentavueltas" → #ovl-cuentavueltas en layout. | Base fija de transmisión. Modo se elige en CONFIG. Si tu fuente no manda flag, queda en verde/none. No depende de campeonato. |
| Crawl Superior | Tira horizontal superior con posiciones, gaps, intervalos. Respeta Corte de posiciones (TODOS/CORTE), Mostrar/Ocultar Eliminados y Resaltado de Ranking. Usa datos de competitors vivos. | Base fija junto con Totem y Cuenta Vueltas. Para filtrar, usá CORTE y Eliminados. |
| Totem Lateral | Columna vertical con posiciones. Columna derecha configurable: logo de marca o cantidad de sobrepasos. Columna de dif configurable: diferencia real o paradas restantes. | Base fija. Config rápida en SLOT DERECHO / FUENTE / MOSTRAR EN DIF/GAP. Marca viene de drivers/{gid}.json → marca. |
| Vuelta Rápida | Destaca la mejor vuelta de la carrera hasta ese momento. Si hay nueva mejor mientras está al aire, se actualiza solo. | Úsalo como destaque 5-10s cada vez que alguien baja el récord. No lo dejes fijo. |
| Ganador | Rótulo de ganador. Es zona segura: LABELS_INDEPENDIENTES_DE_GRUPO — no se borra al cambiar de grupo/tanda. Queda hasta Reset. | Cierre con bandera a cuadros. data-label="ganador" |
| Clasif. Final | Tabla final estática (no viva). Paginada con ◀ Anterior / Siguiente → cfCmd('prev'/'next') → state._cf_page. Solo funciona si el overlay está al aire. | Post carrera, cuando ya no hay datos vivos. Permite recorrer toda la clasificación. |
| 🏆 Podio | Abre modal: confirmás P1-P2-P3 y luego manda al aire. No es toggle directo. | openPodioModal() → confirma → labels_state.podio |
| Speed Trap | Velocidad máxima por sector. Cálculo en server.py → calc_speedtrap(): largo * factor / tiempo_sector * 3.6. Usa autódromo activo con extensión, sector y factor. | Tras rectas largas. Requiere autódromo activo con datos de SpeedTrap cargados. Si vacío, sale vacío. |
| 🏁 Últimas Vueltas | Abre modal con histórico de últimas vueltas por piloto. Usa state["_ultimas_vueltas"] que se llena en cada poll del timing. | openUltimasVueltasModal(). Para análisis de ritmo en relanzamientos. |
| Top 10 Pit Stop ACTC | Top 10 paradas más rápidas en boxes. Datos de PitBox / timing. Solo visible en perfil ACTC. | labelPreviewOrToggle(this,'top10pitstops','pitstop') |
| Top 7 Marcas | Agrupa por marca (Ford, Chevrolet, etc.) y muestra mejores por marca. Marca desde Drivers. | Categorías multimarca. Si marca no mapeada, no aparece. |
| 🏆 Campeonato Completo | Tabla de campeonato histórico (pre-carrera). Zona segura. Paginado con champCmd('prev'/'next') → state._champ_page. Respeta Solo Apellido y rows_per_page del estilo visual. | Previa y post. Requiere campeonato activo en campeonatos.json |
| Seguidor | Focus en un piloto seguido: muestra gap adelante y atrás. Piloto seguido se elige en CONFIG o clic en clasificador. | Para onboard o persecución específica. |
| 🏆 Campeonato Reducido | Versión compacta del campeonato, menos filas, ideal para overlay chico. | Zona segura. Mismo origen que Completo pero layout reducido. |
| Mejores Parc. | Mejores parciales (sectores) del día. Toma bs1..bs5 (best sector personal) del timing. | Útil para ver dónde se hace la diferencia. Requiere fuente con sectores. |
| 🏆 Campeonato En Vivo | Solo puntos de hoy, sin histórico. Calcula según regla de puntos activa. | Durante carrera para ver puntos que se están ganando ahora. |
| 📰 Series | Abre modal de Series / Baterías. Muestra grillas de series clasificatorias. | openSeriesModal(). Para fin de semana con series. |
| 🏆 Campeonato Post Carrera | Histórico + puntos de esta carrera sumados según regla activa. Es el cierre oficial con puntos ya aplicados. | Al final, cuando terminó todo. Necesita regla de puntos. |
| Top 10 Avances | Top 10 pilotos que más avanzaron: pos_largada - position. Cálculo en enrich_grilla() usando cfg.grilla_activa → secuencia. | Tras largada o relanzamiento. Requiere grilla activa. |
| ✕ Comparativa | Abre modal de comparativa por sectores S1-S5 vs otro piloto. Requiere autódromo con total + S1..S5 cargados. | openComparativaModal() |
| 🏁 RaceControl ACTC | Mensajes de Dirección de Carrera: investigaciones, recargos, apercibimientos. Abre modal editor. | openRaceControlModal(). Solo ACTC. |
| 🏆 Record Circuito ACTC | Muestra récord oficial del circuito activo. Datos de circuitos.json → autódromo activo. Zona segura. | Previa, para contexto histórico. |
| ☁️ Clima | Abre modal de Clima → foto fija de condiciones. Guarda en _clima_data zona segura. El botón NO se ilumina (excepción). | openClimaModal(). Ver guía clima.php. Es foto fija, no live. |
| Mejores Últimas 5 V | Top consistencia: mejores promedios de últimas 5 vueltas por piloto. Usa histórico _ultimas_vueltas. | labelPreviewOrToggle(...'records5v') |
| 🟢 RÓTULOS CUSTOMIZADOS | Rótulos libres creados por usuario (tercios custom). Abre modal gestor. | openCustomRotulosModal(). Verde en UI real #102216 / #2e7a3f. |
| Top 10 Refuelling ACTC | Top 10 tiempos de recarga: tiempo Pit Stop - offset. Offset se carga en input #top10-refuel-offset-input → cfg.top10_refuel_offset. Acepta decimales con punto, no coma. | Separa tiempo de combustible. Si offset vacío, no resta. Usar punto: 22.9 |
2. Configuradores rápidos del Totem/Crawl — SLOT DERECHO / FUENTE / MOSTRAR EN DIF/GAP
En tu captura 1 aparecen justo debajo de los botones principales. Son 3 filas que cambian el storytelling sin ir a CONFIG.
| Fila | Opciones | Qué cambia en pantalla | JS / config |
| SLOT DERECHO: | Logo Marca / Sobrepasos | Columna derecha del Totem: logo de marca (de Drivers) o número de sobrepasos del piloto. | setTotemSlot(v) → cfg.totem_slot — Azul activo #7dd3fc |
| FUENTE: ACTC | PARADAS / COMB / NEUM / MANUAL | Ícono de paradas en Totem/Crawl: PARADAS=número puro, COMB=bidón combustible, NEUM=neumático, MANUAL=planilla Google Sheets. MANUAL lee paradas_manual.json. | setStopsMode(v) → cfg.cf-stops-mode — Verde activo #bbf7d0 |
| MOSTRAR EN DIF/GAP: | Diferencias / Paradas | En columna de diferencias: dif=gap/intervalo real, paradas=paradas restantes obligatorias. | setStopsDisplayMode(v) → cfg.cf-stops-display — Azul activo |
3. Banderas / Situaciones — 10 estados manuales + 2 automáticas
Las manuales comparten misma caja en pantalla: state.manual.box = {width,height,top,left,align} editable en Editor de Estilo → Banderas. Solo una manual a la vez. Cada estado manual tiene: bgType, bg, bg2, bgMid, angle, bgImage, text, textOn, align, valign, fontFamily, fontSize, fontWeight, textColor, shadowMode, shadow, padding, radius. Texto admite token {N} solo en Últimas X.
| Botón (captura) | Clave | Cuándo usarlo | Detalle técnico |
| ● Formación (amarillo) | formacion / _bnd_formacion | Vuelta de instalación previa a largada | toggleBandera(this,'formacion') |
| ● Previa (amarillo) | previa | Himno, presentación, previa | Misma capa que resto |
| ● Pace Car (naranja) | safety | Safety Car real en pista | Diferente de amarilla automática del crono |
| ● Bandera Roja (rojo) | roja | Detención por incidente | Activa semáforo en rojo si está prendido |
| ○ Última Vuelta (blanco) | ultima | Última vuelta fija | No depende de vueltas restantes |
| ● VSC (amarillo) | vsc | Virtual Safety Car | Texto VSC |
| Actividad Demorada | demorada | Demora sin roja | Cartel neutro |
| 🏁 Últimas X Vueltas + badge 2 | ultimas_x | Cierre con cuenta regresiva real | #ultimas_x_n = rgLapsRemaining(currentData) → se actualiza solo. En editor {N} |
| 🚫 Carrera Suspendida | suspendida | Suspensión sin cancelación | Congela visual |
| ✕ Carrera Cancelada | cancelada | Cancelación definitiva | Cartel final |
Doble sistema: Automáticas del Cuenta Vueltas: CV_FLAG_STATES = yellow/green/red/finish/none → superior e inferior desde data.flag. Manuales: 10 estados, misma caja, se pisan. Se editan en Editor de Estilo → Banderas. Bloque arrastrable por grip ⠿ o flotar con bndPanelFloat() / bndPanelDock().
4. Paradas en Boxes — ACTC
| Control (captura 2) | Qué hace | Badge |
| 🅿 PARADAS EN BOXES | Modal con flotantes: En Boxes (cronómetro por auto) e Historial de Paradas. Solo si #cf-gestion-paradas-panel tildado en CONFIG. openParadasBoxModal() | #paradasbox-status-badge: rojo=sin actividad (tu foto), verde=auto en boxes, gris=sin configurar |
| 📋 GESTIÓN DE PARADAS (MANUAL) | Conecta Google Sheet. Guarda URL en cfg.paradas_manual_url. Alimenta SOURCE=MANUAL. openParadasManualModal() | #paradasmanual-status-badge: verde=conectado (tu foto), gris=sin configurar, rojo=error Sheets |
| ⛽ TOP 10 REFUELLING — RESTA (SEG): 0 | Input #top10-refuel-offset-input → cfg.top10_refuel_offset. Cálculo: tiempo_pitstop - offset = tiempo_recarga. Acepta decimales con punto. En tu captura 0. | Si vacío, no resta. Usar punto: 22.9 |
5. Campeonato, corte y visibilidad
| Control (captura 2) | Qué hace | Dependencias |
| CAMPEONATO ACTIVO: TC 2026 (63) | Elige campeonato para toda la sesión. Afecta todos los overlays de campeonato, resaltado y logos. champSetActiveFromPlay() | campeonatos.json — 63 pilotos en tu foto |
| REGLA: Regla Basica | Regla que define puntos por posición. Usada para Campeonato Post y En Vivo. Sin regla, suma 0. | reglas.json |
| CORTE: TODOS / CORTE / 8 | TODOS=sin corte. CORTE+N=solo primeras N en Crawl/Totem. Guarda cfg.corte_modo + cfg.corte_valor. Necesita 💾 corteSave(). En tu foto TODOS activo azul, 8 cargado. | Afecta Crawl y Totem |
| Mostrar/Ocultar Eliminados | Alterna cfg.mostrar_eliminados. Si off, DNF/OUT no aparecen. | competitors.estado |
| Apagar / Recuperar / Reset | Apagar guarda snapshot _labels_snapshot y apaga todo. Recuperar restaura. Reset borra snapshot, limpia _ultimas_vueltas y deja solo zona segura. | Recuperar solo si antes usaste Apagar |
| CLASIFICADOR FINAL: Anterior / Siguiente | Paginación → cfCmd('prev'/'next') → state._cf_page | Solo si overlay al aire |
| CAMPEONATO COMPLETO: Anterior / Siguiente | Paginación → champCmd('prev'/'next') → state._champ_page | rows_per_page del estilo |
6. Grupos, Grilla, Batalla, Countdown y Media
| Bloque (capturas 2,3,4) | Qué hace | Detalle técnico |
| GRUPOS CLASIFICATORIOS — Seleccionar — Mostrar / Gestionar | Muestra grupos de clasificación. Gestionar abre CRUD. | #gc-play-select → toggleGrupoClas() → grupos_clasificatorios.json |
| GRILLA DE PARTIDA — SELECCIONAR GRILLA + ↻ | Elige grilla, preview y manda al aire. En tu captura selector vacío + recarga. | #grilla-select-play → setActiveGrilla() → cfg.grilla_activa → enrich_grilla() pos_largada/avance. loadGrillas() /api/grillas, openGrillaPreview(), toggleGrillaOverlay(), /api/grilla_page/prev/next |
| ⚔ BATALLA POR POS — MOSTRAR/OCULTAR / APAGAR | Configurás pelea entre 2+ pilotos. Estado — sin batalla — en tu foto. | openBatallaPosModal() → state._batalla, toggleBatallaOverlay(), hideBatallaOverlay(), #batalla-status |
| ⏱ COUNTDOWN — RACE START IN — Editar/Play / Sacar | Cuenta regresiva largada. Seteás mm:ss, texto, beep. Estado — sin countdown — en tu foto. | cdOpen() → cd_start → layout 100ms, cdStop() → cd_stop, state._countdown |
| 🎬 MEDIA PLAYBACK — GESTOR / SALIDA Layout / DIRECTORIO ANIMATION_ALPHA_1.webm / PLAY PAUSA RESUME STOP REPLAY RESTAURAR / BLOQUES | Gestor define tamaño, posición, grupos. Salida: auto (Caspar si responde si no Layout), caspar, layout, both. Directorio lista /media. Conversión ⇄ WebM VP9+alpha para transparencia. Transporte con PLAY/PAUSE/END/LOOP/STG/5S y tiempos. Bloques reproducen grupo completo. | mmOpen() → media_groups.json, videoSetOutput(), videoLoadList() /api/media/list, videoUploadFile() /api/media/upload, videoConvert() /api/media/convert ffmpeg, videoCmd('play'/'pause'/'resume'/'stop'/'replay'/'restore'), plCmd('play'/'prev'/'next'/'stop'), state._playlist, #pl-quick-status, #video-status, .vtime .vtime-fill. Video por encima de todo. Formatos: mp4,mov,avi,mkv,mxf,m4v,webm,png,jpg,gif,webp,bmp,svg,tif,tga |
Flujo recomendado: Previa: CONFIG Fuente + Autódromo S1-S5 + total + SpeedTrap + Record + Campeonato + Regla + Polling. PLAY: Camp Completo, Record, Comparativa, Grilla, Clima, Previa. Largada: Countdown 05:00→00:00, Apagar, Cuenta Vueltas a Vueltas, prender Cuenta Vueltas + Crawl + Totem + Semáforo, Corte TODOS. Carrera: base fija 3, destaques 5-10s: Vuelta Rápida, Mejores Parc, Speed Trap, Top10 Avances, Batalla si <1s, Sobrepasos Amarilla revisando cola. Banderas: Pace/VSC/Roja/Demorada/Últimas X badge 2. Paradas ACTC: badge verde, SOURCE=FUEL o MANUAL, SHOW=Stops. Cierre: Última + Últimas X, Ganador, Podio, Clasif Final ◀▶, Camp Post + Camp Cambios animación 3s.