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. Attended Face Capture v 19.0
  4. Sales Conditions FAQ

Attended Face Capture

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 19.0 Third Party 39
Download for v 19.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
• Face Kiosk Attendance
• EH HR Compatibility
Lines of code 4705
Technical Name eh_hr_face_liveness
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
• Face Kiosk Attendance
• EH HR Compatibility
Lines of code 4705
Technical Name eh_hr_face_liveness
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage · HR Attendance

Attended Face Capture

An auditable attended-capture step for the face kiosk, honest about what it is and what it is not.

Free · LGPL-3Free · LGPL-3Odoo 19 · Communityv1.0.0
BLINK PROMPT
CLIENT-ASSERTED
RATE-LIMITED
RETENTION SWEEP
PER-COMPANY

Why this module

Attended Face Capture

HONEST SCOPE

What it is, and what it is not

The outcome is computed in the browser and recorded as reported. The server runs no liveness detection, no anti-spoofing, no ML check. A printed photo or a screen at the camera is not caught. We say so in the manifest, the field help, and here, so a recorded pass is never mistaken for proof of a real person.

AUDIT LAYER

A clean record of every attempt

Each attempt writes one row to eh.hr.liveness.check with outcome, prompt text, duration, reported blink count, device, site, and company. Rows are create-and-read only through the UI, so the trail stands up for attendance dispute and review rather than being quietly editable after the fact.

YOURS TO KEEP

LGPL-3 source on disk

No activation key, no phone-home, no recurring licence. The blink detection, the endpoints, and the retention logic are all readable on disk. Extend it, or sit it beneath a licensed server-side liveness model as the attendance-audit layer it is built to be.

Day in the life

A site supervisor reviews a disputed clock-in.

An employee says the kiosk let someone else clock in under their face last Tuesday. The supervisor opens Attended captures, filters to that site and day, and sees the row: a passed outcome at 07:42, two blinks reported, 2.4 seconds on the device, against a named terminal. The record is read-only, so it has not been edited since it was written. Because the column header and the field help both mark the outcome client-asserted, the supervisor knows exactly how much weight it carries: it confirms a capture attempt happened on that device at that time, not that the camera proved a live person. That honesty is the point. The supervisor pairs it with the face-match record from the kiosk and resolves the dispute on evidence rather than on a green tick the system never earned. Stale rows past the company retention horizon are already gone, swept nightly by a batch-capped cron so the table stays lean.

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.

TRUST · DISCLOSED

The outcome is whatever the kiosk browser reports. The endpoint validates that it is one of passed, failed, or aborted and stores it, but performs no verification. The record and its field help both stamp it client-asserted, so nobody downstream treats a pass as server-proven.

AUTH · DEVICE TOKEN

Both the config and log endpoints require a valid X-EH-Kiosk-Token matching an active kiosk terminal. An unknown or missing token gets a 401, so a random caller cannot read settings or write fake capture rows.

ABUSE · RATE LIMIT

Each endpoint is throttled at 120 hits per window through the shared eh.hr.rate.limit service, keyed on the device token or client IP. A device flooding the log endpoint gets a 429 instead of filling the audit table.

RETENTION · BATCHED CRON

The nightly sweep walks each company with its own retention horizon (default 180 days), deletes only rows past the cutoff, and stops at a per-run batch cap of 2000 so one run cannot stall the worker. It reports progress through the cron commit-progress hook for clean isolation.

TENANCY · PER-COMPANY

A global record rule scopes every capture row to the user's allowed companies, and each row carries its company from the device that wrote it. One tenant cannot read another tenant's capture trail.

IMMUTABILITY · READ-ONLY

The list view is create=false, edit=false and the ACLs grant no write to any group. Managers and auditors read; only admin may delete. Once written, a capture row cannot be quietly altered.

HARDWARE · GRACEFUL

If the browser blocks the camera or face-api.js is not loaded, the client reports aborted or failed with a reason rather than hanging, and a config call that is disabled or fails simply lets check-in proceed without blocking the kiosk.

What is inside

Built to do the job, end to end.

  • eh.hr.liveness.check model. One row per attempt: outcome, recorded-on timestamp, prompt text, duration in ms, reported blink count, fail reason, device, site, optional employee, and company. The client-asserted flag defaults true and the record is read-only by design.
  • Kiosk endpoints. /eh_hr/kiosk/liveness/config returns the per-company enabled flag, required blinks, and timeout to the kiosk. /eh_hr/kiosk/liveness/log records the reported outcome. Both are token-authenticated and rate-limited, and the log call also writes a kiosk event.
  • In-browser blink prompt. A liveness screen injected into the kiosk shell runs eye-aspect-ratio detection over face-api.js landmarks, counts blinks toward the required count, and shows a fail-and-retry screen on timeout. Detection runs entirely client-side.
  • Per-company settings. Settings expose the attended-capture toggle, prompted blink count, capture timeout in ms, and retention days, each related to res.company so multi-company groups configure them independently.
  • Retention sweep cron. A daily code cron calls _cron_retention_sweep, which prunes rows past each company horizon under a batch limit and reports progress for cron isolation.
  • Tests. Python tests cover record creation, the retention sweep deleting aged rows, the 401 on a missing token, config returning company settings, log creating both a check and a kiosk event for pass and fail, and a 400 on an invalid outcome.

Honest about the edges

What this does not do, so nothing surprises you.

  • This is not a liveness or anti-spoofing control. The server does no liveness detection and no ML verification; it records the outcome the browser reports.
  • A printed photo, a video, or a screen held to the camera is not detected. Anyone controlling the kiosk device can report any outcome.
  • A recorded passed outcome is evidence that a capture attempt occurred on that device at that time, not proof that a real, live person was present.
  • Blink detection runs only in the browser and depends on face-api.js and camera access being available on the kiosk device.
  • The capture row is not linked to an employee at log time; the employee is set later by the kiosk face match, and may be blank on standalone rows.
  • Requires the ERP Heritage face kiosk and attendance base modules; it extends that kiosk and is not a standalone attendance system.
  • For a genuine anti-spoofing control, pair it with a separately licensed server-side passive-liveness model; this module is the attendance-audit layer beneath such a model, not a substitute for it.
Search

attended face capture odoo, face kiosk check-in audit, hr_attendance face capture, odoo 19 community face attendance, kiosk attendance audit log, blink prompt liveness ux, client-asserted capture record, per-company attendance retention, rate-limited kiosk endpoint, face kiosk audit trail

ERP Heritage

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

v1.0.0 · LGPL-3 · Odoo 19 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