{"id":16662138,"url":"https://github.com/sternenseemann/buchstabensuppe","last_synced_at":"2025-09-09T14:20:31.641Z","repository":{"id":40576960,"uuid":"320591514","full_name":"sternenseemann/buchstabensuppe","owner":"sternenseemann","description":"toy font rendering for low pixelcount, high contrast displays","archived":false,"fork":false,"pushed_at":"2025-02-11T17:17:05.000Z","size":185,"stargazers_count":9,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-09T19:01:29.500Z","etag":null,"topics":["bitmap","c","flipdot","flipdots","font","font-rendering","text-shaping"],"latest_commit_sha":null,"homepage":"https://sternenseemann.github.io/buchstabensuppe","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sternenseemann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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":"2020-12-11T14:08:45.000Z","updated_at":"2025-02-17T06:48:52.000Z","dependencies_parsed_at":"2025-02-11T18:35:16.666Z","dependency_job_id":null,"html_url":"https://github.com/sternenseemann/buchstabensuppe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sternenseemann/buchstabensuppe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sternenseemann%2Fbuchstabensuppe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sternenseemann%2Fbuchstabensuppe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sternenseemann%2Fbuchstabensuppe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sternenseemann%2Fbuchstabensuppe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sternenseemann","download_url":"https://codeload.github.com/sternenseemann/buchstabensuppe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sternenseemann%2Fbuchstabensuppe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274309459,"owners_count":25261487,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"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":["bitmap","c","flipdot","flipdots","font","font-rendering","text-shaping"],"created_at":"2024-10-12T10:37:05.996Z","updated_at":"2025-09-09T14:20:31.610Z","avatar_url":"https://github.com/sternenseemann.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# buchstabensuppe\n\n```\n █             \n █             \n █             \n █ ███    ████ \n ██   █  █    █\n █    █  █     \n █    █   ██   \n █    █     ██ \n █    █       █\n ██   █  █    █\n █ ███    ████ \n```\n\n\u003e at least better than PIL.ImageFont\n\ntoy font rendering for low pixelcount high contrast displays,\ni. e. [openlab's flipdot display](https://wiki.openlab-augsburg.de/Flipdots).\n\n## features\n\n* supports [text shaping](https://harfbuzz.github.io/what-is-harfbuzz.html#what-is-text-shaping)\n  via harfbuzz\n* per grapheme cluster font fallback\n* grayscale and binary b/w support\n\n## building\n\nrequirements:\n\n* [meson](https://mesonbuild.com)\n* [ninja](https://ninja-build.org/)\n* [utf8proc](https://juliastrings.github.io/utf8proc)\n* [harfbuzz](https://harfbuzz.github.io/)\n* [libschrift](https://github.com/tomolt/libschrift) == 0.10.1\n\n```\n# run inside nix-shell if you have nix!\n\n$ meson build\n\n$ cd build\n\n$ ninja\n```\n\nalternatively you can just run `nix-build`\n\n## demo\n\nif you want to play around with the font rendering in binary\nmode you can use the dry run mode of the `bs-renderflipdot`\n(in `./result/bin` with Nix, `./build` with meson) binary.\n\nRun `bs-renderflipdot -?` for usage instructions and don't forget `-n`\nfor dry running!\n\n```\n$ bs-renderflipdot -f /path/to/unifont.ttf -f /path/to/unifont_upper.ttf -n \"Greetings ❣️\" 2\u003e/dev/null\n                                                                                            \n                                                                                    ███ ███ \n                                                                                   █████████\n                                            █                                      █████████\n  ████                             █        █                                      █████████\n █    █                            █                          █                     ███████ \n █    █  █ ███    ████    ████     █       ██    █ ███    ███ █   ████                ███   \n █       ██   █  █    █  █    █  █████      █    ██   █  █   █   █    █                █    \n █       █    █  █    █  █    █    █        █    █    █  █   █   █                          \n █  ███  █       ██████  ██████    █        █    █    █  █   █    ██                  ███   \n █    █  █       █       █         █        █    █    █   ███       ██               █████  \n █    █  █       █       █         █        █    █    █   █           █              █████  \n █   ██  █       █    █  █    █    █        █    █    █   ████   █    █              █████  \n  ███ █  █        ████    ████      ██    █████  █    █  █    █   ████                ███   \n                                                         █    █                             \n                                                          ████                              \n```\n\n## flipdot interaction\n\n![An example where buchstabensuppe does an admirable job rendering a string onto a simulated flipdot display](doc/flipdot-render.png)\n\nthe picture above shows buchstabensuppe being used to render text\nonto a simulated flipdot display. take notice especially of the following:\n\n* fallback fonts are supported: the emoji is not found in `unifont.ttf`,\n  but rendered from `unifont_upper.ttf`\n* correct text shaping is supported (as far as the font supports it):\n  g̈ which consists of two codepoints is rendered as a combined cluster\n  consisting of two glyphs.\n\n[bs-renderflipdot.c](./bs-renderflipdot.c) is a simple example showing\nhow to interact with a flipdot display. mainly it involves:\n\n* rendering a string to a bitmap using `bs_render_utf8_string`\n* making sure that the dimensions of the display and the image\n  match with `bs_bitmap_extend`\n* processing the resulting bitmap using `bs_bitmap_map`\n* rendering the resulting bitmap on the display using\n  `bs_flipdot_render`.\n* dealing with bitmaps too big for the display using\n  `bs_scroll_next_view` and `bs_page_next_view`.\n\nyou can also play around with its cli: the following command\nrenders “Hello World” black on white using GNU Unifont onto\na flipdot display (or simulator) running on `localhost:2323`.\nSee [bs-renderflipdot(1)](https://sternenseemann.github.io/buchstabensuppe/bs-renderflipdot.1.html)\nfor more usage details.\n\n```\nbs-renderflipdot -f /path/to/unifont.ttf -f /path/to/unifont_upper.ttf -i \"Hello World\"\n```\n\n## caveats\n\n* buchstabensuppe loads all fonts into memory and keeps them there pretty much\n  all the time.\n* there is no support for right to left nor vertical script (but planned)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsternenseemann%2Fbuchstabensuppe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsternenseemann%2Fbuchstabensuppe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsternenseemann%2Fbuchstabensuppe/lists"}