{"id":37074930,"url":"https://github.com/mfnch/pyrtist","last_synced_at":"2026-01-14T08:49:33.705Z","repository":{"id":62583233,"uuid":"86222202","full_name":"mfnch/pyrtist","owner":"mfnch","description":"A GUI which enables drawing using Python scripts","archived":false,"fork":false,"pushed_at":"2024-03-27T11:24:28.000Z","size":24707,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-27T19:47:02.955Z","etag":null,"topics":["gui","python","vector-graphics"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mfnch.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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}},"created_at":"2017-03-26T09:44:31.000Z","updated_at":"2023-03-22T23:29:38.000Z","dependencies_parsed_at":"2024-03-27T12:44:42.296Z","dependency_job_id":null,"html_url":"https://github.com/mfnch/pyrtist","commit_stats":{"total_commits":1804,"total_committers":4,"mean_commits":451.0,"dds":0.5809312638580931,"last_synced_commit":"4a8098e5d2a1ba56abfc6bbe6351888120844394"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mfnch/pyrtist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfnch%2Fpyrtist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfnch%2Fpyrtist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfnch%2Fpyrtist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfnch%2Fpyrtist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfnch","download_url":"https://codeload.github.com/mfnch/pyrtist/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfnch%2Fpyrtist/sbom","scorecard":{"id":638869,"data":{"date":"2025-08-11","repo":{"name":"github.com/mfnch/pyrtist","commit":"3055c519ab18fa2cd237007ece6f896f5f92a75b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"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":"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":"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":"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":"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":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":"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":"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: COPYING:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v2.1: COPYING: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":"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":"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":"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"}}]},"last_synced_at":"2025-08-21T10:06:08.393Z","repository_id":62583233,"created_at":"2025-08-21T10:06:08.393Z","updated_at":"2025-08-21T10:06:08.393Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414693,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["gui","python","vector-graphics"],"created_at":"2026-01-14T08:49:33.190Z","updated_at":"2026-01-14T08:49:33.693Z","avatar_url":"https://github.com/mfnch.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"=======\nPyrtist\n=======\n\nPyrtist is a library and IDE which enables **drawing using Python scripts**.\nMultiple Python APIs can be used for drawing, such as\n`PyCairo \u003chttps://pycairo.readthedocs.io/\u003e`_,\n`PIL \u003chttps://pillow.readthedocs.io/\u003e`_, OpenGL\n(using fragment shaders like in `Shadertoy \u003chttps://www.shadertoy.com/\u003e`_) and\nPyrtist's own drawing APIs.\n\n.. figure:: doc/seascape.png\n   :align: center\n\n   **Figure 1**: Shader from https://www.shadertoy.com/view/Ms2SD1 running in the Pyrtist GUI.\n   See `here \u003cpyrtist/examples/draw_with_glsl.py\u003e`_ for a minimal GLSL (OpenGL) example.\n\nThe Pyrtist window is subdivided in two halves:\n\n* The **script view** allows to write and adjust the Python script which draws\n  the graphics,\n\n* The **picture view** shows the graphical output produced by the script and\n  allows to interact with the picture and adjust it, by moving some reference\n  points (with the mouse for example), which the Python script sees as regular\n  variables.\n\n.. figure:: doc/pyrtist_house.png\n   :align: center\n\n   **Figure 2**: The cartoon house example opened in the Pyrtist GUI.\n\nThe two views allow you to create pictures that can exploit the scripting\ncapabilities of Python while still allowing you to naturally interact with the\ngraphics. Your drawings can be saved to disk as ordinary Python scripts.\nYou can execute them on their own, outside the Pyrtist user interface,\nor you can re-open them with Pyrtist if you need to change them.\n\nYour scripts can exploit the full power of Python and can be as smart as you\nwant them to be. If you are a programmer, you can then use the tools you are\nfamiliar with. You can track different versions of your drawings using\n`git \u003chttps://git-scm.com/\u003e`_. You can use Makefiles to automatically rebuild a\nlarge collection of Pyrtist drawings, which all import the same module defining\ncolor and style. Need a different color scheme or line width scheme for all\nyour pictures? Just change one file and type ``make``. They will all be\ngenerated automatically for you. Importantly, you can easily reuse old\ndrawings. They are text and as such you can easily copy and paste them. You can\ncreate modules containing them and you can couple them with the thousands\nPython libraries out there.\n\n.. figure:: doc/draw_with_cairo.png\n   :align: center\n\n   **Figure 3**: Example showing how to use the PyCairo API from Pyrtist.\n   `See source \u003cpyrtist/examples/draw_with_cairo.py\u003e`_.\n\n======\nStatus\n======\n\nThis software is under development. Pyrtist's own drawing API is not fully\nstable and not well documented. The `examples \u003cpyrtist/examples\u003e`_\nmay give some guidance. Alternatively, other APIs can be used for drawing\nsuch as PyCairo, PIL and GLSL.\n\nAny feedback and contributions are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfnch%2Fpyrtist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfnch%2Fpyrtist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfnch%2Fpyrtist/lists"}