Format d’exportation
L’exportation, 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
nullen JSON, veut dire non mesuré. Un0veut dire 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 formatYYYY-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
trueetfalse. - 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 forment 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ù était 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 soussetups. (profile_id)seconds_at_desk— de 0 à 60. Les secondes où la caméra t’a vu pendant cette minute. Aveccamera_offà false, 0 veut dire 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 la donne : 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_blinkseteye_observed_secondssont vides. (eye_valid)eye_observed_seconds— de 0 à 60. Les secondes où les yeux ont vraiment été observés. Les clignements par minute valentblinks× 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 prenais une pause. La minute compte comme passée loin du bureau, peu importe ce que la caméra a vu. (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 exemplecom.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’exportation), 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_dayetminutes_at_desk, la somme deseconds_at_deskdivisé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_deviationsous 1) etposture_attention_minutes(1 ou plus).blink_rate: les clignements par minute sur le temps où les yeux ont été observés;nullsous une minute d’observation.incomplete_blink_ratio:nullquand 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, avectime_utc,local_day,setup_id,signal(posture,distance,blink,incompleteBlinkougaze),build_up_seconds(le temps passé au-dessus du seuil avant l’alerte),recover_seconds(le temps jusqu’au retour sous le seuil;nullquand la mesure s’est arrêtée avant),asked(si la question sur ta référence a été affichée) etanswer(nullquand la question n’a pas été posée, sinontrueoufalse).
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 être 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’exportation écrit toujours un instantané complet. Ce que contient la base de données est listé sur la page Confidentialité.