DeskamiUma pequena companhia na sua mesa

Formato de exportação

A exportação, parte do Deskami Plus, grava o mesmo registro minuto a minuto que o Deskami guarda no seu Mac. Nada é acrescentado, estimado ou preenchido. Esta página descreve o que há no arquivo.

Convenções

  • Uma célula vazia no CSV, ou null no JSON, significa não medido. Um 0 significa medido, e deu zero.
  • Os nomes das colunas ficam em inglês em todos os idiomas e são fixos; só mudam junto com uma nova export_version.
  • Os arquivos são UTF-8. O CSV é separado por vírgulas e tem uma linha de cabeçalho.
  • Os horários ficam em UTC no formato ISO 8601, como 2026-09-28T07:41:00Z. As datas são YYYY-MM-DD: o dia do calendário em que o minuto foi registrado.
  • Os números decimais usam ponto, nunca separador de milhar. Os booleanos são true e false.
  • Há uma linha para cada minuto em que o Deskami registrou alguma coisa, e nenhuma para os minutos em que não registrou nada.

Colunas dos minutos

O CSV tem estas colunas, nesta ordem; no JSON, os mesmos campos formam cada minuto. O nome entre parênteses é a coluna no arquivo bruto do banco de dados.

  • minute_utc — horário. O início do minuto, em UTC. (minute_utc, em segundos Unix)
  • local_day — data. O dia do calendário ao qual este minuto pertence, no fuso horário em que o Mac estava naquele momento. Ele é fixado na gravação; uma mudança posterior de fuso horário não o move. (day_key)
  • setup_id — inteiro. A configuração em uso: uma câmera mais uma disposição das telas. No JSON, as configurações estão listadas em setups. (profile_id)
  • seconds_at_desk — de 0 a 60. Segundos em que a câmera viu você neste minuto. Com camera_off em false, 0 significa que a câmera estava ligada e não viu você. (present_s)
  • posture_deviation — número, 0 ou mais. O quanto sua cabeça e seus ombros ficaram abaixo da sua própria referência, na média do minuto, como múltiplo do limiar de aviso em vigor naquele momento: 0 na referência, 1 no limiar. Vazio quando a postura não foi medida. (posture_dev)
  • posture_peak — número, 0 ou mais. O maior valor da mesma medida dentro do minuto. (posture_peak)
  • distance_deviation — número, 0 ou mais. O quanto seu rosto estava mais perto da tela do que na sua referência, na mesma escala, calculado pela distância entre seus olhos na imagem. (distance_dev)
  • blinks — inteiro. Piscadas contadas enquanto os olhos podiam ser medidos. Vazio quando não podiam. (blinks)
  • incomplete_blinks — inteiro. Piscadas cujo momento mais fechado não chegou perto o bastante do fechamento completo. Vazio quando não deu para julgar. (incomplete_blinks)
  • head_pitch_degrees — número. Inclinação média da cabeça em graus, como a câmera informa: em relação à câmera, não à sua referência. (head_pitch)
  • confidence — de 0 a 1. Confiança média da detecção do rosto. (confidence)
  • light — de 0 a 1. Brilho médio da região do rosto, de 0 escuro a 1 claro. Não o do ambiente. (light)
  • eyes_measured — booleano. Os olhos puderam ser medidos pelo menos uma vez neste minuto. Quando é false, blinks, incomplete_blinks e eye_observed_seconds ficam vazios. (eye_valid)
  • eye_observed_seconds — de 0 a 60. Segundos em que os olhos foram realmente observados. As piscadas por minuto são blinks × 60 ÷ eye_observed_seconds. (eye_observed_s)
  • look_aways — inteiro. Olhadas para longe completas, o hábito 20-20-20. Vazio quando o olhar para longe não estava sendo medido. (gaze_breaks)
  • camera_off — booleano. A câmera estava desligada neste minuto: você a desligou, outro app estava com ela ou a permissão foi retirada. As colunas da câmera ficam então vazias; as de apps e de atividade ainda podem estar preenchidas. (camera_off)
  • declared_break — booleano. Você disse ao Deskami que estava em uma pausa. O minuto conta como fora da mesa, não importa o que a câmera tenha visto. (declared_break)
  • front_app — texto. O identificador de pacote (bundle identifier) do app que ficou na frente durante a maior parte do minuto, como com.apple.Safari. Vazio quando essa leitura estava desligada, a tela estava bloqueada ou não havia nada na frente. Nunca um título de janela. (app_id)
  • app_switches — inteiro. Quantas vezes o app na frente mudou neste minuto. (app_switches)
  • active_seconds — de 0 a 60. Segundos em que o teclado ou o mouse tinham sido tocados nos últimos 15 segundos. Só o tempo desde o último evento é lido, nunca as teclas. Vazio quando essa leitura estava desligada. (active_s)
  • call_seconds — de 0 a 60. Segundos em que um app de chamadas estava na frente, ou em que um mesmo app estava com o microfone e o alto-falante abertos juntos. Vazio quando não medido, incluindo todo minuto registrado antes de o Deskami começar a medir isso. (meeting_s)

JSON

O arquivo JSON é um único objeto. Ele começa com um cabeçalho: export_version, app_version, exported_at, time_zone (no momento da exportação), database_schema_version, range (kind, from, to) e setups (id, camera_name, created_at).

Depois vem days, um objeto para cada dia registrado no período. Cada dia traz o próprio resumo, os próprios minutos e os próprios avisos:

  • local_day e minutes_at_desk, a soma de seconds_at_desk dividida por 60.
  • breaks: períodos de 5 minutos ou mais e de menos de 2 horas fora da mesa, entre dois períodos na mesa. O tempo com a câmera desligada não conta para nenhum dos lados.
  • posture_fine_minutes (posture_deviation abaixo de 1) e posture_attention_minutes (1 ou mais).
  • blink_rate: piscadas por minuto ao longo do tempo em que os olhos foram observados; null com menos de um minuto de observação.
  • incomplete_blink_ratio: null quando não houve piscadas suficientes para julgar.
  • reminders_by_signal: avisos mostrados, contados por sinal.
  • minutes: as colunas dos minutos acima, um objeto por minuto.
  • reminders: um objeto por aviso, com time_utc, local_day, setup_id, signal (posture, distance, blink, incompleteBlink ou gaze), build_up_seconds (tempo acima do limiar antes do aviso), recover_seconds (tempo até voltar para baixo dele; null quando a medição parou antes), asked (se a pergunta sobre a sua referência foi mostrada) e answer (null quando não houve pergunta; caso contrário, true ou false).

PDF

O PDF não é uma tabela: é o próprio resumo — o resumo do dia, a semana ou o mês — impresso em uma página exatamente como aparece na tela. Cada número nele é o número da tela.

O arquivo bruto

Ajustes › Geral › Dados › Mostrar no Finder revela history.sqlite, ao lado de history.sqlite-wal e history.sqlite-shm. Enquanto o Deskami está rodando, os minutos mais recentes ainda podem estar no arquivo -wal; copie os três arquivos ou encerre o Deskami antes. Se você apagar esses arquivos enquanto o Deskami está rodando, ele começa um registro novo e vazio em poucos segundos. A exportação sempre grava um instantâneo completo. O que o banco de dados guarda está listado na página de privacidade.