{"id":37073643,"url":"https://github.com/ksmet1977/luxpy","last_synced_at":"2026-01-14T08:38:47.328Z","repository":{"id":40614206,"uuid":"95973499","full_name":"ksmet1977/luxpy","owner":"ksmet1977","description":"Python toolbox for lighting and color science","archived":false,"fork":false,"pushed_at":"2025-11-18T07:37:39.000Z","size":419346,"stargazers_count":131,"open_issues_count":0,"forks_count":34,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-11-18T09:17:29.079Z","etag":null,"topics":["cct","chromatic-adaptation","cie","ciede2000","cielab","ciexyz","color","color-appearance","color-differences","color-fidelity","color-rendition","color-science","colorimetry","cqs","cri2012","duv","ies-tm30","lighting","python-toolbox","spectral-measurement"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ksmet1977.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-07-01T15:50:33.000Z","updated_at":"2025-11-18T07:37:43.000Z","dependencies_parsed_at":"2023-02-13T19:16:49.229Z","dependency_job_id":"22dd12e2-1e5e-4003-8fa1-71dd02bba021","html_url":"https://github.com/ksmet1977/luxpy","commit_stats":{"total_commits":1058,"total_committers":4,"mean_commits":264.5,"dds":"0.32608695652173914","last_synced_commit":"876adb20f2388dbbebfc616775f6964f9be1022c"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/ksmet1977/luxpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksmet1977%2Fluxpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksmet1977%2Fluxpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksmet1977%2Fluxpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksmet1977%2Fluxpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ksmet1977","download_url":"https://codeload.github.com/ksmet1977/luxpy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksmet1977%2Fluxpy/sbom","scorecard":{"id":571459,"data":{"date":"2025-08-11","repo":{"name":"github.com/ksmet1977/luxpy","commit":"6e54019aa27e59afc2204f77713f5470ce5c8724"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"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":"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":"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":"Code-Review","score":0,"reason":"Found 0/30 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":"Maintained","score":10,"reason":"25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":6,"reason":"binaries present in source code","details":["Warn: binary detected: luxpy/toolboxes/spectro/jeti/dll/win32/jeti_core.dll:1","Warn: binary detected: luxpy/toolboxes/spectro/jeti/dll/win32/jeti_radio_ex.dll:1","Warn: binary detected: luxpy/toolboxes/spectro/jeti/dll/win64/jeti_core64.dll:1","Warn: binary detected: luxpy/toolboxes/spectro/jeti/dll/win64/jeti_radio_ex64.dll:1"],"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":"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":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE.md:0"],"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":"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.12.0 not signed: https://api.github.com/repos/ksmet1977/luxpy/releases/209879263","Warn: release artifact v1.11.4 not signed: https://api.github.com/repos/ksmet1977/luxpy/releases/184923290","Warn: release artifact v1.11.2 not signed: https://api.github.com/repos/ksmet1977/luxpy/releases/169283545","Warn: release artifact v1.11.0 not signed: https://api.github.com/repos/ksmet1977/luxpy/releases/169199445","Warn: release artifact v1.9.8 not signed: https://api.github.com/repos/ksmet1977/luxpy/releases/70380134","Warn: release artifact v1.12.0 does not have provenance: https://api.github.com/repos/ksmet1977/luxpy/releases/209879263","Warn: release artifact v1.11.4 does not have provenance: https://api.github.com/repos/ksmet1977/luxpy/releases/184923290","Warn: release artifact v1.11.2 does not have provenance: https://api.github.com/repos/ksmet1977/luxpy/releases/169283545","Warn: release artifact v1.11.0 does not have provenance: https://api.github.com/repos/ksmet1977/luxpy/releases/169199445","Warn: release artifact v1.9.8 does not have provenance: https://api.github.com/repos/ksmet1977/luxpy/releases/70380134"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":["Info: Possibly incomplete results: error parsing shell code: \"foo(\" must be followed by ): luxpy/toolboxes/stereoscopicviewer/harfang/assets/core/shader/bgfx_compute.sh:0","Info: Possibly incomplete results: error parsing shell code: || can only immediately follow a statement: luxpy/toolboxes/stereoscopicviewer/harfang/assets/core/shader/bgfx_shader.sh:0","Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: luxpy/toolboxes/stereoscopicviewer/harfang/assets/core/shader/forward_pipeline.sh:0","Info: Possibly incomplete results: error parsing shell code: \"foo(\" must be followed by ): luxpy/toolboxes/stereoscopicviewer/harfang/assets_compiled/core/shader/bgfx_compute.sh:0","Info: Possibly incomplete results: error parsing shell code: || can only immediately follow a statement: luxpy/toolboxes/stereoscopicviewer/harfang/assets_compiled/core/shader/bgfx_shader.sh:0","Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: luxpy/toolboxes/stereoscopicviewer/harfang/assets_compiled/core/shader/forward_pipeline.sh:0"],"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"}}]},"last_synced_at":"2025-08-20T16:27:42.284Z","repository_id":40614206,"created_at":"2025-08-20T16:27:42.284Z","updated_at":"2025-08-20T16:27:42.284Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"last_error":"SSL_read: 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":["cct","chromatic-adaptation","cie","ciede2000","cielab","ciexyz","color","color-appearance","color-differences","color-fidelity","color-rendition","color-science","colorimetry","cqs","cri2012","duv","ies-tm30","lighting","python-toolbox","spectral-measurement"],"created_at":"2026-01-14T08:38:46.608Z","updated_at":"2026-01-14T08:38:47.317Z","avatar_url":"https://github.com/ksmet1977.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"800\" height=\"100\" src=\"https://github.com/ksmet1977/luxpy/blob/master/docs/images/LUXPY_logo3.jpg\"\u003e\n\u003c/p\u003e\n\n# Python toolbox for lighting and color science\n* Author: Kevin A.G. Smet (ksmet1977 at gmail.com)\n* Version: 1.12.5\n* Date: November 19, 2025\n* License: [GPLv3](https://github.com/ksmet1977/luxpy/blob/master/LICENSE.md)\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1298963.svg)](https://doi.org/10.5281/zenodo.1298963)\n\n### Cite LuxPy:\nIf you use the package, please cite the following **tutorial paper** published in **LEUKOS**:\n[**Smet, K. A. G. (2020). Tutorial: The LuxPy Python Toolbox for Lighting and Color Science. LEUKOS, 1–23. DOI: 10.1080/15502724.2018.1518717**](https://www.tandfonline.com/doi/full/10.1080/15502724.2018.1518717)\n\n### **NEW** luxpy basic web-app [under development]:\nFor some online spectral calculations (ANSI/IES TM30, CIE 13.3-1995 Ra, CIE 224:2017 Rf, alpha-opic irradiances, Equivalent Daylight Illuminance (EDI), Efficacy of Luminous Radiation (ELR), Daylight Efficacy Ratio (DER), IES/LDT Luminous Intensity Distribution plots/renders, ...) using a python web-application:\n[**ksmet1977-luxpy.streamlit.app/**](https://ksmet1977-luxpy.streamlit.app/)\n \n-------------------------------------------------------------------------------\n## What is LuxPy?\n**Luxpy** is an open source package under a GPLv3 license that supports several common\n**lighting**, **colorimetric**, **color appearance** and other **color science**\n related calculations and models, such as:\n* spectral data interpolation (conform CIE15-2018) and normalization\n* calculation of daylight phase, blackbody radiator and other reference illuminant spectra\n* calculation of tristimulus values\n* correlated color temperature and Duv (methods: robertson1968/2022, ohno2014, li2016, zhang2019, li2022)\n* color space transformations\n* chromatic adaptation transforms \n* color appearance models \n* color rendition indices (eg. CIE Ra, CIE 224:2017 Rf, ANSI/IES TM30 Rf, Rg, ... + IES TM30 Annex E priority levels \u0026 reports)\n* calculation of photobiological quantities (eg melanopic irradiance, MEDI, CS, ...)\n* multi-component spectrum creation and optimization\n* hyper-spectral image simulation and rendering\n* MacAdam ellipses\n* color differences (cam02ucs, DE2000, ...)\n* modelling of individual observer color matching functions (Asano, 2016)\n* calculation of CIEOP06 (cfr. CIE TC1-97) color matching functions and cone-fundamentals\n* display characterization\n* reading and visualizing IES and LDT photometric files (vizualizations: 2D polar plots, 3D plots, single-bounce physical-based rendering)\n* spectral mismatch (f1', correction factors) and measurement uncertainty (under development)\n* Basic TechnoTeam LMK (LabSoft) control: do XYZ-map and Y-map measurements\n* Virtual Reality Head-Mounted-Display viewer for stereoscopic (equirectangular) images using Harfang Python framework\n* ...\n\nAs of May 2019, LuxPy now also has a toolbox **spectro** for **spectral measurements** with **JETI** and **OceanOptics** spectrometers:\n* spectro.jeti: easy installation (dll's are part of sub-package).\n* spectro.oceanoptics: more tricky installation (requires manual install of  **python-seabreeze**, ...; see [here](https://github.com/ksmet1977/luxpy/blob/master/luxpy/toolboxes/spectro/oceanoptics/oceanoptics.md) or subpackage help for more info)\n\n**UPDATED** (May, 2021): **ANSI/IES-TM30-2018** graphical output (**Color Rendition Reports**, **Color Vector Graphics**, **Annex E priority levels**...)\n\n-------------------------------------------------------------------------------\n## How to use LuxPy (basics)?\nLuxpy can be easily installed from pypi `pip install luxpy`.\n\nAn overview of the *basic usage* is given in the [**luxpy basic usage.ipynb**](https://github.com/ksmet1977/luxpy/blob/master/luxpy_basic_usage.ipynb) jupyter notebook (**!! Don't right-click to save, see below for download instructions !!**),\n as well as the tutorial paper published in LEUKOS: [**Smet, K. A. G. (2020). Tutorial: The LuxPy Python Toolbox for Lighting and Color Science. LEUKOS, 1–23. DOI: 10.1080/15502724.2018.1518717**](https://www.tandfonline.com/doi/full/10.1080/15502724.2018.1518717)\n\n * !!! **To download jupyter notebook:**\n     1. Open the notebook in github by clicking it and then press download button at the top right; don't right-click the notebook link itself and use 'save as ...', as this apparently results in some *NotJSONError* when opening the notebook!\n     2. If the jupyter notebook fails to open or download or still gives an error: (*Github seems to experience some type of problem sometimes with its jupyter notebook backend, see [issue](https://github.com/iurisegtovich/PyTherm-applied-thermodynamics/issues/11)*), try opening the file using the [nbviewer.jupyter.org](https://nbviewer.jupyter.org) online viewer, (or just click this direct link: [nbviewer.jupyter.org/github/ksmet1977/luxpy/blob/master/luxpy_basic_usage.ipynb](https://nbviewer.jupyter.org/github/ksmet1977/luxpy/blob/master/luxpy_basic_usage.ipynb)) and then download it from there (use download notebook button at the top right of the page). \n \nFor more details on structure, functionality, etc., see: \n 1. the github pages on: [**ksmet1977.github.io/luxpy/**](http://ksmet1977.github.io/luxpy/) \n 2. the [**LuxPy_Documentation**](https://github.com/ksmet1977/luxpy/blob/master/LuxPy_Documentation.pdf) pdf\n 3. or, the **\\__doc__string** of each function. \n        \n    To get help on, for example the **spd_to_xyz()** function, type:\n\n\n            import luxpy as lx\n            ?lx.spd_to_xyz\n    \n    To get a list of functions/modules, type:\n\n\n            dir(lx)\n    \n\n-------------------------------------------------------------------------------\n## Python tutorials\n#### Some basic tutorials can be found at:\n * [cs231n.github.io/python-numpy-tutorial/](http://cs231n.github.io/python-numpy-tutorial/) \n * [docs.python.org/3/tutorial/](https://docs.python.org/3/tutorial/) \n#### A list of basic and more advanced is given at:\n * [wiki.python.org/moin/BeginnersGuide/Programmers](https://wiki.python.org/moin/BeginnersGuide/Programmers)\n#### Matlab versus Python:\n * [scipy.github.io/old-wiki/pages/NumPy_for_Matlab_Users.html](http://scipy.github.io/old-wiki/pages/NumPy_for_Matlab_Users.html)\n#### Udemy.com:\n * [Udemy.com](https://www.udemy.com/courses/search/?ref=home\u0026src=ukw\u0026q=python%20numpy) offers some great courses. Although some of these are payed, they often come at huge discounted prices. \n#### Youtube.com:\n * [www.youtube.com](https://www.youtube.com/results?search_query=python+numpy+tutorial) also has lots of free online tutorials.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksmet1977%2Fluxpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fksmet1977%2Fluxpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksmet1977%2Fluxpy/lists"}