{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"project","url":"https://ejfox.com/projects/flipper-zero-tools","json_url":"https://ejfox.com/projects/flipper-zero-tools.json","generator":"ejfox.com/json-twin@1","data":{"cacheVersion":"2026-05-13-gear-cards","html":"<p class=\"\">Two small apps for the same tiny, useless-but-perfect screen: <a href=\"https://github.com/ejfox/flipper-space-calculators\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://github.com/ejfox/flipper-space-calculators\">flipper-space-calculators<svg class=\"inline-block w-4 h-4 ml-1 opacity-50 dark:opacity-75 group-hover:opacity-100 transition-opacity align-text-bottom\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" class=\"\"></path></svg></a> and <a href=\"https://github.com/ejfox/flipper-generative-art\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"external-link group inline-flex items-center text-blue-600 dark:text-blue-400\" data-preview-url=\"https://github.com/ejfox/flipper-generative-art\">flipper-generative-art<svg class=\"inline-block w-4 h-4 ml-1 opacity-50 dark:opacity-75 group-hover:opacity-100 transition-opacity align-text-bottom\" xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" class=\"\"></path></svg></a>.</p>\n<h2 class=\"\" id=\"space-calculators\">Space Calculators</h2>\n<p class=\"\">A set of minimalist space- and physics calculators for the Flipper Zero — relativistic time dilation, space-travel figuring, and friends, all on the 128×64 screen for back-of-the-napkin astrophysics in your pocket.</p>\n<p class=\"\">I think I like it because it's so useless but still utilitarian — cyberpunk and gestural. It's a tool for a time/space-traveler who doesn't exist — or maybe does — the kind of thing he'd find handy.</p>\n<p class=\"\">It's also an experiment in pushing what small Flipper apps can do, and imagining utilities that would make sense within its capabilities — using the limits as a method of inspiration. This is what came from that.</p>\n<figure role=\"figure\" aria-label=\"The orbital-mechanics constants and transfer math, in C on the Flipper Zero\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-space-calculators/code.png\" alt=\"The orbital-mechanics constants and transfer math, in C on the Flipper Zero\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-space-calculators/code.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-space-calculators/code.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-space-calculators/code.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-space-calculators/code.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"The orbital-mechanics constants and transfer math, in C on the Flipper Zero\" width=\"1400\" height=\"900\" style=\"--splay-rot:-2.06deg;\" data-dimensions=\"1400×900\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">The orbital-mechanics constants and transfer math, in C on the Flipper Zero</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"The transfer solver — delta-v, flight time, and a celestial-body database keyed by semi-major axis\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-space-calculators/code2.png\" alt=\"The transfer solver — delta-v, flight time, and a celestial-body database keyed by semi-major axis\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-space-calculators/code2.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-space-calculators/code2.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-space-calculators/code2.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-space-calculators/code2.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"The transfer solver — delta-v, flight time, and a celestial-body database keyed by semi-major axis\" width=\"1400\" height=\"900\" style=\"--splay-rot:-0.89deg;\" data-dimensions=\"1400×900\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">The transfer solver — delta-v, flight time, and a celestial-body database keyed by semi-major axis</figcaption>\n</figure>\n<h2 class=\"\" id=\"generative-art\">Generative Art</h2>\n<p class=\"\">I often just leave the Flipper on my desk below my monitor, and my feeling was: why not have it show me little evolving art pieces instead of just the time? What would that look and feel like? Is generative art even possible within the constraints of the Flipper's screen and processor? What does 1-bit generative art <em class=\"\">feel</em> like? How can it evolve over the course of a day?</p>\n<p class=\"\">This is the answer: a Flipper Zero app that generates animated patterns in real time on the device's <strong class=\"\">128×64 monochrome screen</strong>. It runs ten gradient families — horizontal, vertical, radial, diagonal, sine waves, interference, checkerboard, noise, spiral — and converts each to crisp 1-bit graphics with <strong class=\"\">Floyd–Steinberg dithering</strong>, evolving the parameters every second at ~30fps.</p>\n<figure role=\"figure\" aria-label=\"More real-time generative patterns\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-5.png\" alt=\"More real-time generative patterns\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-generative-art/gallery-5.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-generative-art/gallery-5.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-5.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-generative-art/gallery-5.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"More real-time generative patterns\" width=\"1024\" height=\"512\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"1024×512\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">More real-time generative patterns</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Dithered radial patterns generated on the Flipper Zero\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-1.png\" alt=\"Dithered radial patterns generated on the Flipper Zero\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-generative-art/gallery-1.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-generative-art/gallery-1.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-1.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-generative-art/gallery-1.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Dithered radial patterns generated on the Flipper Zero\" width=\"1024\" height=\"512\" style=\"--splay-rot:0.61deg;\" data-dimensions=\"1024×512\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Dithered radial patterns generated on the Flipper Zero</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Checkerboard and noise fields\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-2.png\" alt=\"Checkerboard and noise fields\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-generative-art/gallery-2.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-generative-art/gallery-2.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-2.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-generative-art/gallery-2.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Checkerboard and noise fields\" width=\"1024\" height=\"512\" style=\"--splay-rot:1.55deg;\" data-dimensions=\"1024×512\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Checkerboard and noise fields</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Interference and sine-wave fields, 1-bit dithered\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-3.png\" alt=\"Interference and sine-wave fields, 1-bit dithered\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-generative-art/gallery-3.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-generative-art/gallery-3.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-3.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-generative-art/gallery-3.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Interference and sine-wave fields, 1-bit dithered\" width=\"1024\" height=\"512\" style=\"--splay-rot:1.75deg;\" data-dimensions=\"1024×512\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Interference and sine-wave fields, 1-bit dithered</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"Diagonal gradients and spirals\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-4.png\" alt=\"Diagonal gradients and spirals\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/projects/flipper-generative-art/gallery-4.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/projects/flipper-generative-art/gallery-4.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/projects/flipper-generative-art/gallery-4.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/projects/flipper-generative-art/gallery-4.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Diagonal gradients and spirals\" width=\"1024\" height=\"512\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"1024×512\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Diagonal gradients and spirals</figcaption>\n</figure>\n<p class=\"\">Making something genuinely <em class=\"\">generative</em> look good in 1-bit on a tiny embedded display is the whole challenge — the dithering is what turns smooth math gradients into something the Flipper's screen can actually render without looking like mud.</p>","title":"Flipper Zero Tools","metadata":{"title":"Flipper Zero Tools","date":"2025-01-15T05:00:00.000Z","category":"Hardware","featured":true,"url":"https://github.com/ejfox/flipper-space-calculators","tech":["Flipper Zero","C","Embedded","Floyd–Steinberg Dithering"],"state":"deployed","ai-involvement":"ai-assisted","tags":["flipper","hardware","device","science","generative","art"],"words":338,"images":7,"imageDetails":{"total":7,"cloudinary":7,"withDimensions":0},"links":2,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"Space Calculators","slug":"space-calculators","level":"h2","children":[]},{"text":"Generative Art","slug":"generative-art","level":"h2","children":[]}],"type":"post"}},"_links":{"self":"https://ejfox.com/projects/flipper-zero-tools.json","html":"https://ejfox.com/projects/flipper-zero-tools","index":"/projects.json"}}