{"id":37076364,"url":"https://github.com/deut-erium/pyfractal","last_synced_at":"2026-01-14T08:58:57.880Z","repository":{"id":62580434,"uuid":"267815232","full_name":"deut-erium/pyfractal","owner":"deut-erium","description":"A gui based self-similar fractal generator","archived":false,"fork":false,"pushed_at":"2021-08-11T11:37:10.000Z","size":62379,"stargazers_count":10,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-19T12:32:16.924Z","etag":null,"topics":["drawing-fractals","fractal","fractal-images","gui","pyfractal","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deut-erium.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}},"created_at":"2020-05-29T09:12:14.000Z","updated_at":"2022-12-05T04:34:06.000Z","dependencies_parsed_at":"2022-11-03T21:02:39.620Z","dependency_job_id":null,"html_url":"https://github.com/deut-erium/pyfractal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/deut-erium/pyfractal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deut-erium%2Fpyfractal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deut-erium%2Fpyfractal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deut-erium%2Fpyfractal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deut-erium%2Fpyfractal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deut-erium","download_url":"https://codeload.github.com/deut-erium/pyfractal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deut-erium%2Fpyfractal/sbom","scorecard":{"id":336467,"data":{"date":"2025-08-11","repo":{"name":"github.com/deut-erium/pyfractal","commit":"d62d1d3e8e34924c4272b171d82d62f47a1d1745"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"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":"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":"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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":"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-18T04:51:37.333Z","repository_id":62580434,"created_at":"2025-08-18T04:51:37.333Z","updated_at":"2025-08-18T04:51:37.333Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414729,"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":["drawing-fractals","fractal","fractal-images","gui","pyfractal","python3"],"created_at":"2026-01-14T08:58:57.360Z","updated_at":"2026-01-14T08:58:57.867Z","avatar_url":"https://github.com/deut-erium.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pyfractal\r\nA simple gui based self-similar fractal generator\r\n\r\n## Introduction\r\nThis project is aimed to provide a simple gui for drawing fractals so that anyone enthusiastic enough can give them a try.\r\n\r\n## Table of contents\r\n* [Features](#features)\r\n* [Samples/Download](#samples)\r\n* [Setup](#setup)\r\n* [Usage](#usage)\r\n* [Libraries Used](#libraries)\r\n* [Feedback](#feedback)\r\n* [TODO](#todo)\r\n* [Sources](#sources)\r\n* [Contact](#contact)\r\n\r\nI was exploring [an awesome site](http://www.fractalcurves.com/) which taught me how a [turtle](https://docs.python.org/3/library/turtle.html) would draw amazing fractal curves.\r\nPerhaps I made a small script which would draw fractals pretty neatly but it had two issues :-\r\n* **It was slow** as it took sleeps in between each step (huh is it a turtle or a rabbit) and even after turning the animations off, it was still slow due to implementation styles\r\n* Python Turtle's audience is beginners to programming, so it limited the extendibility of the script\r\n* I wanted to learn more about GUI programming, python packaging, good coding practices and [other important stuff](https://stackoverflow.com/questions/11828270/how-do-i-exit-the-vim-editor)\r\n* It had **limited scope** in scrolling, panning and zooming (the most fun things to do with a fractal)\r\n* There is no pyfractal python library hehe\r\n\r\n## \u003ca name=\"features\"\u003e\u003c/a\u003eFeatures\r\n* A GUI (obviously)\r\n* Exporting fractals to your desired format (namely svg, postscript and png)\r\n* Loading and storing curve parameters for future endeavours\r\n* Scrolling, panning and zooming to any extent\r\n* Preview of base shape of fractal\r\n* Drawing multiple fractals at once on a canvas\r\n* Appending rules of several fractals (more people may consider it a bug, but i consider it a feature)\r\n* Degree and radian support\r\n\r\n## \u003ca name=\"samples\"\u003e\u003c/a\u003eSamples/Download\r\nA few of the fractal images are available to download/view in [fractal_images](fractal_images) in png and svg formats\r\n\u003e NOTE: Pngs may get **HUGE** in size, deter from using them \r\n![](https://github.com/deut-erium/pyfractal/blob/master/fractal_images/svgs/5_curvePuppy.svg?raw=1)\r\n\r\n![](https://github.com/deut-erium/pyfractal/blob/master/fractal_images/svgs/19_curve2_FractalFlower.svg?raw=1)\r\n\r\n## \u003ca name=\"setup\"\u003e\u003c/a\u003eSetup\r\n```pip3 install pyfractal```\r\n\r\nor \r\n\r\n```pip install pyfractal```\r\n\r\nshould do the job depending on the distribution\r\n\r\nHaving issues installing? Feel free to [report issue](https://github.com/deut-erium/pyfractal/issues/new) or simply clone the repository and run [main.py](https://github.com/deut-erium/pyfractal/blob/master/main.py?raw=true)\r\n\r\n## \u003ca name=\"usage\"\u003e\u003c/a\u003eUsage\r\n\r\n```\r\nimport pyfractal  #import the module\r\npyfractal.GUI().run()  #to run the main gui\r\n```\r\nA GUI should pop up\r\n![Main GUI](https://github.com/deut-erium/pyfractal/blob/master/images/main_gui.PNG)\r\n\r\n\r\n### Curve parameter input\r\nPressing on the `plus` and `minus` buttons adds and removes entires for rule input\r\n\r\n### Saving curve parameters\r\nPress the `Save Parameters` button to save the parameters, a dialog box should appear asking for the name of the file to save\r\nthe parameters are stored in a json file\r\n\r\n### Loading curve parameters\r\nPress the `Load Parameters` button to load the parameters, a dialog box should appear asking for the name of the file. If the file is correctly formatted, you should see the parameters loaded onto the screen and list of rules added to the list. \r\n\r\n---\r\n**NOTE**\r\nThe rules are appended to the list of pre-written rules (this is a design choice, not a bug) , clear the pre-existing rules by repeatedly pressing `minus` button then loading from file.\r\n\r\n---\r\n\r\n![Example Fractal](https://github.com/deut-erium/pyfractal/blob/master/images/example_fractal.PNG?raw=true)\r\n### Drawing fractals\r\nFeed in/ load the rules, you will see the preview of base fractal image on the smaller canvas.\r\n\r\nEnter your desired `Recursion Depth` and you will see your fractal drawn on the canvas\r\nPan/scale/scroll in the canvas according to your viewing preferences\r\n\r\n---\r\n**NOTE**\r\nThe rules/preview-canvas is update only once `plus` or `minus` button is pressed.\r\n\r\nStart drawing fractal from a smaller recursion-depth. The size of fractal is exponential in the recursion depth. It is recommended that you keep `Recursion depth` to a single digit integer.\r\n\r\n---\r\n\r\n## \u003ca name=\"libraries\"\u003e\u003c/a\u003eLibraries Used\r\nThe project is almost built entirely on [tkinter](https://docs.python.org/3/library/tkinter.html)\r\nBesides using [Pillow](https://pillow.readthedocs.io/en/stable/) and [canvasvg](https://pypi.org/project/canvasvg/) to save the canvas\r\n\r\n## \u003ca name=\"sources\"\u003e\u003c/a\u003eFeedback\r\nFeel free to contribute/clone/[Issue](https://github.com/deut-erium/pyfractal/issues/new) or [Contact](#contact) me\r\n\r\n## \u003ca name=\"todo\"\u003e\u003c/a\u003eTODO \r\nThis is probably a VERY long list but here are key TODO's :-\r\n- [x] **Curved Edges** \r\n  - [x] Adding option to curve the corners/edges to make the fractal smoother and to see more clearly the sweep of the fractal\r\n  - [ ] Adding splines instead of boring straight lines\r\n- [ ] Conversion of degree to radians in input feild on pressing radio buttons (not really important but OK)\r\n- [ ] Help Pages\r\n  * No amount of help pages is sufficient\r\n- [ ] Menubar\r\n  * Adding a Menubar for easy access to resources and help pages\r\n- [x] More graphic options\r\n  - [x] Color support for lines and fills\r\n  - [x] Background color/image specification \r\n- [ ] Animations\r\n  - [ ] Animating the turtle (why?? wasn't this the main purpose behind building this project) to momentarily enjoy the chaos caused by simple rules of life  \r\n- [ ] More types of fractals\r\n  - [ ] Support for [L systems](https://en.wikipedia.org/wiki/L-system)\r\n  - [ ] Support for General [IFS](https://en.wikipedia.org/wiki/Iterated_function_system)\r\n  - [ ] A more non-math peep friendly system?\r\n- [ ] Grid based input\r\nAs described [here](http://www.fractalcurves.com/Taxonomy.html)\r\n  - [ ] Square grid\r\n  - [ ] Triangular grid\r\n  - [ ] A general lattice maybe?\r\n  - [ ] A general 3 dimensional lattice (okay I admit I am being too optimistic)\r\n- [ ] Fractal type specifier\r\n  - [ ] Automatically specify self-avoiding, self-contacting(edge/vertex), self-crossing types from the base rules\r\n  - [ ] Dimension calculator\r\n- [ ] Fractal tile extraction\r\n  - [ ] Extract tiles from tile-able fractals\r\n- [ ] More toooooools\r\n  - [ ] Clone fractals\r\n  - [ ] Drag and drop items around on the canvas\r\n  \r\n## \u003ca name=\"sources\"\u003e\u003c/a\u003eSources\r\nThe following links are pretty useful and helpful in learning more about fractals\r\n* http://www.fractalcurves.com is the main inspiration behind this project\r\n* https://www.youtube.com/watch?v=gB9n2gHsHN4 is a pretty interesting watch by 3Blue1Brown\r\n\r\n## \u003ca name=\"contact\"\u003e\u003c/a\u003eContact\r\n* [My website](https://deut-erium.github.io/)\r\n* Feel free to give suggestions/recommendations/criticism on [Discord](https://discord.com/users/deuterium#1689) or [LinkedIn](https://www.linkedin.com/in/himanshu-sheoran-ab047b152)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeut-erium%2Fpyfractal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeut-erium%2Fpyfractal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeut-erium%2Fpyfractal/lists"}