{"id":22700469,"url":"https://github.com/iostreamer-x/specter","last_synced_at":"2026-04-27T21:31:56.948Z","repository":{"id":38538044,"uuid":"163677650","full_name":"iostreamer-X/Specter","owner":"iostreamer-X","description":"Not just a collection of generative art pieces, but also a Processing toolbelt, built atop opinionated abstractions.","archived":false,"fork":false,"pushed_at":"2023-01-26T23:27:02.000Z","size":32568,"stargazers_count":2,"open_issues_count":10,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-20T05:38:32.166Z","etag":null,"topics":["generative-art","processing"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/iostreamer-X.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":"2018-12-31T15:07:08.000Z","updated_at":"2022-03-12T21:46:03.000Z","dependencies_parsed_at":"2023-02-15T03:01:35.212Z","dependency_job_id":null,"html_url":"https://github.com/iostreamer-X/Specter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iostreamer-X/Specter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iostreamer-X%2FSpecter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iostreamer-X%2FSpecter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iostreamer-X%2FSpecter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iostreamer-X%2FSpecter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iostreamer-X","download_url":"https://codeload.github.com/iostreamer-X/Specter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iostreamer-X%2FSpecter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32356598,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"ssl_error","status_checked_at":"2026-04-27T20:07:00.910Z","response_time":128,"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":["generative-art","processing"],"created_at":"2024-12-10T06:12:34.133Z","updated_at":"2026-04-27T21:31:56.921Z","avatar_url":"https://github.com/iostreamer-X.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Specter\n\nNot just a collection of generative art pieces, but also a Processing toolbelt, built atop opinionated abstractions.\n\n## Order and Chaos\n\nOne can always find a shimmer of order in chaos. And order without chaos is a fallacy.\n\n### Workings\n\nThe base of this algorithm is, to create lines with jitter effect. For that, I randomly choose a point on the line,\nfind the line perpendicular to the given line, choose a random point based on given maximum height on this perpendicular line, and the point I chose on my original line gets shifted to this new point.\n\nNow that we are done with lines, let's focus on circles. To create a circle with jitter effect, I forwent the standard ellipse function. Rather I create my own version of circle function. Where a circle is built by tiny lines, and all these tiny lines have jitter effect.\n\nAnd the whole thing is brought together by these 2 simple lines of code:\n\n```python\nfor iteration in range(1, 160):\n    strokeWeight(map(noise(iteration), 0, 1, 1, 1.2))\n    jitteryCircle(width/2, height/2, radius + map(noise(iteration), 0, 1, radius*iteration*0.7, radius*iteration), 15, iteration=iteration*0.4)\n```\n\nThis loop is used to simply magnify the circle and other effects, more the iterations, larger the size, larger the effects. This is guaranteed by passing the `iteration` variable to `jitteryCircle`, which in turn is passed to `jitteryLine`. In this way, each function is aware of current iteration, and can use it to change its state. For example, `jitterLine` could change its jitter height based on `iteration`.\n\n`jitteryCircle` also take `turns` as an argument, as in how many times should it draw the circle. Now one would think why would this matter, it will only be overwriting the same circle. Well, yes, unless, with each plotting of line, the radius is also changing. Then, higher the `turns`, more spread out the circle will be. And as one can witness in the images, the spread is a direct consequence of `turns` being `15`.\n\nFor **Order**, I did all the things explained above, but also played with `stroke`, in order to bring out a nice red, blue gradient.\nAnd for **Chaos**, I varied the grayness but also turned up the jitter effect.\n\n![Order](/artwork/order_and_chaos/order.png)\n\n![Chaos](/artwork/order_and_chaos/chaos.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiostreamer-x%2Fspecter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiostreamer-x%2Fspecter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiostreamer-x%2Fspecter/lists"}