DeskamiUn pequeño compañero en tu escritorio

Formato de exportación

La exportación, parte de Deskami Plus, escribe el mismo registro minuto a minuto que Deskami guarda en tu Mac. No se agrega, se estima ni se rellena nada. Esta página describe qué hay en el archivo.

Convenciones

  • Una celda vacía en CSV, o null en JSON, significa sin medir. Un 0 significa medido, y era cero.
  • Los nombres de las columnas están en inglés en todos los idiomas y son fijos; solo cambian junto con una nueva export_version.
  • Los archivos están en UTF-8. El CSV va separado por comas y tiene una fila de encabezado.
  • Las horas están en UTC y en formato ISO 8601, como 2026-09-28T07:41:00Z. Las fechas son YYYY-MM-DD: el día del calendario en el que se registró el minuto.
  • Los números decimales llevan punto, nunca separador de miles. Los booleanos son true y false.
  • Hay una fila por cada minuto en el que Deskami registró algo, y ninguna para los minutos en los que no registró nada.

Columnas de los minutos

El CSV tiene estas columnas, en este orden; en JSON, los mismos campos forman cada minuto. El nombre entre paréntesis es la columna en el archivo de base de datos en bruto.

  • minute_utc — hora. El inicio del minuto, en UTC. (minute_utc, en segundos Unix)
  • local_day — fecha. El día del calendario al que pertenece este minuto, en la zona horaria en la que estaba la Mac en ese momento. Se fija al escribirse; un cambio posterior de zona horaria no lo mueve. (day_key)
  • setup_id — entero. El puesto en uso: una cámara más un acomodo de pantallas. En JSON, los puestos aparecen en setups. (profile_id)
  • seconds_at_desk — de 0 a 60. Segundos en los que la cámara te vio en este minuto. Con camera_off en false, 0 significa que la cámara estaba encendida y no te vio. (present_s)
  • posture_deviation — número, 0 o más. Qué tan abajo de tu propia referencia quedaron tu cabeza y tus hombros, en promedio durante el minuto, como múltiplo del umbral de aviso vigente en ese momento: 0 en la referencia, 1 en el umbral. Vacío cuando no se midió la postura. (posture_dev)
  • posture_peak — número, 0 o más. El valor más alto de esa misma medida dentro del minuto. (posture_peak)
  • distance_deviation — número, 0 o más. Qué tanto más cerca de la pantalla estaba tu cara que en tu referencia, en la misma escala, calculado a partir de la separación de tus ojos en la imagen. (distance_dev)
  • blinks — entero. Parpadeos contados mientras se podían medir los ojos. Vacío cuando no se podían medir. (blinks)
  • incomplete_blinks — entero. Parpadeos cuyo momento más cerrado no se acercó lo suficiente al cierre completo. Vacío cuando no fue posible juzgarlo. (incomplete_blinks)
  • head_pitch_degrees — número. Inclinación promedio de la cabeza en grados, tal como la reporta la cámara: respecto de la cámara, no de tu referencia. (head_pitch)
  • confidence — de 0 a 1. Confianza promedio de la detección de la cara. (confidence)
  • light — de 0 a 1. Brillo promedio de la zona de la cara, de 0 oscuro a 1 claro. No el del cuarto. (light)
  • eyes_measured — booleano. Los ojos se pudieron medir al menos una vez en este minuto. Cuando es false, blinks, incomplete_blinks y eye_observed_seconds están vacíos. (eye_valid)
  • eye_observed_seconds — de 0 a 60. Segundos en los que los ojos se observaron de verdad. Los parpadeos por minuto son blinks × 60 ÷ eye_observed_seconds. (eye_observed_s)
  • look_aways — entero. Miradas a lo lejos completadas, el hábito 20-20-20. Vacío cuando no se estaba midiendo si mirabas a lo lejos. (gaze_breaks)
  • camera_off — booleano. La cámara estaba apagada en este minuto: la apagaste tú, otra app la estaba usando o se retiró el permiso. Las columnas de la cámara quedan entonces vacías; las de apps y actividad pueden tener datos de todos modos. (camera_off)
  • declared_break — booleano. Le dijiste a Deskami que estabas en un descanso. El minuto cuenta como fuera del escritorio, sin importar lo que viera la cámara. (declared_break)
  • front_app — texto. El identificador de paquete (bundle identifier) de la app que estuvo al frente la mayor parte del minuto, como com.apple.Safari. Vacío cuando esa lectura estaba apagada, la pantalla estaba bloqueada o no había nada al frente. Nunca un título de ventana. (app_id)
  • app_switches — entero. Cuántas veces cambió la app al frente en este minuto. (app_switches)
  • active_seconds — de 0 a 60. Segundos en los que se había tocado el teclado o el mouse en los 15 segundos anteriores. Solo se lee el tiempo que pasó desde el último evento, nunca las teclas. Vacío cuando esa lectura estaba apagada. (active_s)
  • call_seconds — de 0 a 60. Segundos en los que una app de llamadas estaba al frente, o una misma app tenía abiertos al mismo tiempo el micrófono y la bocina. Vacío cuando no se midió, también en cada minuto registrado antes de que Deskami empezara a medirlo. (meeting_s)

JSON

El archivo JSON es un único objeto. Empieza con un encabezado: export_version, app_version, exported_at, time_zone (la del momento de la exportación), database_schema_version, range (kind, from, to) y setups (id, camera_name, created_at).

Después viene days, un objeto por cada día registrado en el intervalo. Cada día incluye su propio resumen, sus minutos y sus avisos:

  • local_day y minutes_at_desk, la suma de seconds_at_desk dividida entre 60.
  • breaks: tramos de 5 minutos o más y de menos de 2 horas fuera del escritorio, entre dos tramos en el escritorio. El tiempo con la cámara apagada no cuenta ni para un lado ni para el otro.
  • posture_fine_minutes (posture_deviation por debajo de 1) y posture_attention_minutes (1 o más).
  • blink_rate: parpadeos por minuto durante el tiempo en que se observaron los ojos; null con menos de un minuto de observación.
  • incomplete_blink_ratio: null cuando se pudieron juzgar muy pocos parpadeos.
  • reminders_by_signal: avisos mostrados, contados por señal.
  • minutes: las columnas de los minutos de arriba, un objeto por minuto.
  • reminders: un objeto por aviso, con time_utc, local_day, setup_id, signal (posture, distance, blink, incompleteBlink o gaze), build_up_seconds (tiempo por encima del umbral antes del aviso), recover_seconds (tiempo hasta volver por debajo; null cuando la medición se detuvo antes), asked (si se mostró la pregunta sobre tu referencia) y answer (null si no se preguntó; si no, true o false).

PDF

El PDF no es una tabla: es el propio resumen — el resumen del día, la semana o el mes — impreso en una página exactamente como se ve en pantalla. Cada número que contiene es el número de la pantalla.

El archivo en bruto

Ajustes › General › Datos › Mostrar en Finder te lleva a history.sqlite, junto a history.sqlite-wal y history.sqlite-shm. Mientras Deskami está abierto, los minutos más recientes pueden estar todavía en el archivo -wal; copia los tres archivos o sal de Deskami antes. Si los borras mientras Deskami está abierto, en pocos segundos empieza un registro nuevo y vacío. La exportación siempre escribe una instantánea completa. Lo que guarda la base de datos está en la página de privacidad.