{"id":37069764,"url":"https://github.com/im-ethz/flirt","last_synced_at":"2026-01-14T08:01:53.048Z","repository":{"id":52670608,"uuid":"304591481","full_name":"im-ethz/flirt","owner":"im-ethz","description":"Are you ready to FLIRT with your wearable data?","archived":false,"fork":false,"pushed_at":"2024-03-28T08:41:55.000Z","size":309788,"stargazers_count":75,"open_issues_count":9,"forks_count":22,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-25T10:53:18.995Z","etag":null,"topics":["acc","ai","biosignals","digital-biomarker","digital-signal-processing","eda","empatica","empatica-e4","flirt","health","hrv","machine-learning","mhealth","ubiquitous-computing","wearables"],"latest_commit_sha":null,"homepage":"https://flirt.readthedocs.io","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/im-ethz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.rst","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-10-16T10:15:29.000Z","updated_at":"2025-09-20T02:09:27.000Z","dependencies_parsed_at":"2025-09-08T14:00:20.053Z","dependency_job_id":"76a151d5-3f76-4043-b48c-f205ce284504","html_url":"https://github.com/im-ethz/flirt","commit_stats":{"total_commits":25,"total_committers":5,"mean_commits":5.0,"dds":"0.43999999999999995","last_synced_commit":"bbe1f849bf2773ec050b80974a21aac36ade9e44"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/im-ethz/flirt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/im-ethz%2Fflirt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/im-ethz%2Fflirt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/im-ethz%2Fflirt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/im-ethz%2Fflirt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/im-ethz","download_url":"https://codeload.github.com/im-ethz/flirt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/im-ethz%2Fflirt/sbom","scorecard":{"id":484618,"data":{"date":"2025-08-11","repo":{"name":"github.com/im-ethz/flirt","commit":"d9bdcc56107edaa3457db5428b32fbe2080778d0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T17:28:40.345Z","repository_id":52670608,"created_at":"2025-08-19T17:28:40.345Z","updated_at":"2025-08-19T17:28:40.345Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acc","ai","biosignals","digital-biomarker","digital-signal-processing","eda","empatica","empatica-e4","flirt","health","hrv","machine-learning","mhealth","ubiquitous-computing","wearables"],"created_at":"2026-01-14T08:01:52.510Z","updated_at":"2026-01-14T08:01:53.039Z","avatar_url":"https://github.com/im-ethz.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FLIRT\n[![Python Versions](https://img.shields.io/pypi/pyversions/flirt.svg?logo=python\u0026logoColor=FFE873)](https://pypi.org/project/flirt/)\n[![PyPI](https://img.shields.io/pypi/v/flirt.svg?logo=pypi\u0026logoColor=FFE873)](https://pypi.org/project/flirt/)\n[![Documentation Status](https://readthedocs.org/projects/flirt/badge/?version=latest)](https://flirt.readthedocs.io/en/latest/?badge=latest)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/im-ethz/flirt/master)\n[![DOI](https://img.shields.io/badge/DOI-10.1016/j.cmpb.2021.106461-red.svg)](https://doi.org/10.1016/j.cmpb.2021.106461)\n\n![](https://github.com/im-ethz/flirt/raw/master/docs/img/flirt-header.png)\n\n⭐️ **Simple. Robust. Powerful.** \n\n**FLIRT** is a **F**eature generation too**L**k**I**t for wea**R**able da**T**a such as that from your smartwatch or smart ring. With FLIRT you can\neasily transform wearable data into meaningful features which can then be used for example in machine learning or AI models.\n\nIn contrast to other existing toolkits, FLIRT (1) focuses on physiological data recorded with\n(consumer) **wearables** and (2) calculates features based on a **sliding-window approach**.\nFLIRT is an easy-to-use, robust and efficient feature generation toolkit for your wearable device!\n\n![FLIRT Workflow](https://github.com/im-ethz/flirt/raw/master/docs/img/flirt-workflow.png)\n\n➡️ **Are you ready to FLIRT with your wearable data?**\n\n## Main Features\nA few things that FLIRT can do:\n  - Loading data from common wearable device formats such as from the Empatica E4 or Holter ECGs\n  - Overlapping sliding-window approach for feature calculation\n  - Calculating [HRV](https://flirt.readthedocs.io/en/latest/api.html#module-flirt.hrv) (heart-rate variability) features from NN intervals (aka inter-beat intervals)\n  - Deriving features for [EDA](https://flirt.readthedocs.io/en/latest/api.html#module-flirt.eda) (electrodermal activity)\n  - Computing features for [ACC](https://flirt.readthedocs.io/en/latest/api.html#module-flirt.acc) (accelerometer)\n  - Provide and prepare features in one comprehensive DataFrame, so that they can directly be used for further steps\n    (e.g. training machine learning models)\n\n😎 FLIRT provides **high-level** implementations for fast and easy utilization of feature generators\n(see [flirt.simple](https://flirt.readthedocs.io/en/latest/api.html#module-flirt.simple)).\n\n🤓 For advanced users, who wish to adapt algorithms and parameters do their needs, FLIRT also provides **low-level**\nimplementations.\nThey allow for extensive configuration possibilities in feature generation and the specification of which algorithms to\nuse for generating features.\n\n\n## Installation\nFLIRT is available from [PyPI](https://pypi.org/project/flirt/) and can be installed via pip:\n```\npip install flirt\n```\n\nAlternatively, you can checkout the source code from the [GitHub repository](https://github.com/im-ethz/flirt):\n```\ngit clone https://github.com/im-ethz/flirt\n```\n\n\n# Quick example\nGenerate a comprehensive set of features for an Empatica E4 data archive with a single line of code 🚀\n```\nimport flirt\nfeatures = flirt.with_.empatica('./1234567890_A12345.zip')\n```\n\nCheck out the [documentation](https://flirt.readthedocs.io/) and exemplary [Jupyter notebooks](https://github.com/im-ethz/flirt/tree/master/notebooks/).\n\n# Roadmap\nThings FLIRT will be able to do in the future:\n  - [ ] Use FLIRT with Oura's smart ring and other consumer-grade wearable devices\n  - [ ] Use FLIRT with Apple Health to derive meaningful features from long-term data recordings\n  - [ ] Feature generation for additional sensor modalities such as: blood oxygen saturation, blood volume changes, respiration rate, and step counts\n\n# People\nMade with ❤️ at [ETH Zurich](https://im.ethz.ch).  \nCheck out all [authors](https://github.com/im-ethz/flirt/tree/master/docs/authors.rst).\n\nIn collaboration with the [Digital Biomarker Discovery Pipeline](https://dbdp.org).  \n[\u003cimg src=\"https://dbdp.org/assets/dbdp/DBDP_logo_2.jpg\" width=150\u003e](https://dbdp.org)\n\n\n\n# FAQs\n- **How does FLIRT distinguish from other physiological data processing packages such as neurokit?**  \\\n    While FLIRT works with physiological data like other packages, it places special emphasis on the inherent challenges\n    of data processing obtained from (consumer) wearable devices such as smartwaches instead of professional,\n    medical-grade recording devices such as ECGs or EEGs. As an example, when processing data from smartwatches, one\n    could be confronted with inaccurate data, which needs artifact removal, or measurement gaps, which need to be\n    dealt with.\n    \n# Citation\nOriginal article: [FLIRT: A Feature Generation Toolkit for Wearable Data](https://doi.org/10.1016/j.cmpb.2021.106461)\n\n```\n@article{flirt2021,\n  title={{{FLIRT}}: A {{Feature Generation Toolkit}} for {{Wearable Data}}},\n  author={Föll, Simon and Maritsch, Martin and Spinola, Federica and Mishra, Varun and Barata, Filipe and Kowatsch, Tobias and Fleisch, Elgar and Wortmann, Felix},\n  year={2021},\n  journal={Computer Methods and Programs in Biomedicine},\n  doi={10.1016/j.cmpb.2021.106461},\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-ethz%2Fflirt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fim-ethz%2Fflirt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fim-ethz%2Fflirt/lists"}