Race-G
⚠️ IMPORTANT NOTICE · EN
From Race-G v5.x onwards, documentation and support are provided exclusively in Spanish (Latin America).
⚠️ AVIS IMPORTANT · FR
À partir de la version Race-G v5.x, la documentation et l'assistance sont fournies uniquement en espagnol (Amérique latine).
⚠️ AVVISO IMPORTANTE · IT
Dalla versione Race-G v5.x in poi, la documentazione e l'assistenza sono fornite esclusivamente in spagnolo (America Latina).
⚠️ AVISO IMPORTANTE · PT
A partir da versão Race-G v5.x, a documentação e o suporte são fornecidos única e exclusivamente em espanhol (América Latina).
Race-G 3 · Configuración inicial Precisión de Tiempos

Precisión de Tiempos

3 · Configuración inicial

¿Cómo usar Precisión de Tiempos?

El cronometraje siempre manda tiempos con 3 decimales: 1:23.299, +0.456, 23.478. En TV muchas veces no entra todo ese texto, sobre todo en columnas chicas del Totem o Crawl. La Precisión de Tiempos te deja elegir cuántos decimales mostrar al aire: 1, 2 o 3. No redondea nunca: recorta. 1:23.299 con 2 decimales se ve 1:23.29, con 1 decimal 1:23.2. Así nunca inventás una milésima que no existió.

Recorte, no redondeo. Es a propósito. Si redondeás, 1:23.299 pasa a 1:23.30 y estás mostrando 1 milésima más de lo que hizo el piloto. Al recortar, siempre mostrás un tiempo igual o menor al real, nunca mayor. Es lo que exige reglamentación en muchas categorías y lo que espera el comisario deportivo.

1. Antes de empezar

⏱

El feed manda 3 decimales siempre

SpeedHive, Cronos, archivos guardados: todos mandan con 3 decimales. Race-G los guarda completos en window._lastRawData y window._cfResultRaw (copia sin truncar) y recién al mostrar los recorta según lo que elijas.

✂

Solo recorta strings ya formateados

La función truncDecimals(str, precision) busca ^([^.]*\.)(\d+)(.*)$: toma lo que está después del punto y deja solo los primeros N dígitos. Si el valor tiene menos decimales que los pedidos, lo deja intacto, nunca completa con ceros.

🎯

Lista blanca de campos

Solo toca tiempos con milésimas: besttime, lasttime, totaltime, secondbesttime, gap, difference, sector1-5, bestlaptime, ideal_time, time (solo dentro de filas). No toca posición, número, velocidad SpeedTrap, puntos, vueltas. Así no rompe nada por accidente.

🧹

Limpieza de ceros a la izquierda

Después de recortar, pasa por rgTrimTime: quita ceros innecesarios. 00:06.256 → 6.256, 00:00.256 → 0.256, 00:01:22.783 → 1:22.783, +00:01.234 → +1.234. Lo que no parece tiempo (“1 Vuelta”, “PIT”) queda igual.

2. Dónde está

🖼️
Falta captura: Screenshots/precision-config.pngSelect con 1 decimal ej 1:23.2, 2 decimales ej 1:23.29, 3 decimales ej 1:23.299 original.
⚙

CONFIG → Display → Precisión de tiempos

Select cf-time-precision con 3 opciones: 1 decimal — ej: 1:23.2, 2 decimales — ej: 1:23.29, 3 decimales — ej: 1:23.299 (original). Guardado en config.json → display.time_precision default 3.

📡

API y vivo

GET /api/time_precision devuelve {time_precision:3}. POST /api/time_precision {time_precision:2} guarda en config, hace clamp 1-3 (si mandás 0 o 5 vuelve a 3) y emite socket time_precision_change {time_precision}. El layout lo aplica al instante sin recargar.

🔄

Copia sin truncar guardada

Cuando cambiás precisión, el layout no pide datos nuevos al crono: reaplica recorte sobre window._lastRawData (último dato vivo sin truncar) y window._cfResultRaw (resultado guardado del Clasificador Final). Por eso podés cambiar de 3 a 1 decimal al aire sin perder milésimas: al volver a 3 siguen ahí.

3. Cómo funciona el recorte

Llega el dato con 3 decimalesEl servidor en /api/layout_data manda _cfg_time_precision junto con competitors, all_competitors, ref_lider, ref_pole, ref_ideal, last5_best_laps. Viene de cfg.display.time_precision default 3.
applyTimePrecision(data)En layout.html, apenas entran datos, se llama applyTimePrecision: parsea precisión, la guarda en window._cfgTimePrecision, y recorre con _truncTimeFieldsOf(obj, precision, isTop) a data (isTop true, no toca time si es hora del día), ref_lider, ref_pole, ref_ideal, competitors, all_competitors (array APARTE de competitors, usado por Crawl y Totem), last5_best_laps. Cada campo de la lista blanca pasa por truncDecimals + rgTrimTime.
Clasificador Final guardadoSi mostrás un resultado guardado (no vivo), no pasa por applyTimePrecision. Para eso existe _cfApplyPrecisionToRows(rows): clona filas con JSON.parse(JSON.stringify(rows)) para no pisar original sin truncar y aplica misma lógica. Se usa en sock.on('labels_state') y sock.on('time_precision_change') para que el Clasificador Final también respete precisión aunque esté mostrando archivo viejo.
🖼️
Falta captura: Screenshots/precision-layout.pngComparativa de tabla con 3 decimales vs 1 decimal: 1:23.299 → 1:23.2, +0.456 → +0.4, 23.478 → 23.4.

4. Dónde se ve el cambio

📊

Tabla en vivo

Mejor T., Última V., Total, Gap, Diferencia, Sectores. Todo lo que sea tiempo con punto se recorta.

🗼

Totem y Crawl

Totem lateral y Crawl Superior/Inferior leen all_competitors, que también se trunca. Por eso el Totem respeta precisión aunque use copia distinta a la tabla. Importante porque Totem tiene columnas angostas.

🏁

Clasificador Final y Campeonato en Vivo

Clasificador Final vivo y guardado, Campeonato Completo y En Vivo, Últimas Vueltas, Mejores 5 Vueltas, referencias de líder/pole/ideal. Todos pasan por misma lista blanca.

⏱

Acortado extra de TotalTime +59 min

Además de precisión, existe shortenTotalToTenths(str): si tiempo total supera 59 minutos (carreras largas de horas), recorta TotalTime a 1 decimal aunque tengas 3 seleccionado, porque “2:23:45.123” no entra en columna. Umbral: totalSec > 59*60. Si es menor (23 min, 45 min, 58 min) deja 3 decimales completos.

5. Parámetros a tener en cuenta

ParámetroDefaultQué hace y validación
display.time_precision31, 2 o 3. En API y CONFIG se hace clamp: si mandás <1 o >3 vuelve a 3. En layout si isNaN vuelve a 3.
_TIME_PRECISION_KEYSbesttime, lasttime, totaltime, secondbesttime, gap, difference, sector1-5, bestlaptime, ideal_time, timeSolo esos campos se tocan. time solo dentro de filas (competitors), no a nivel superior donde puede ser hora del día.
truncDecimalsrecorteRegex ^([^.]*\.)(\d+)(.*)$ . Si decPart.length <= precision no toca. Ej: 1:23.2 con precisión 2 queda 1:23.2 (no agrega cero).
rgTrimTimelimpiezaQuita 00: iniciales pero deja al menos un dígito. Conserva + / - si es gap.
shortenTotalToTenthssolo TotalTime >59 minRegex \.(\d)\d+$ → .$1. Solo si total supera 59 minutos.

6. Cómo se usa en transmisión — flujo recomendado

Clasificación: dejar en 3 decimalesEn quali necesitás milésimas completas para definir pole. Dejá 3 decimales — ej: 1:23.299 (original).
Carrera corta (<1 hora): podés usar 2 decimalesSi tu Totem es angosto y no entra +0.456, poné 2 decimales → +0.45. Sigue siendo preciso y ganás espacio. El gap se lee igual.
Carrera larga o Endurance: 1 decimalPara carreras de 3, 6, 12 horas, el TotalTime con 3 decimales es inmenso (2:34:12.123). Con 1 decimal entra mejor y no necesitás milésimas para contar vueltas. Además shortenTotalToTenths lo hace solo si pasa 59 min.
Cambio al aireCONFIG → Display → Precisión → cambiá valor → setTimePrecision() → POST /api/time_precision → socket time_precision_change → layout reaplica sobre copia sin truncar. No hace falta recargar layout ni crono.
Clasificador Final guardado respeta tambiénSi mostrás resultado de ayer guardado y cambiás precisión hoy, se reaplica vía _cfApplyPrecisionToRows sobre _cfResultRaw. No tenés que re-guardar resultado.

7. Precauciones

Nunca redondea, siempre recorta. 1:23.299 con 2 decimales es 1:23.29, no 1:23.30. Si tu reglamento exige redondeo, no uses esta opción: mostrá 3 decimales y recortá en post-producción. Esta opción está pensada para no inventar tiempo.

No completa ceros. Si el feed manda 1:23.2 y pedís 3 decimales, queda 1:23.2, no 1:23.200. Nunca inventa dígitos.

No toca velocidades ni puntos. SpeedTrap (km/h), puntos de campeonato, número de auto, posición, vueltas no se recortan porque no están en la lista blanca. Si ves 120.456 km/h es velocidad, no tiempo, y se deja con decimales originales.

time a nivel superior puede ser hora del día. Por eso _truncTimeFieldsOf con isTop true no toca time si está en data raíz (puede ser “14:23:10” hora). Solo recorta time dentro de competitors donde sí es tiempo de vuelta.

all_competitors es copia aparte. El bug histórico era que solo se truncaba competitors y Totem/Crawl seguían con 3 decimales porque leen all_competitors. Ahora se trunca también all_competitors en applyTimePrecision.

TotalTime >59 min se acorta solo a décimas. Aunque tengas 3 decimales seleccionado, si total supera 59 minutos, shortenTotalToTenths lo deja en 1 decimal para que entre en columna. Es intencional para endurance. Si no querés eso, no uses TotalTime en Totem o agrandá columna.

Cambio al aire guarda global. window._cfgTimePrecision se guarda para que vistas que no pasan por applyTimePrecision (Clasificador Final guardado) sepan qué precisión usar cuando se cargan sin dato vivo previo.

Guardado sin truncar para poder volver. window._lastRawData y _cfResultRaw siempre guardan copia sin truncar. Si cambiás de 1 a 3 decimales al aire, vuelve a mostrar 1:23.299 completo sin pedir datos nuevos al crono.

8. Problemas frecuentes

Lo que vesQué hacer
Puse 1 decimal pero Totem sigue con 3Era bug viejo: all_competitors no se truncaba. Ahora sí. Si te pasa, recargá layout y verificá que applyTimePrecision toque all_competitors. Si es Clasificador Final guardado, es _cfApplyPrecisionToRows que se dispara en time_precision_change.
1:23.299 con 2 decimales muestra 1:23.29 no 1:23.30Correcto: recorta, no redondea. Es por diseño.
Gap +00:01.234 queda +1.234Correcto: rgTrimTime quita ceros a la izquierda innecesarios, deja +1.234. Si es “1 Vuelta” no lo toca.
TotalTime de 2 horas sigue con 3 decimales y no entrashortenTotalToTenths solo actúa si >59 min y solo deja 1 decimal. Si tu columna sigue chica, achicá precisión a 1 decimal en CONFIG o agrandá columna en Editor Visual.
Cambié precisión y Clasificador Final guardado no cambiaVerificá que socket time_precision_change llegue: debe reaplicar _cfApplyPrecisionToRows sobre _cfResultRaw. Si layout está en CasparCG sin socket, la precisión viaja también en _cfg_time_precision dentro de /api/layout_data en cada poll.
Velocidad SpeedTrap se recortóNo debería: no está en _TIME_PRECISION_KEYS. Si la ves recortada, es porque tu campo se llama “time” o “gap” por error en el feed.
Puse 0 o 5 decimales y volvió a 3Clamp 1-3 en server y en setTimePrecision. Solo permite 1,2,3. Default 3.

9. Lista de control rápida

🗂

Al preparar el evento

Definí qué precisión vas a usar por tipo de sesión: quali 3 decimales, carrera corta 2, endurance 1. Dejá default 3 en CONFIG.

🔍

Antes de salir al aire

Probar en Totem y Crawl con tiempos reales: ¿entra +0.456 o necesitás +0.45? Cambiá en CONFIG y verificá que todos los overlays cambien (tabla, totem, crawl, clasificador, campeonato, últimas vueltas).

🏁

Durante la transmisión

Podés cambiar al aire sin recargar: CONFIG → Display → Precisión → 1/2/3 → se emite en vivo y reaplica sobre copia sin truncar. No perdés milésimas al volver a 3.

💾

Al terminar

Backup de config.json (contiene display.time_precision). La próxima fecha arranca con misma precisión.

AI
Race-G Assistant
Ayudante automatizado por IA
Hola! Bienvenido a Race-G...
Haz tu pregunta aquí, o tal vez te interese:
Cargando…