{"id":16551581,"url":"https://github.com/birneamstiel/linkage-fab","last_synced_at":"2026-04-16T09:36:45.564Z","repository":{"id":133629131,"uuid":"601101163","full_name":"birneamstiel/linkage-fab","owner":"birneamstiel","description":"Create ready to cut linkages from constrain based representations.","archived":false,"fork":false,"pushed_at":"2023-02-13T16:08:42.000Z","size":11215,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-04T16:46:58.821Z","etag":null,"topics":["lasercut","linkages","shapely","solvespace"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/birneamstiel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-02-13T11:21:31.000Z","updated_at":"2023-02-21T09:57:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"d95ed8c8-bc6b-4ae8-8408-14fa98c7d76a","html_url":"https://github.com/birneamstiel/linkage-fab","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/birneamstiel/linkage-fab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/birneamstiel%2Flinkage-fab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/birneamstiel%2Flinkage-fab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/birneamstiel%2Flinkage-fab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/birneamstiel%2Flinkage-fab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/birneamstiel","download_url":"https://codeload.github.com/birneamstiel/linkage-fab/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/birneamstiel%2Flinkage-fab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31880573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"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":["lasercut","linkages","shapely","solvespace"],"created_at":"2024-10-11T19:37:51.661Z","updated_at":"2026-04-16T09:36:45.530Z","avatar_url":"https://github.com/birneamstiel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LinkageFab: Linkage Converter For Fabrication\nThis tool allows the creation of ready-to-cut linkages from a given linkage configuration. It parses a given linkage, creates a immediate graph representation and generates an output file which can be used for fabricating the linkage.\n\n![conversion and export process schematic](https://github.com/birneamstiel/linkage-converter-for-fabrication/raw/master/linkage-export-schematic.excalidraw.png)\n\n### Input\nThe main objective when creating this tool was to have a way of fabricating linkage systems designed within [solvespace](solvespace.com). The linkage can be provided as solvespace document (.slvs file) where all line segments will be treated as rigid links and joints will be created from spatial proximity.\n\n### Output\nCurrently the only supported output format is a svg cutting plan for creating an easy to produce prototype from e.g. wood (using a laser cutter) or cardboard (using a cutting plotter). See Fabrication section for detailed guidance on how to cut and assemble.\n\n## How to use\n#### Install dependencies\nInstall all dependencies necessary to run this tool by calling: ```\n```\npip install -r requirements.txt\n```\n(requires python3)\n\n#### Run\n* create svg file for fabrication with:\n```\npython3 src/linkage_fab.py sample/saxena.slvs --output linkages.svg\n```\n* this creates two files:\n  * `linkages.svg` --\u003e can be sent to laser cutter directly for fabrication, (geometry `red` should be cut, labels in `blue` engraved )\n  * `linkages_assembly_manual.svg` --\u003e a rendering of the assembled linkage showing the position for each hub\n\n#### Fabricate\n* The exported svg can be cut using a laser cutter or cutting plotter.\n* Different materials can be used, e.g. cardboard or wood. Make sure the picked material is stiff enough for the linkages to stay rigid.\n* The blue letters contained within the cutting layout should be engraved or drawn onto the fabricated linkages to simplify assembly.\n\n![cutting linkages with a cutting plotter](https://github.com/birneamstiel/linkage-converter-for-fabrication/raw/master/fabrication.gif)\n\n#### Assemble\n* Depending on the  material used, pick a suitable method for connecting the linkages.\n* You need to connect the linkages tightly but leave enough freedom to rotate around an axes.\n* Suitable conenction systems could be bolts or rivets (for paper/fabric).\n* The created assembly manual will help identifying matching linkages.\n![connect cardboard linkages via rivets](https://github.com/birneamstiel/linkage-converter-for-fabrication/raw/master/assemble.jpg)\n\n\n## Example Linkages\n* Parallelogram: a simple linkage system forming a  parallelogram \n* Saxena: a sophisticated linkage system as described in [Kempe’s Linkages and the Universality Theorem (by Anupam Saxena)](https://www.ias.ac.in/article/fulltext/reso/016/03/0220-0237)\n* Mulitplicator Gadget: a linkage modeling [Kempes multiplicator gadget](https://en.wikipedia.org/wiki/Kempe%27s_universality_theorem)\n* [Peaucellier Lipkin linkage](https://en.wikipedia.org/wiki/Peaucellier–Lipkin_linkage)\n![a fabricated Peaucellier Lipkin linkage (made from cardboard)](https://github.com/birneamstiel/linkage-converter-for-fabrication/raw/master/peaucellier_lipkin.jpg)\n\n\n## Future Work\n* implement angle constraints\n* find a way for modeling fixed hubs/joints\n* svg postprocessing (e.g. remove duplicate paths for hubs)\n* extend assembly manual by assembly order\n* come up with temporary assembly aid (for holding linkages in place before connecting finally)\n* take material thickness into account (important for thicker materials, like wood)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbirneamstiel%2Flinkage-fab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbirneamstiel%2Flinkage-fab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbirneamstiel%2Flinkage-fab/lists"}