DeskamiUn petit compagnon sur ton bureau

Format d’export

L’export, qui fait partie de Deskami Plus, écrit le même relevé minute par minute que celui que Deskami garde sur ton Mac. Rien n’est ajouté, estimé ni complété. Cette page décrit ce que contient le fichier.

Conventions

  • Une cellule vide en CSV, ou null en JSON, signifie non mesuré. Un 0 signifie mesuré, et c’était zéro.
  • Les noms de colonnes sont en anglais dans toutes les langues, et fixes ; ils ne changent qu’avec une nouvelle export_version.
  • Les fichiers sont en UTF-8. Le CSV est séparé par des virgules, avec une ligne d’en-tête.
  • Les heures sont en UTC au format ISO 8601, par exemple 2026-09-28T07:41:00Z. Les dates sont au format YYYY-MM-DD : le jour du calendrier sous lequel la minute a été enregistrée.
  • Les nombres décimaux s’écrivent avec un point, jamais avec un séparateur de milliers. Les booléens valent true et false.
  • Il y a une ligne pour chaque minute où Deskami a enregistré quelque chose, et aucune pour les minutes où il n’a rien enregistré.

Colonnes des minutes

Le CSV contient ces colonnes, dans cet ordre ; en JSON, les mêmes champs composent chaque minute. Le nom entre parenthèses est celui de la colonne dans le fichier brut de la base de données.

  • minute_utc — heure. Le début de la minute, en UTC. (minute_utc, en secondes Unix)
  • local_day — date. Le jour du calendrier auquel appartient cette minute, dans le fuseau horaire où se trouvait le Mac à ce moment-là. Il est fixé à l’écriture ; un changement de fuseau ultérieur ne le déplace pas. (day_key)
  • setup_id — entier. Le poste utilisé : une caméra plus une disposition d’écrans. En JSON, les postes sont listés sous setups. (profile_id)
  • seconds_at_desk — de 0 à 60. Les secondes où la caméra t’a vu pendant cette minute. Avec camera_off à false, 0 signifie que la caméra était allumée et ne t’a pas vu. (present_s)
  • posture_deviation — nombre, 0 ou plus. De combien ta tête et tes épaules se trouvaient sous ta propre référence, en moyenne sur la minute, en multiple du seuil d’alerte en vigueur à ce moment-là : 0 à la référence, 1 au seuil. Vide quand la posture n’a pas été mesurée. (posture_dev)
  • posture_peak — nombre, 0 ou plus. La plus grande valeur de la même mesure dans la minute. (posture_peak)
  • distance_deviation — nombre, 0 ou plus. De combien ton visage était plus près de l’écran qu’à ta référence, sur la même échelle, d’après l’écart entre tes yeux dans l’image. (distance_dev)
  • blinks — entier. Les clignements comptés tant que les yeux pouvaient être mesurés. Vide quand ils ne pouvaient pas l’être. (blinks)
  • incomplete_blinks — entier. Les clignements dont l’instant le plus fermé n’a pas été assez proche d’une fermeture complète. Vide quand aucun jugement n’était possible. (incomplete_blinks)
  • head_pitch_degrees — nombre. L’inclinaison moyenne de la tête en degrés, telle que la caméra l’indique : par rapport à la caméra, pas à ta référence. (head_pitch)
  • confidence — de 0 à 1. La confiance moyenne de la détection du visage. (confidence)
  • light — de 0 à 1. La luminosité moyenne de la zone du visage, de 0 sombre à 1 clair. Pas celle de la pièce. (light)
  • eyes_measured — booléen. Les yeux ont pu être mesurés au moins une fois pendant cette minute. Quand il vaut false, blinks, incomplete_blinks et eye_observed_seconds sont vides. (eye_valid)
  • eye_observed_seconds — de 0 à 60. Les secondes où les yeux ont réellement été observés. Les clignements par minute valent blinks × 60 ÷ eye_observed_seconds. (eye_observed_s)
  • look_aways — entier. Les regards au loin menés jusqu’au bout, l’habitude 20-20-20. Vide quand le regard au loin n’était pas mesuré. (gaze_breaks)
  • camera_off — booléen. La caméra était éteinte pendant cette minute : tu l’as éteinte, une autre app l’occupait, ou l’autorisation a été retirée. Les colonnes de la caméra sont alors vides ; celles des apps et de l’activité peuvent quand même être remplies. (camera_off)
  • declared_break — booléen. Tu as dit à Deskami que tu faisais une pause. La minute compte comme passée loin du bureau, quoi qu’ait vu la caméra. (declared_break)
  • front_app — texte. L’identifiant de paquet (bundle identifier) de l’app au premier plan pendant la plus grande partie de la minute, par exemple com.apple.Safari. Vide quand ce relevé était désactivé, que l’écran était verrouillé ou que rien n’était au premier plan. Jamais un titre de fenêtre. (app_id)
  • app_switches — entier. Le nombre de fois où l’app au premier plan a changé pendant cette minute. (app_switches)
  • active_seconds — de 0 à 60. Les secondes où le clavier ou la souris avaient été touchés dans les 15 secondes précédentes. Seul le temps écoulé depuis le dernier événement est lu, jamais les touches. Vide quand ce relevé était désactivé. (active_s)
  • call_seconds — de 0 à 60. Les secondes où une app d’appel était au premier plan, ou où une même app avait le micro et le haut-parleur ouverts ensemble. Vide quand ce n’était pas mesuré, y compris pour chaque minute enregistrée avant que Deskami commence à le mesurer. (meeting_s)

JSON

Le fichier JSON est un seul objet. Il commence par un en-tête : export_version, app_version, exported_at, time_zone (au moment de l’export), database_schema_version, range (kind, from, to) et setups (id, camera_name, created_at).

Vient ensuite days, un objet pour chaque jour enregistré dans la période. Chaque jour contient son propre résumé, ses minutes et ses alertes :

  • local_day et minutes_at_desk, la somme de seconds_at_desk divisée par 60.
  • breaks : les périodes d’au moins 5 minutes et de moins de 2 heures passées loin du bureau, entre deux périodes au bureau. Le temps où la caméra était éteinte ne compte ni d’un côté ni de l’autre.
  • posture_fine_minutes (posture_deviation sous 1) et posture_attention_minutes (1 ou plus).
  • blink_rate : les clignements par minute sur le temps où les yeux ont été observés ; null sous une minute d’observation.
  • incomplete_blink_ratio : null quand trop peu de clignements ont pu être jugés.
  • reminders_by_signal : les alertes affichées, comptées par signal.
  • minutes : les colonnes des minutes ci-dessus, un objet par minute.
  • reminders : un objet par alerte, avec time_utc, local_day, setup_id, signal (posture, distance, blink, incompleteBlink ou gaze), build_up_seconds (le temps passé au-dessus du seuil avant l’alerte), recover_seconds (le temps jusqu’au retour sous le seuil ; null quand la mesure s’est arrêtée avant), asked (si la question sur ta référence a été affichée) et answer (null quand la question n’a pas été posée, sinon true ou false).

PDF

Le PDF n’est pas un tableau : c’est le résumé lui-même — le résumé du jour, la semaine ou le mois — imprimé sur une page exactement comme il apparaît à l’écran. Chaque nombre qu’il contient est celui affiché à l’écran.

Le fichier brut

Réglages › Général › Données › Afficher dans le Finder montre history.sqlite, à côté de history.sqlite-wal et history.sqlite-shm. Pendant que Deskami tourne, les minutes les plus récentes peuvent encore se trouver dans le fichier -wal ; copie les trois fichiers, ou quitte d’abord Deskami. Si tu les supprimes pendant que Deskami tourne, il démarre un nouvel historique vide en quelques secondes. L’export écrit toujours un instantané complet. Ce que contient la base de données est listé sur la page Confidentialité.