norns.community is a collection of open source software for the monome norns sound computer.
this document serves as both the README.md for this repository and the 'about' page for this website.
first, take a fork of the community catalog, update community.json with your script's details, and make a pull request. after your pull request is accepted and merged it will automatically appear on norns.community. the website refreshes nightly at 00:00 UTC, on every merge to its main branch, or on demand by admins. this GitHub action has all the details.
for script authors, this means:
these conventions were designed to "just work" with how most scripts are structured today.
READMEs are individually cached from each script's repository in the below cascading sequence. simply add a README to your project at either of the following locations:
1. ./doc/index.md
2. ./README.md
to ensure maximum resilience, please use absolute URLs in your docs.
cover images (aka screenshots) are individually cached from each script's repository in the below cascading sequence. simply add a cover to your project at any of the following locations:
1. ./doc/cover.png
2. ./doc/<your_script_name>.png
3. ./doc/screenshot.png
4. ./cover.png
5. ./<your_script_name>.png
6. ./screenshot.png
if a cover image is not found in any of the above locations, we then try the local archive before finally using a default image:
7. ./archive/screenshots/<your_script_name>.png
8. dust.png
the local archive cache is from norns.community v1.0. it was archived in February, 2023.
dronecaster is one of many possible examples of what a compatible script structure might look like:
./doc/dronecaster.png (this cover will be used)
./engine
./lib
./.gitignore
./LICENSE
./README.md (this README will be used)
./dronecaster.lua
please open an issue on GitHub.
this site is built with Zensical, a static site generator. the project is organized into three directories:
src/ — hand-maintained source files: static assets (CSS, JS, images, icons, favicons), MiniJinja templates, and TypeScript source. this is what you edit.dist/ — assembled content directory for Zensical. the build script copies src/ assets here, then generates markdown pages (project pages, tag pages, explore, index, etc.) from community.json. this directory is ephemeral and not committed.site/ — final HTML output. Zensical compiles everything in dist/ into static HTML here. this is what gets deployed to GitHub Pages.the build pipeline:
01-curl.sh — fetches community.json from the community catalog02-build.py — copies src/ to dist/, fetches cover images and READMEs from GitHub, generates markdown pages in dist/03-zensical.sh — runs zensical build to compile dist/ into site/additionally, these raw resources are available:
dronecaster as example)if you want to help maintain this website, you can run it locally and test your changes before submitting a pull request.
python3 -m venv .venv && source .venv/bin/activatepip install zensical aiohttp aiofiles./01-curl.sh && ./02-build.py./03-zensical.shzensical servetip: see package.json for shortcuts. npm run ncb runs nuke + curl + build. npm run dev starts the dev server.
there is a single TypeScript file (src/javascript/script.ts) that is used to enable filtering on the "explore" page. it compiles to src/javascript/script.js in the same directory.
install TypeScript and watch the file with:
npm inpm run tscthe build process assumes the transpiled JavaScript is already in src/javascript/ (it gets copied to dist/ during the build). perform all the npm actions locally.
the architecture and technology of this site was inspired by permacomputing concepts.