{"id":23286657,"url":"https://github.com/friendlymatthew/norm","last_synced_at":"2025-10-27T20:32:17.310Z","repository":{"id":267368642,"uuid":"900082592","full_name":"friendlymatthew/norm","owner":"friendlymatthew","description":"Image editor from scratch. Includes a TrueType font parser and PNG encoder/decoder.","archived":false,"fork":false,"pushed_at":"2025-10-22T02:25:55.000Z","size":86607,"stargazers_count":7,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-22T04:16:16.091Z","etag":null,"topics":["image","image-processing","truetype-font","wgpu"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/normeditor","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/friendlymatthew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-07T20:15:34.000Z","updated_at":"2025-10-22T02:25:58.000Z","dependencies_parsed_at":"2025-01-15T04:20:00.669Z","dependency_job_id":"f03e37ee-635b-4550-9609-bb1fcea3332b","html_url":"https://github.com/friendlymatthew/norm","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"d46f11064f1a6c546e699f7d7070b1347dfff0fd"},"previous_names":["friendlymatthew/png","friendlymatthew/renda","friendlymatthew/norm","friendlymatthew/iris"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/friendlymatthew/norm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/friendlymatthew%2Fnorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/friendlymatthew%2Fnorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/friendlymatthew%2Fnorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/friendlymatthew%2Fnorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/friendlymatthew","download_url":"https://codeload.github.com/friendlymatthew/norm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/friendlymatthew%2Fnorm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280833007,"owners_count":26398970,"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-10-24T02:00:06.418Z","response_time":73,"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":["image","image-processing","truetype-font","wgpu"],"created_at":"2024-12-20T02:14:00.055Z","updated_at":"2025-10-27T20:32:17.297Z","avatar_url":"https://github.com/friendlymatthew.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# norm\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"obama-luma-gaussian-blur.png\" width=\"250\"/\u003e\n    \u003cimg src=\"obama-normal.png\" width=\"250\"/\u003e\n    \u003cimg src=\"obama-line-detection.png\" width=\"250\"/\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\nA PNG editor from scratch (well, as close to scratch as possible).\n\nAs a decoder, this project uses the [PNG test suite](http://www.schaik.com/pngsuite/) to validate its ability to handle\nvarious PNG features and edge cases. Currently, norm can decode and render images with an 8-bit color depth.\n\nThe renderer supports various image processing features on the GPU.\n\n## Usage\n\nRun `cargo run --release \u003cimage_path\u003e`. For example:\n\n```bash\ncargo r --release ./tests/obama.png\n```\n\n### Additional Scripts\n\n```bash\n# Run the renderer with an experimental camera\ncargo r --features camera -- ./tests/obama.png\n\n# Profile the decoder\ncargo b --release \u0026\u0026 samply record ./target/release/norm_decode_png ./tests/reagan.png\n\n# Run ad-hoc benchmarks\ncargo r --release --bin norm_decode_png --features time ./tests/Periodic_table_large.png\n\n# Parse and render glyphs from the lato font file\n# See the generated `glyph_playground` directory.\ncargo r --bin norm_lato_glyphs hfkdp!\n\n# Run the PNG test suite\ncargo r --bin norm_png_test_suite\n\n# Fuzz the decoder\n./fuzz.sh\n```\n\n## Reading\n\n### PNG Specification\n\nhttps://www.w3.org/TR/2003/REC-PNG-20031110/\u003cbr\u003e\nhttp://www.libpng.org/pub/png/pngintro.html\u003cbr\u003e\nhttps://www.w3.org/Graphics/PNG/platform.html\u003cbr\u003e\nhttps://optipng.sourceforge.net/pngtech/optipng.html\u003cbr\u003e\nhttps://optipng.sourceforge.net/pngtech/better-filtering.html\u003cbr\u003e\nhttp://www.libpng.org/pub/png/pngpic2.html\u003cbr\u003e\nhttps://www.lucaversari.it/FJXL_and_FPNGE.pdf\u003cbr\u003e\n\n### GPU Programming\n\nhttps://sotrh.github.io/learn-wgpu/beginner/tutorial5-textures/\u003cbr\u003e\nhttps://raphlinus.github.io/gpu/2020/02/12/gpu-resources.html\u003cbr\u003e\n\n### Image Processing\n\nhttps://www.youtube.com/watch?v=KuXjwB4LzSA\u003cbr\u003e\nhttps://www.shadertoy.com/view/4tSyzy\u003cbr\u003e\nhttps://www.shadertoy.com/view/wsK3Wt\u003cbr\u003e\n\nhttps://www.cns.nyu.edu/pub/lcv/wang03-preprint.pdf\u003cbr\u003e\nhttps://www.cns.nyu.edu/pub/eero/wang03b.pdf\u003cbr\u003e\nhttps://ece.uwaterloo.ca/~z70wang/research/ssim/\u003cbr\u003e\nhttp://arxiv.org/pdf/2006.13846\u003cbr\u003e\n\n### TrueType Font Rendering\n\nhttps://faultlore.com/blah/text-hates-you/\u003cbr\u003e\nhttps://developer.apple.com/fonts/TrueType-Reference-Manual/\u003cbr\u003e\nhttps://www.youtube.com/watch?v=SO83KQuuZvg\u003cbr\u003e\nhttps://www.microsoft.com/en-us/research/wp-content/uploads/2005/01/p1000-loop.pdf\u003cbr\u003e\nhttps://medium.com/@evanwallace/easy-scalable-text-rendering-on-the-gpu-c3f4d782c5ac\u003cbr\u003e\n\n### Miscellaneous\n\nhttps://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendlymatthew%2Fnorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffriendlymatthew%2Fnorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffriendlymatthew%2Fnorm/lists"}