Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Attendances
  3. Face Kiosk Attendance v 17.0
  4. Sales Conditions FAQ

Face Kiosk Attendance

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 17.0 Third Party 75
Download for v 17.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Attendances (hr_attendance)
• Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• Attendance Suite Base
• EH HR Platform Core
• EH HR Compatibility
Lines of code 4006
Technical Name eh_hr_face_kiosk
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Attendances (hr_attendance)
• Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• Attendance Suite Base
• EH HR Platform Core
• EH HR Compatibility
Lines of code 4006
Technical Name eh_hr_face_kiosk
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage Attendance Suite

Face Kiosk Attendance

Turn any browser tablet into a face-match clock that posts straight to hr.attendance, with raw images that never leave the device.

Free · LGPL-3Odoo 17 Communityv1.0.0v1.0.0
In-browser embedding
Server cosine match
No image leaves device
Device-token paired
Optional geofence

Why this module

Face Kiosk Attendance

Privacy by design

The face never travels

face-api.js computes the 128-dim embedding on the device. Only that numeric vector reaches the server, and no raw image or frame is persisted. Every template is tied to a granted consent record, and withdrawing consent deactivates the related templates in the same transaction.

Posts real attendance

Straight into hr.attendance

A match toggles the employee's state: it opens a check-in or closes the latest open check-out, creating a genuine hr.attendance record. No middle layer, no nightly sync, no spreadsheet to reconcile times by hand.

Hardened endpoint

A stolen token cannot run wild

The match route is paired by device token, scoped to the device's company so cross-company matching is impossible, and throttled by a DB-backed atomic counter that returns 429 over budget. Optional per-site geofencing rejects matches outside the configured radius.

Day in the life

A shift starts at the front-desk tablet

A worker steps in front of the paired iPad at reception. The browser detects the face, builds the embedding locally, and sends it to the server. The controller normalises the vector, cosine-matches it against active consented templates for that company, and finds the closest within threshold. An hr.attendance check-in is created and the screen says welcome. Eight hours later the same face closes the record as a check-out. Every attempt, pass, and failure is written to the kiosk audit trail. No badge, no PIN, no raw photo stored anywhere.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

Consent withdrawal cascade

When a face consent is withdrawn, every active template under it is deactivated in the same transaction and the cascade is logged to the audit trail with a count, so a later compliance review can prove what was deactivated and when.

Retention sweep expiry

The consent retention cron also deactivates templates whose face consent has expired, so a template never stays matchable past its consent horizon even if no one withdraws it manually.

Stolen-token throttle

The public match endpoint is rate-limited by a single atomic SQL upsert keyed on scope plus token or IP, shared across gunicorn or gevent workers and durable across restarts, so a leaked device token cannot hammer the endpoint or brute-force matches.

Cross-company isolation

The device token resolves to one company, and candidate templates are filtered to that company id. A face enrolled in another company can never match at this layer.

Below-threshold handling

When the closest template is past the configured match threshold, no attendance is posted; a match_fail event is logged and an identity_low_confidence attendance exception is raised against the nearest employee for a human to review.

Geofence enforcement

For sites with geofencing enabled, a missing or out-of-radius client location returns no match with an explicit reason and logs a geofence_fail event, computed with a haversine distance against the site coordinates.

Embedding integrity

Templates reject non-JSON, non-list, non-numeric, or wrong-dimension embeddings at the model constraint layer, and the consent must be of type face and belong to the same employee, so a malformed or mismatched template cannot be stored.

What is inside

Built to do the job, end to end.

  • eh.hr.face.template model. Stores the JSON embedding, declared dimension, recognition model identity and version, capture method, quality score, company, and the mandatory consent link. Constraints validate the embedding and enforce the face-type and employee match. Deactivate, reactivate, and a mail.thread audit on the record.
  • Match controller. The /eh_hr/kiosk/face/match route authenticates by X-EH-Kiosk-Token, validates the embedding, optionally geofences, normalises and cosine-matches against active consented templates, applies the company threshold, and posts the check-in or check-out to hr.attendance.
  • Public kiosk shell. The /eh_hr/kiosk/<site_code> route renders a standalone public HTML page that loads face-api.js and the kiosk scripts outside the Odoo web client, with pair, welcome, success, failure, and site-not-found screens and a request-time asset version stamp for cache busting.
  • Enrolment wizard. An HR-admin wizard captures three to five samples through an OWL widget, requires a ticked consent acknowledgement, grants or reuses the face consent, stores each sample as its own template, and logs the enrolment to the audit trail.
  • Employee integration. hr.employee gains a computed face-enrolled flag driven by active templates, an active template count, and actions to open enrolment or view templates. Roles for user, manager, admin, and auditor are wired through the suite security groups.

Honest about the edges

What this does not do, so nothing surprises you.

  • This is an attendance-convenience face match, not an anti-spoofing or liveness control. A printed photo or a screen showing an enrolled face can match, and a modified client could submit any embedding. Use it to make clocking in convenient, not to prove who physically attended.
  • Passive liveness is not included in this module. Liveness is provided as a separate companion module that the kiosk shell hooks into; without it, no spoof detection runs.
  • face-api.js and its model files are not bundled. An operator runs a one-time setup to place the library and roughly six megabytes of model weights under static/lib/face-api before the kiosk works.
  • Matching is a linear scan over active templates, which is fine for the typical site of dozens to low hundreds of employees per company. A vector index is the right answer once a company crosses roughly two thousand templates.
  • The kiosk page needs camera access over a secure context and a Chromium, Firefox, or Safari browser on the local network. There is no native app and no offline match.
  • Match accuracy depends on enrolment quality and the configured threshold. Varied lighting and three to five samples per employee materially improve reliability.
Search

face recognition attendance odoo, biometric clock in odoo 17, kiosk attendance odoo, face-api.js odoo, contactless time clock, no badge attendance, employee clock in clock out, self hosted face attendance, geofenced attendance odoo, hr attendance kiosk, odoo 17 community attendance, buddy punch prevention

ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Customisation Services

v1.0.0 · LGPL-3 · Odoo 17 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with