{"id":13803597,"url":"https://github.com/tfuxu/Halftone","last_synced_at":"2025-05-13T16:32:09.883Z","repository":{"id":166179473,"uuid":"634291015","full_name":"tfuxu/Halftone","owner":"tfuxu","description":"Give your images that pixel art-like style","archived":false,"fork":false,"pushed_at":"2025-05-07T18:47:22.000Z","size":4262,"stargazers_count":118,"open_issues_count":18,"forks_count":14,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-07T19:43:16.570Z","etag":null,"topics":["dithering","graphics","gtk","gtk4","libadwaita","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tfuxu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2023-04-29T16:49:25.000Z","updated_at":"2025-05-07T18:47:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"9f5b3ab9-33ef-41a4-a832-5823681b9332","html_url":"https://github.com/tfuxu/Halftone","commit_stats":{"total_commits":173,"total_committers":18,"mean_commits":9.61111111111111,"dds":0.2890173410404624,"last_synced_commit":"e12010bf6fe2d4c257f8c809e785d3d10f37537a"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfuxu%2FHalftone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfuxu%2FHalftone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfuxu%2FHalftone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfuxu%2FHalftone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tfuxu","download_url":"https://codeload.github.com/tfuxu/Halftone/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253981877,"owners_count":21994351,"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","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":["dithering","graphics","gtk","gtk4","libadwaita","python"],"created_at":"2024-08-04T01:00:35.989Z","updated_at":"2025-05-13T16:32:04.873Z","avatar_url":"https://github.com/tfuxu.png","language":"Python","readme":"\u003cimg src=\"data/icons/hicolor/scalable/apps/io.github.tfuxu.Halftone.svg\" align=\"left\" height=\"150px\" vspace=\"10px\"\u003e\n\nHalftone\n========\n\nGive your images a pixel art-like style and reduce the file size in the process with Halftone.\n\n\u003cbr\u003e\n\n![halftone-1](data/screenshots/halftone-1.png)\n\n## What is Halftone?\nHalftone is a simple Libadwaita app for lossy image compression using quantization and dithering techniques.\n\n## Why would I use it?\nBecause it's fun! And it can also significantly reduce image size.\n\n\u003cdetails\u003e\n\u003csummary\u003eWhat is that dithering?\u003c/summary\u003e\nDithering is a technique used by old systems with a limited color range to more accurately display graphics containing higher amount of colors than what the device can handle. It was commonly used in early Macintosh computers, Nintendo Game Boy and many other systems from the 80s and 90s.\n\n##### Wanna learn more about how dithering works? \nCheck out [this\u003csup\u003e↗\u003c/sup\u003e](https://surma.dev/things/ditherpunk/) article which nicely explains how dithering argorithms works (warning, math!) and shows most popular dithering algorithms in action.\n\u003c/details\u003e\n\n## Features:\n- **Three different dither algorithms:**\n  You can choose between the classic Floyd-Steinberg algorithm, interesting Riemersma and Bayer (_a.k.a_ ordered) dither known from the Game Boys.\n- **Live preview:**\n  Check out how your image will look like in real time with live preview feature.\n- **Convert to many formats:**\n  In addition to dithering, you can convert your images to different formats to save up some space on disk.\n- **It's just that simple.**\n  Everything is as simple as possible, so that you could start dithering your images as soon as you're done installing the app.\n\n## How to install Halftone\nYou can install Halftone in many ways, here are some listed:\n\n**1. Official Flatpak package:**\n\n\u003ca href='https://flathub.org/apps/io.github.tfuxu.Halftone'\u003e\n  \u003cimg width='192' alt='Download on Flathub' src='https://flathub.org/api/badge?svg\u0026locale=en'/\u003e\n\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\n\n**2. Snap package / Alternative package distributions:**\n\n\u003e [!WARNING]\n\u003e Although some of the methods listed here may be maintained by the Halftone maintainers, these methods **are not** officially supported and issues related to packaging in them should be reported outside this project's bug tracker.\n\nDownload from Snapcraft:\n\u003cbr\u003e\u003cbr\u003e\u003ca href='https://snapcraft.io/halftone'\u003e\n  \u003cimg width='192' alt='Get it from the Snap Store' src='https://snapcraft.io/static/images/badges/en/snap-store-black.svg'/\u003e\n\u003c/a\u003e\u003cbr\u003e\n\nOr get in from your distribution's package manager:\n\u003cbr\u003e\u003cbr\u003e\u003ca href=\"https://repology.org/project/halftone/versions\"\u003e\n  \u003cimg src=\"https://repology.org/badge/vertical-allrepos/halftone.svg\" alt=\"Packaging status\"\u003e\n\u003c/a\u003e\n\n**3. Install from source:**\n\nIf you don't find any other options appealing to you, then you can always compile code on your machine from source and install it that way. For more information, check out [How to build?](#how-to-build) section.\n\n## How can I contribute?\nThanks for asking! Just for you, I've created this list of things you need to do if you want to contribute to Halftone:\n1. Read [Code of Conduct](CODE_OF_CONDUCT.md)\n2. Fork this repository: https://github.com/tfuxu/Halftone/fork\n3. Clone your fork: `git clone https://github.com/👁️you👁️/Halftone.git`\n4. Create a local branch with your changes: `git checkout -b new-thingies`\n5. When changing stuff in Python, try to follow [PEP8](https://pep8.org/)\n6. Commit your changes: `git commit`\n7. Push the changes to fork: `git push origin new-thingies`\n8. Create a new pull request\n\n## How to build?\n\n### GNOME Builder:\nThis is the easiest way of building Halftone if you want to build it as a Flatpak package. Highly recommended, but probably not for everyone, as GNOME Builder and Flatpak can be quite resource hungry.\n\n1. Download [GNOME Builder](https://flathub.org/apps/details/org.gnome.Builder).\n2. In Builder, click the _Clone Repository_ button at the bottom, using `https://github.com/tfuxu/Halftone.git` as the URL.\n3. Click the _Build_ button at the top once the project is loaded.\n\n### Flatpak Builder:\nThis is a little bit more advanced way of building Flatpak packages, but if you don't want or can't have GNOME Builder, then this method would be your best bet.\n\n#### Prerequisites:\n\n- Flatpak Builder `flatpak-builder`\n- GNOME SDK runtime `org.gnome.Sdk//47`\n- GNOME Platform runtime `org.gnome.Platform//47`\n\nInstall required runtimes:\n```shell\nflatpak install org.gnome.Sdk//47 org.gnome.Platform//47\n```\n\n#### Building Instructions:\n\n##### User installation\n```shell\ngit clone https://github.com/tfuxu/Halftone.git\ncd Halftone\nflatpak-builder --install --user --force-clean repo/ build-aux/flatpak/io.github.tfuxu.Halftone.json\n```\n\n##### System installation\n```shell\ngit clone https://github.com/tfuxu/Halftone.git\ncd Halftone\nflatpak-builder --install --system --force-clean repo/ build-aux/flatpak/io.github.tfuxu.Halftone.json\n```\n\n### Meson Build System:\nIf you don't want to install Halftone as a Flatpak package, you can build it using Meson build system. Meson is used in majority of GTK apps and enforced on GNOME core apps, so learning how to use it would be pretty handy if you plan to contribute to other GTK projects.\n\n#### Prerequisites:\n\nThe following packages are required to build Halftone:\n\n- Python 3 `python`\n- PyGObject `python-gobject`\n- Blueprint [`blueprint-compiler`](https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/setup.html)\n- GTK 4 `gtk4`\n- Libadwaita (\u003e= 1.5.0) `libadwaita`\n- Imagemagick `imagemagick`\n- Meson `meson`\n- Ninja `ninja-build`\n\nRequired Python libraries:\n\n```shell\npip install -r requirements-dev.txt\n```\n\n#### Building Instructions:\n\n##### Global installation\n\n```shell\ngit clone https://github.com/tfuxu/Halftone.git\ncd Halftone\nmeson setup builddir\nmeson configure builddir -Dprefix=/usr/local\nsudo ninja -C builddir install\n```\n\n##### Local build (for testing and development purposes)\n\n```shell\ngit clone https://github.com/tfuxu/Halftone.git\ncd Halftone\nmeson setup builddir\nmeson configure builddir -Dprefix=\"$(pwd)/builddir\"\nninja -C builddir install\nninja -C builddir run\n```\n\n\u003e [!NOTE]\n\u003e During testing and development, as a convenience, you can use the `local.sh` script to quickly rebuild local builds.\n\n## License\n\u003cp\u003e\n\u003cimg src=\"https://www.gnu.org/graphics/gplv3-with-text-136x68.png\" alt=\"GPLv3 logo\" align=\"right\"\u003e\nThis repository is licensed under the terms of the GNU GPLv3 license. You can find a copy of the license in the COPYING file.\n\u003c/p\u003e\n\n## Inspirations:\nThis project was started after I found out about [Pixfect](https://codeberg.org/daudix-UFO/Pixfect), a little Bash script that does exactly what Halftone does.\n\nThe original user interface design is based on [Converter](https://gitlab.com/adhami3310/Converter) style, with itself is based on [Upscaler](https://gitlab.gnome.org/World/Upscaler) design.\n\nThis README (mostly [How to Build?](#how-to-build) section) is based on [Gradience](https://github.com/GradienceTeam/Gradience) README.\n","funding_links":[],"categories":["Graphics"],"sub_categories":["ASCII/Pixel Art"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfuxu%2FHalftone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftfuxu%2FHalftone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfuxu%2FHalftone/lists"}