feat: migrate images to assets repo, add MakerWorld extract/publish tooling#337
Merged
kellervater merged 7 commits intomainfrom Apr 13, 2026
Merged
Conversation
Replace hardcoded file list with GitHub API discovery for .github/instructions/*.instructions.md. New instruction files are now synced automatically without script changes.
- URL-encode ref parameter with --data-urlencode - Filter in jq with type guard instead of grep - Add empty-line guard in while loop - Use GITHUB_TOKEN for auth when available - Document jq and GITHUB_TOKEN requirements in README
…ooling - Move all manually-created images to kellerlabs/assets repo - Restructure auto-gen PNGs into renders/ subfolders - Add md-to-mw.py script and makerworld-description skill - Extract Core model DESCRIPTION.md as first implementation - Add ADR-001, MakerWorld workflow guide, assets repo policy - Update all README image refs to absolute assets URLs - Block image extensions in gitignore, whitelist renders/
Contributor
There was a problem hiding this comment.
Pull request overview
Restructures image handling to reduce git history bloat by moving manually-created images to a dedicated kellerlabs/assets repo, while keeping auto-generated preview renders tracked locally under renders/. Also adds tooling + docs to manage MakerWorld descriptions as git-tracked DESCRIPTION.md and convert them into CKEditor-friendly HTML for publishing.
Changes:
- Migrated README/doc image references to
raw.githubusercontent.com/kellerlabs/assets/...and introduced a repo-wide image ignore/whitelist strategy (**/renders/*.png+favicon.ico). - Updated
export-png.shand model READMEs to userenders/<name>.pngpaths for preview images. - Added
cmd/export/md-to-mw.py, MakerWorld workflow docs, a Copilot skill doc, and an initialmodels/core/makerworld/DESCRIPTION.md.
Reviewed changes
Copilot reviewed 25 out of 65 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| requirements.txt | Adds markdown dependency for the new MakerWorld conversion script. |
| README.md | Updates image references to the assets repo. |
| .gitignore | Ignores all image extensions by default; whitelists **/renders/*.png and favicon.ico; ignores generated DESCRIPTION.html. |
| .pre-commit-config.yaml | Updates kellerlabs hooks rev; adds optimize-images; keeps flatten validation. |
| cmd/export/export-png.sh | Writes PNG output into a renders/ subfolder next to the input .scad. |
| cmd/export/README.md | Updates documentation to reflect renders/ output path. |
| cmd/export/md-to-mw.py | New script to convert DESCRIPTION.md → pasteable MakerWorld HTML (embed local images, YouTube embed conversion). |
| docs/makerworld-workflow.md | Documents extract/edit/publish workflow for MakerWorld descriptions. |
| docs/decisions/ADR-001-image-hosting-assets-repo.md | ADR formalizing image hosting move to kellerlabs/assets + gitignore policy. |
| .github/skills/makerworld-description/SKILL.md | New Copilot skill documentation for extracting/publishing MakerWorld descriptions. |
| .github/instructions/openscad.instructions.md | Updates preview PNG guidance to use renders/ subfolders. |
| .github/copilot-instructions.md | Adds assets policy + ADR policy guidance. |
| .github/agents/model-polish.agent.md | Updates model-polish agent instructions to reference parts/renders/. |
| .github/actions/sync-instructions/sync-instructions.sh | Dynamically discovers .instructions.md files via GitHub API before syncing. |
| .github/actions/sync-instructions/README.md | Documents dynamic discovery + optional GITHUB_TOKEN usage. |
| models/README.md | Updates model index preview paths to parts/renders/*.png; documents parts/renders/ convention. |
| models/core/README.md | Updates preview paths to parts/renders/*.png. |
| models/core/makerworld/DESCRIPTION.md | Adds initial git-tracked MakerWorld description source for Core. |
| models/flexmount/README.md | Updates preview path to renders/flexmount.png. |
| models/wallmount/README.md | Updates preview path to parts/renders/wallmount.png. |
| models/sleeve/README.md | Updates preview path to parts/renders/sleeve.png. |
| models/rackmount_ears/README.md | Updates preview paths to parts/renders/*.png. |
| models/racklink/README.md | Updates preview path to parts/renders/racklink.png. |
| models/pinpusher/README.md | Updates preview path to parts/renders/pinpusher.png. |
| models/inception/README.md | Updates preview paths to parts/renders/supportbin.png / supportgrid.png. |
| models/gridfinity/README.md | Updates preview paths to parts/renders/baseplate.png / binbase.png. |
| models/foot/README.md | Updates preview path to parts/renders/foot.png. |
| models/sleeve/parts/renders/sleeve.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/racklink/parts/renders/racklink.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/pinpusher/parts/renders/pinpusher.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/inception/parts/renders/supportgrid.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/gridfinity/parts/renders/binbase.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/foot/parts/renders/foot.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/core/parts/renders/support.png | Adds/relocates generated preview render under whitelisted renders/. |
| models/core/parts/renders/lockpin.png | Adds/relocates generated preview render under whitelisted renders/. |
- Use re.match with DOTALL for robust frontmatter stripping - Add path traversal guard in embed_local_images - Add Why section to makerworld-workflow.md - Fix ADR-001 date typo (2025 -> 2026)
- Switch DESCRIPTION.md images to <img> tags with width attribute - Use inline HTML blocks for centered headings/paragraphs - Omit height so images scale proportionally - Update SKILL.md extraction instructions accordingly - Update makerworld-workflow.md formatting section
- remove duplicate padding-bottom in convert_youtube_embeds() - revert h[1-6] in closing-tag regex (causes double spacing in CKEditor) - add pip install -r requirements.txt to makerworld-workflow.md - update kellervater→kellerlabs links in DESCRIPTION.md - center community section elements, convert meme to img tag - auto-append generated-by footer linking to workflow docs - document alignment as known limitation in extraction skill
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📦 What
kellerlabs/assetsreporenders/subfoldersmd-to-mw.py,SKILL.md)DESCRIPTION.mdwith WYSIWYG HTML formatting💡 Why
🔧 How
Images: All refs now use
https://raw.githubusercontent.com/kellerlabs/assets/main/homeracker/...absolute URLs. Auto-gen render PNGs stay in source repos underrenders/dirs.MakerWorld workflow:
#makerworld-descriptionCopilot skill scrapes a MakerWorld page →DESCRIPTION.md+ images to assets repopython cmd/export/md-to-mw.py models/<name>/makerworld/DESCRIPTION.md→ HTML → paste into MakerWorldDESCRIPTION.md format:
<img>tags withwidth(noheight) for proper scaling<h2 style="text-align: center">/<p style="text-align: center">for centered elementsmd-to-mw.pySecurity fixes (from review):
strip_frontmatter(): robust regex instead of naivetext.find("---", 3)embed_local_images(): path traversal guard viais_relative_to()kellerlabs/assetsfor images. Maintainers push toassets/main; outside collaborators open PRs.