{"id":37085565,"url":"https://github.com/txoof/epdlib","last_synced_at":"2026-01-14T10:31:28.689Z","repository":{"id":40534935,"uuid":"239821766","full_name":"txoof/epdlib","owner":"txoof","description":"Python library for creating and writing modular layouts for e-paper screens","archived":false,"fork":false,"pushed_at":"2024-09-03T22:54:36.000Z","size":6157,"stargazers_count":19,"open_issues_count":8,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-29T11:48:29.707Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/txoof.png","metadata":{"files":{"readme":"README.md","changelog":"changes.md","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":null,"authors":null}},"created_at":"2020-02-11T17:24:19.000Z","updated_at":"2025-04-02T20:34:18.000Z","dependencies_parsed_at":"2023-01-28T00:46:41.586Z","dependency_job_id":"0a87af05-fad1-4bea-aba5-3b8736b579e6","html_url":"https://github.com/txoof/epdlib","commit_stats":{"total_commits":206,"total_committers":2,"mean_commits":103.0,"dds":0.004854368932038833,"last_synced_commit":"2513a4dfd3b58f1d26598b60b1a9d2acff971d68"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/txoof/epdlib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fepdlib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fepdlib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fepdlib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fepdlib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/txoof","download_url":"https://codeload.github.com/txoof/epdlib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/txoof%2Fepdlib/sbom","scorecard":{"id":904590,"data":{"date":"2025-08-11","repo":{"name":"github.com/txoof/epdlib","commit":"424c3f4aff28b4e92b0abb38b73ecfc36151630e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/26 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"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":"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":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/txoof/epdlib/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/txoof/epdlib/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/txoof/epdlib/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/txoof/epdlib/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/txoof/epdlib/release.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:21","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:36"],"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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 14 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"}},{"name":"Vulnerabilities","score":0,"reason":"53 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-3c5c-7235-994j","Warn: Project is vulnerable to: GHSA-3f63-hfp8-52jq","Warn: Project is vulnerable to: PYSEC-2021-41 / GHSA-3wvg-mj6g-m9cv","Warn: Project is vulnerable to: PYSEC-2020-77 / GHSA-3xv8-3j54-hgrp","Warn: Project is vulnerable to: PYSEC-2020-80 / GHSA-43fq-w8qq-v88h","Warn: Project is vulnerable to: GHSA-44wm-f244-xhp3","Warn: Project is vulnerable to: GHSA-4fx9-vc88-q2xc","Warn: Project is vulnerable to: PYSEC-2021-35 / GHSA-57h3-9rgr-c24m","Warn: Project is vulnerable to: PYSEC-2020-172 / GHSA-5gm3-px64-rw72","Warn: Project is vulnerable to: PYSEC-2021-331 / GHSA-7534-mm45-c74v","Warn: Project is vulnerable to: PYSEC-2021-92 / GHSA-7r7m-5h27-29hp","Warn: Project is vulnerable to: PYSEC-2020-78 / GHSA-8843-m7mw-mxqm","Warn: Project is vulnerable to: PYSEC-2023-227 / GHSA-8ghj-p4vj-mr35","Warn: Project is vulnerable to: PYSEC-2014-87 / GHSA-8m9x-pxwq-j236","Warn: Project is vulnerable to: PYSEC-2022-10 / GHSA-8vj2-vxx3-667w","Warn: Project is vulnerable to: PYSEC-2021-36 / GHSA-8xjq-8fcg-g5hw","Warn: Project is vulnerable to: PYSEC-2016-6 / GHSA-8xjv-v9xq-m5h9","Warn: Project is vulnerable to: PYSEC-2021-42 / GHSA-95q3-8gr9-gm8w","Warn: Project is vulnerable to: PYSEC-2022-168 / GHSA-9j59-75qj-795w","Warn: Project is vulnerable to: PYSEC-2014-10 / GHSA-cfmr-38g9-f2h7","Warn: Project is vulnerable to: PYSEC-2020-76 / GHSA-cqhg-xjhh-p8hf","Warn: Project is vulnerable to: PYSEC-2021-40 / GHSA-f4w8-cv6p-x6r5","Warn: Project is vulnerable to: PYSEC-2021-69 / GHSA-f5g8-5qq7-938w","Warn: Project is vulnerable to: PYSEC-2021-139 / GHSA-g6rj-rv7j-xwp4","Warn: Project is vulnerable to: PYSEC-2015-16 / GHSA-h5rf-vgqx-wjv2","Warn: Project is vulnerable to: PYSEC-2016-5 / GHSA-hggx-3h72-49ww","Warn: Project is vulnerable to: PYSEC-2020-84 / GHSA-hj69-c76v-86wr","Warn: Project is vulnerable to: PYSEC-2016-7 / GHSA-hvr8-466p-75rh","Warn: Project is vulnerable to: PYSEC-2015-15 / GHSA-j6f7-g425-4gmx","Warn: Project is vulnerable to: GHSA-j7hp-h8jx-5ppr","Warn: Project is vulnerable to: PYSEC-2019-110 / GHSA-j7mj-748x-7p78","Warn: Project is vulnerable to: GHSA-jgpv-4h4c-xhw3","Warn: Project is vulnerable to: PYSEC-2022-42979 / GHSA-m2vv-5vj5-2hm7","Warn: Project is vulnerable to: PYSEC-2021-37 / GHSA-mvg9-xffr-p774","Warn: Project is vulnerable to: PYSEC-2020-83 / GHSA-p49h-hjvm-jg3h","Warn: Project is vulnerable to: PYSEC-2022-8 / GHSA-pw3c-h7wp-cvhx","Warn: Project is vulnerable to: PYSEC-2021-93 / GHSA-q5hq-fp76-qmrc","Warn: Project is vulnerable to: PYSEC-2020-82 / GHSA-r7rm-8j6h-r933","Warn: Project is vulnerable to: PYSEC-2014-23 / GHSA-r854-96gq-rfg3","Warn: Project is vulnerable to: PYSEC-2016-8 / GHSA-rwr3-c2q8-gm56","Warn: Project is vulnerable to: PYSEC-2020-81 / GHSA-vcqg-3p29-xw73","Warn: Project is vulnerable to: PYSEC-2020-79 / GHSA-vj42-xq3r-hr3r","Warn: Project is vulnerable to: PYSEC-2021-70 / GHSA-vqcj-wrf2-7v73","Warn: Project is vulnerable to: PYSEC-2016-9 / GHSA-w4vg-rf63-f3j3","Warn: Project is vulnerable to: PYSEC-2014-22 / GHSA-x895-2wrm-hvp7","Warn: Project is vulnerable to: PYSEC-2022-9 / GHSA-xrcv-f9gm-v42c","Warn: Project is vulnerable to: PYSEC-2021-137","Warn: Project is vulnerable to: PYSEC-2021-138","Warn: Project is vulnerable to: PYSEC-2021-317","Warn: Project is vulnerable to: PYSEC-2021-38","Warn: Project is vulnerable to: PYSEC-2021-39","Warn: Project is vulnerable to: PYSEC-2021-94","Warn: Project is vulnerable to: PYSEC-2023-175"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T16:52:37.252Z","repository_id":40534935,"created_at":"2025-08-24T16:52:37.252Z","updated_at":"2025-08-24T16:52:37.252Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:25:19.714Z","status":"ssl_error","status_checked_at":"2026-01-14T10:22:49.371Z","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":[],"created_at":"2026-01-14T10:31:28.626Z","updated_at":"2026-01-14T10:31:28.682Z","avatar_url":"https://github.com/txoof.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# epdlib v0.6\n\nEpdLib provides an interface for creating and displaying scalable layouts that work with most of WaveShare's EPaper displays (EPD). The `Layout` module can also be used for generating layouts for any screen-buffered display that does not require fast updates. \n\nEpdLib provides classes for interfacing with the screen (`Screen`), building layouts that will work at any resolution (`Layout`), and blocks that are used to assemble layouts (`Block`). EpdLib makes it trivial to build a project that will work on almost any WaveShare display without worrying about the resolution or recoding the display functions.\n\n![3x2 Sample](./docs/weather_3x2.png)\n\n![5x5 Sample](./docs/weather_5x5.png)\n\nEpdLib supports almost all of WaveShare's EPD screens. See the [Supported Screens](#supported-screens) below.\n\n* 7-Color screens are supported in full color\n* HD Screens are supported in 8 bit gray and support partial refresh (~1 second)\n* All 2 and 3 color screens are supported in 1 bit (black and white) only\n\n## Changes\n\nSee the [ChangeLog](./changes.md) for details\n\n### v0.6\n\n* Add support for 8-Color WaveShare screens to Block, Screen and Layout\n* All Blocks and Layouts now support \"RGB\" content\n* Layouts and blocks can now be dynamically updated during runtime\n* `Layout.layout` dictionaries must contain key `type` that matches the block type\n* Layouts support HTML standard color names and map [RED, ORANGE, YELLOW, GREEN, BLUE, BLACK, WHITE] to proper WaveShare Values\n\n## Dependencies\n\nPython Modules:\n* Pillow: System dependencies for Pillow:\n    * libopenjp2-7\n    * libtiff5\n* RPi.GPIO\n* spidev: ensure SPI is enabled on the pi\n* waveshare-epd (Non IT8951 based panels): see [notes](#notes) below for installation instructions\n    * this is for interacting with waveshare epaper displays and is not strictly needed to use the Block and Layout objects.\n* IT8951 (IT8951 based panels): see [notes](#notes) below for installation instructions\n\n\n## Modules:\n\n* [Block](./docs/Block.md) - image and text blocks that can be used to create a layout\n* [Layout](./docs/Layout.md) - create layouts from Blocks that will work on nearly any WaveShare screen automagically\n* [Screen](./docs/Screen.md) - simple interface for writing to WaveShare EPD devices\n\n## Supported Screens\n\n\n|Screen            |Supported      |Mode          |\n|:-----------------|:--------------|:-------------|\n|00. epd13in3k     |True           |\"1\" 1 bit     |\n|01. epd1in02      |True           |\"1\" 1 bit     |\n|02. epd1in54      |True           |\"1\" 1 bit     |\n|03. epd1in54_V2   |True           |\"1\" 1 bit     |\n|04. epd1in54b     |True           |\"1\" 1 bit     |\n|05. epd1in54b_V2  |True           |\"1\" 1 bit     |\n|06. epd1in54c     |True           |\"1\" 1 bit     |\n|07. epd1in64g     |True           |\"1\" 1 bit     |\n|08. epd2in13      |True           |\"1\" 1 bit     |\n|09. epd2in13_V2   |True           |\"1\" 1 bit     |\n|10. epd2in13_V3   |True           |\"1\" 1 bit     |\n|11. epd2in13_V4   |True           |\"1\" 1 bit     |\n|12. epd2in13b_V3  |True           |\"1\" 1 bit     |\n|13. epd2in13b_V4  |True           |\"1\" 1 bit     |\n|14. epd2in13bc    |True           |\"1\" 1 bit     |\n|15. epd2in13d     |False          |Unsupported   |\n|16. epd2in13g     |True           |\"1\" 1 bit     |\n|17. epd2in36g     |True           |\"1\" 1 bit     |\n|18. epd2in66      |True           |\"1\" 1 bit     |\n|19. epd2in66b     |True           |\"1\" 1 bit     |\n|20. epd2in66g     |True           |\"1\" 1 bit     |\n|21. epd2in7       |True           |\"1\" 1 bit     |\n|22. epd2in7_V2    |True           |\"1\" 1 bit     |\n|23. epd2in7b      |True           |\"1\" 1 bit     |\n|24. epd2in7b_V2   |True           |\"1\" 1 bit     |\n|25. epd2in9       |True           |\"1\" 1 bit     |\n|26. epd2in9_V2    |True           |\"1\" 1 bit     |\n|27. epd2in9b_V3   |True           |\"1\" 1 bit     |\n|28. epd2in9b_V4   |True           |\"1\" 1 bit     |\n|29. epd2in9bc     |True           |\"1\" 1 bit     |\n|30. epd2in9d      |False          |Unsupported   |\n|31. epd3in0g      |True           |\"1\" 1 bit     |\n|32. epd3in52      |True           |\"1\" 1 bit     |\n|33. epd3in7       |False          |Unsupported   |\n|34. epd4in01f     |True           |\"RGB\" 7 Color |\n|35. epd4in2       |False          |Unsupported   |\n|36. epd4in26      |True           |\"1\" 1 bit     |\n|37. epd4in2_V2    |False          |Unsupported   |\n|38. epd4in2b_V2   |True           |\"1\" 1 bit     |\n|39. epd4in2bc     |True           |\"1\" 1 bit     |\n|40. epd4in37g     |True           |\"1\" 1 bit     |\n|41. epd5in65f     |True           |\"RGB\" 7 Color |\n|42. epd5in83      |True           |\"1\" 1 bit     |\n|43. epd5in83_V2   |True           |\"1\" 1 bit     |\n|44. epd5in83b_V2  |True           |\"1\" 1 bit     |\n|45. epd5in83bc    |True           |\"1\" 1 bit     |\n|46. epd7in3f      |True           |\"RGB\" 7 Color |\n|47. epd7in3g      |True           |\"1\" 1 bit     |\n|48. epd7in5       |True           |\"1\" 1 bit     |\n|49. epd7in5_HD    |True           |\"1\" 1 bit     |\n|50. epd7in5_V2    |True           |\"1\" 1 bit     |\n|51. epd7in5_V2_old|True           |\"1\" 1 bit     |\n|52. epd7in5b_HD   |True           |\"1\" 1 bit     |\n|53. epd7in5b_V2   |True           |\"1\" 1 bit     |\n|54. epd7in5bc     |True           |\"1\" 1 bit     |\n|55. All HD IT8951 |True           |\"L\" 8 bit     |\n\nAdd your enthusiasm to standardize the `epd1in02` screen to [this Pull Request](https://github.com/waveshare/e-Paper/pull/283). \n\nThe `epd3in7` is an oddball that has several issues:\n\n* 'Non-standard, unsupported `EPD.Clear()` function',\n* 'AttributeError: module does not support standard `EPD.display()` function\n\n## Notes\n\n### WaveShare non-IT8951 Screens\n\nThe waveshare-epd library is required for non-IT8951 screens and can be installed from the Git repo:\n\n```Shell\npip install -e \"git+https://github.com/waveshare/e-Paper.git#egg=waveshare_epd\u0026subdirectory=RaspberryPi_JetsonNano/python\"\n```\n\n### IT8951 basee Screens\n\n[Greg D Meyer's IT8951 library](https://github.com/GregDMeyer/IT8951) is required and can be installed from the Git repo:\n\n```Shell\npip install -e \"git+https://github.com/GregDMeyer/IT8951#egg=IT8951\"\n```\n\n\ngetting ready for pypi:\nhttps://medium.com/@joel.barmettler/how-to-upload-your-python-package-to-pypi-65edc5fe9c56\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxoof%2Fepdlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftxoof%2Fepdlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftxoof%2Fepdlib/lists"}