Clock in with a glance at the camera.

in-Time is an open-source attendance system for organisations with several sites. Staff check in and out with a phone on the site's Wi-Fi; a relay server on site recognises them, stamps the time from the internet and keeps working when head office is unreachable.

Pointez d’un regard vers la caméra.

in-Time est un système de pointage libre pour les organisations multi-sites. Le personnel pointe ses entrées et sorties avec un téléphone sur le Wi-Fi du site ; un serveur relais sur place le reconnaît, horodate avec l’heure d’Internet et continue de fonctionner quand le siège est injoignable.

Self-hosted. No license key, no account, no limit on users or sites.

Auto-hébergé. Sans clé de licence, sans compte, sans limite d’utilisateurs ni de sites.

What happens in one check-in

The phone never decides who is in front of it. It only takes the picture: identification, timing and every verification happen on servers you run.

Ce qui se passe lors d’un pointage

Le téléphone ne décide jamais qui se trouve devant lui. Il prend seulement la photo : l’identification, l’horodatage et toutes les vérifications se font sur des serveurs que vous gérez.

  1. Phone

    A face appears

    The browser page on the site Wi-Fi waits for a face in front of the camera and sends the picture to the relay.

  2. Relay server

    The relay recognises

    OpenCV compares the face with every employee's photo and hands back a one-time token valid for 90 seconds.

  3. Relay server

    Time is stamped

    IN or OUT is confirmed and stamped with internet time, not the PC clock, then signed and stored in the local cache.

  4. Main server

    Checked again

    Head office recomputes on-time or late, compares the snapshot with the photo and flags anything suspicious for review.

  1. Téléphone

    Un visage apparaît

    La page web sur le Wi-Fi du site attend un visage devant la caméra et envoie la photo au relais.

  2. Serveur relais

    Le relais reconnaît

    OpenCV compare le visage à la photo de chaque employé et renvoie un jeton à usage unique valable 90 secondes.

  3. Serveur relais

    L’heure est fixée

    ENTRÉE ou SORTIE est confirmée et horodatée avec l’heure d’Internet, pas celle du PC, puis signée et stockée dans le cache local.

  4. Serveur principal

    Nouvelle vérification

    Le siège recalcule l’heure (à l’heure ou en retard), compare la photo de pointage à celle de l’employé et signale tout ce qui est suspect.

Two servers, one per role

A relay server runs on a Windows or Linux PC at each site, with a window showing the QR code for phones and today's check-ins. One main server on Linux holds users, photos and history in PostgreSQL, with a web console for administrators.

Deux serveurs, un rôle chacun

Un serveur relais tourne sur un PC Windows ou Linux de chaque site, avec une fenêtre affichant le QR code pour les téléphones et les pointages du jour. Un serveur principal sous Linux conserve utilisateurs, photos et historique dans PostgreSQL, avec une console web pour les administrateurs.

The admin console dashboard with today's counters, relay states and latest check-ins.
Main server: the admin console's dashboard.
Serveur principal : le tableau de bord de la console d’administration.
The relay window with internet and main server status, a QR code and today's check-ins.
Relay server: the window on each site's PC.
Serveur relais : la fenêtre sur le PC de chaque site.
Internet at the siteMain serverCheck-ins
UpReachableAccepted and sent immediately
UpUnreachableAccepted, kept on the relay and sent when it is back
DownAnyRefused until the trusted time can be read again
Internet sur le siteServeur principalPointages
OKJoignableAcceptés et envoyés immédiatement
OKInjoignableAcceptés, gardés sur le relais et envoyés à son retour
CoupéQuel qu’il soitRefusés jusqu’à ce que l’heure fiable soit de nouveau lisible

Built so a check-in can't be faked from a desk

Each safeguard closes one way of recording someone who isn't there, or a time that isn't true.

Conçu pour qu’un pointage ne se truque pas depuis un bureau

Chaque protection ferme une façon d’enregistrer quelqu’un d’absent, ou une heure fausse.

Recognition on the relay

Phones receive no face data and cannot name a person. A check-in needs the one-time token the relay issued for that exact picture.

Time from the internet

The relay reads HTTPS time from Google, Cloudflare or Microsoft and counts on a monotonic clock. Changing the Windows date or time zone changes nothing.

Signed by the relay

Every request and check-in is signed with a key that never leaves the relay. Each token is bound to the first relay that uses it.

A second look at head office

The main server compares every snapshot with the employee's photo and flags mismatches, missing faces and replayed pictures.

Nothing quietly removed

Check-ins are numbered. A missing number on arrival is flagged as a gap, and one held back while the relay was online is flagged as delayed.

Encrypted on site

The relay's cache, photos and snapshots are encrypted with AES-256-GCM; anything edited outside the relay is ignored.

Reconnaissance sur le relais

Les téléphones ne reçoivent aucune donnée faciale et ne peuvent désigner personne. Un pointage exige le jeton unique émis par le relais pour cette photo précise.

L’heure d’Internet

Le relais lit l’heure HTTPS de Google, Cloudflare ou Microsoft et compte avec une horloge monotone. Modifier la date ou le fuseau de Windows ne change rien.

Signé par le relais

Chaque requête et chaque pointage sont signés avec une clé qui ne quitte jamais le relais. Chaque jeton est lié au premier relais qui l’utilise.

Un second regard au siège

Le serveur principal compare chaque photo de pointage à celle de l’employé et signale les différences, les visages absents et les photos rejouées.

Rien ne disparaît en silence

Les pointages sont numérotés. Un numéro manquant est signalé comme trou, et un pointage retenu alors que le relais était en ligne comme retardé.

Chiffré sur le site

Le cache, les photos et les photos de pointage du relais sont chiffrés en AES-256-GCM ; toute modification hors du relais est ignorée.

There is no liveness detection: a printed photo can still fool a camera, which is why every check-in keeps its snapshot for review. Photos and face data are biometric data, so check the data-protection rules that apply to you.

Il n’y a pas de détection du vivant : une photo imprimée peut encore tromper une caméra, c’est pourquoi chaque pointage garde sa photo pour vérification. Photos et données faciales sont des données biométriques : vérifiez les règles de protection des données qui vous concernent.

Get started

Install the main server first, add users and one relay per site, then start a relay with the token it gives you. The deployment guide walks through every step.

Démarrer

Installez d’abord le serveur principal, ajoutez les utilisateurs et un relais par site, puis lancez un relais avec le jeton fourni. Le guide de déploiement détaille chaque étape.

Main server, on Linux

Serveur principal, sous Linux

Installs a systemd service, PostgreSQL if you need it, and prints the admin password.

Installe un service systemd, PostgreSQL si besoin, et affiche le mot de passe administrateur.

curl -sSL https://raw.githubusercontent.com/dijey099/in-Time/refs/heads/master/main_server/install_main_server.sh | sh
sudo nano /var/lib/in-time/main-server/.env   # departments, proxy
sudo systemctl start in-time-main

Relay server, on each site

Serveur relais, sur chaque site

Run it from source as below, or build a single executable with build.bat / build.sh.

Lancez-le depuis les sources comme ci-dessous, ou compilez un exécutable unique avec build.bat / build.sh.

cd relay_server
cp relay.ini.example relay.ini   # url, token, timezone
python -m venv venv && . venv/bin/activate
pip install -r requirements.txt
python start_relay.py

Open source, self-hosted

in-Time runs entirely on your own servers. There is no license key, no activation and no call home: the main server and the relays only talk to each other and to public time sources.

It is free software under the GNU AGPL-3.0: use it, change it and share it. If you offer a modified version to others, over a network included, share its source code under the same license.

Bug reports, fixes and translations are welcome through GitHub issues and pull requests.

Libre et auto-hébergé

in-Time fonctionne entièrement sur vos propres serveurs. Pas de clé de licence, pas d’activation, aucun appel vers l’extérieur : le serveur principal et les relais ne parlent qu’entre eux et aux sources d’heure publiques.

C’est un logiciel libre sous licence GNU AGPL-3.0 : utilisez-le, modifiez-le et partagez-le. Si vous proposez une version modifiée à d’autres, y compris via le réseau, partagez son code source sous la même licence.

Les signalements de bugs, corrections et traductions sont les bienvenus via les issues et pull requests GitHub.