{"id":24396702,"url":"https://github.com/oscarsaharoy/subtiles","last_synced_at":"2026-04-27T13:33:01.856Z","repository":{"id":172664337,"uuid":"649584525","full_name":"OscarSaharoy/subtiles","owner":"OscarSaharoy","description":"create subdivision tilings","archived":false,"fork":false,"pushed_at":"2024-10-17T23:47:40.000Z","size":21366,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-30T22:33:53.593Z","etag":null,"topics":["geometry","svg","web"],"latest_commit_sha":null,"homepage":"https://oscarsaharoy.github.io/subtiles","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OscarSaharoy.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}},"created_at":"2023-06-05T07:45:16.000Z","updated_at":"2024-10-17T23:47:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"6c867f1e-5a7d-4a1e-afe1-3a053e55a0e2","html_url":"https://github.com/OscarSaharoy/subtiles","commit_stats":null,"previous_names":["oscarsaharoy/subtiles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OscarSaharoy/subtiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OscarSaharoy%2Fsubtiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OscarSaharoy%2Fsubtiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OscarSaharoy%2Fsubtiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OscarSaharoy%2Fsubtiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OscarSaharoy","download_url":"https://codeload.github.com/OscarSaharoy/subtiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OscarSaharoy%2Fsubtiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32339289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["geometry","svg","web"],"created_at":"2025-01-19T21:57:09.066Z","updated_at":"2026-04-27T13:33:01.835Z","avatar_url":"https://github.com/OscarSaharoy.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# subtiles\n\nExtensible framework for creating recursive geometry and subdivision tilings. **Pull Requests Welcome!!**\n\n[https://oscarsaharoy.github.io/subtiles](https://oscarsaharoy.github.io/subtiles)\n\n## about\n\n\u003cp\u003e subtiles is a web app that allows you to create subdivision tilings.\n\tIt takes in SVG files with a certain format which defines the subdivision.\n\tYou can supply your own files with the open button \n\tor use one of the presets with the preset button.\n\tThe web app then parses the file and uses the information to calculate the subdivided geometry -\n\tyou can use the plus and minus buttons to increase or decrease the displayed subdivision level.\n\tThere are also different mapping functions which can be selected with the mapping button,\n\tbut these have more effect on some tilings than on others.\n\tDifferent colour palettes can be selected with the palette button and \n\tthe theme can be toggled with the dark / light mode button.\n\tThe thickness button allows you to set the line thickness \n\tand the download button downloads the subdivision tiling as an SVG. \u003c/p\u003e\n\u003cp\u003e Tip: press L to view the program logs! \u003c/p\u003e\n\n\u003cimg src=\"assets/witch-square.jpg\" /\u003e\n\u003cp class=\"caption\"\u003e A graphic created by recursively dividing quadrilaterals into 5 more quadrilaterals. \u003c/p\u003e\n\n## SVG input file format\n\u003cp\u003e Input files can be created with an svg editor like inkscape. \n\tEach path in the file represents a tile and SVG groups are used to define the relationships between them. \u003cbr\u003e\u003cbr\u003e\n\tEach tile type that you want to define a subdivision rule for should be in its own group. The only other thing in the group should be a group of tiles to subdivide it into.\n\tEach iteration, tiles that match the outer tile will be subdivided into those in the inner group. \u003cbr\u003e\u003cbr\u003e\n\tMatching of tiles to subdivision rules is done by matching the number of vertices of a tile to the number of vertices in the outer tile of the subdivision rule.\n\tIf no subdivision rule matches, the tile is not subdivided. \u003c/p\u003e\n\n\u003cpre\u003e\n\u0026lt;g\u0026gt; outer subdivision rule group\n├── \u0026lt;path\u0026gt; parent tile to be subdivided\n└── \u0026lt;g\u0026gt; inner subdivision result group\n    ├── \u0026lt;path\u0026gt; top right child tile\n    ├── \u0026lt;path\u0026gt; top left child tile\n    ├── \u0026lt;path\u0026gt; bottom right child tile\n    ├── \u0026lt;path\u0026gt; bottom left child tile\n    └── \u0026lt;path\u0026gt; center child tile\n\u003c/pre\u003e\n\t\n\u003cp\u003e You can take a look at the \u003ca href=\"presets/square.svg\"\u003esquare\u003c/a\u003e and \u003ca href=\"presets/pentagon.svg\"\u003epentagon\u003c/a\u003e presets for examples.\u003c/p\u003e\n\n\u003cimg src=\"assets/trihex.jpg\" /\u003e\n\u003cp class=\"caption\"\u003e This is another example with two tile types. \u003c/p\u003e\n\n## Running Locally\nThis is a vanilla html/css/js web app so to run it locally you just need to clone the repo and start a webserver from the root directory.\nThe `./runlocal.sh` script can also be used and is just a shortcut for `python3 -m http.server`.\n\n```bash\ngit clone git@github.com:OscarSaharoy/subtiles.git\ncd subtiles\n./runlocal.sh\n```\nYou can then access the web app at [http://localhost:8000](http://localhost:8000).\n\n\u003cimg src=\"assets/pentagonally.jpg\" /\u003e\n\u003cp class=\"caption\"\u003e This tiling uses the \"radial\" palette, applied after a few subdivisions with a different palette. \u003c/p\u003e\n\n\u003cimg src=\"assets/stars-circles.jpg\" /\u003e\n\u003cp class=\"caption\"\u003e This image was made with the conformal mapping function and the square preset. \u003c/p\u003e\n\n## More Info\n\u003cp\u003e If you would like to know more about subdivision tilings please take a look at the \n\t\u003ca href=\"https://en.wikipedia.org/wiki/Finite_subdivision_rule\" target=\"_black\"\u003ewikipedia page\u003c/a\u003e \n\t- the references and external links on this page are also very helpful. \u003c/p\u003e\n\n\u003cimg src=\"assets/black-white.jpg\" /\u003e\n\u003cp class=\"caption\"\u003e Custom colouring functions can be defined in the `js/palette.js` file to get results like this. \u003cbr\u003e\n\tMake sure to add them to the palette menu in `index.html`! \u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscarsaharoy%2Fsubtiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foscarsaharoy%2Fsubtiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscarsaharoy%2Fsubtiles/lists"}