{"id":19071082,"url":"https://github.com/mokiat/goexr","last_synced_at":"2025-09-13T07:41:43.379Z","repository":{"id":37989983,"uuid":"502600071","full_name":"mokiat/goexr","owner":"mokiat","description":"Go library for parsing OpenEXR files","archived":false,"fork":false,"pushed_at":"2022-06-12T20:40:16.000Z","size":10,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-22T03:44:48.368Z","etag":null,"topics":["decoder","exr","go","golang","openexr","parser"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/mokiat/goexr/exr","language":"Go","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/mokiat.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}},"created_at":"2022-06-12T11:45:18.000Z","updated_at":"2024-01-19T10:02:16.000Z","dependencies_parsed_at":"2022-09-26T21:20:34.855Z","dependency_job_id":null,"html_url":"https://github.com/mokiat/goexr","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mokiat/goexr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mokiat%2Fgoexr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mokiat%2Fgoexr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mokiat%2Fgoexr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mokiat%2Fgoexr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mokiat","download_url":"https://codeload.github.com/mokiat/goexr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mokiat%2Fgoexr/sbom","scorecard":{"id":657473,"data":{"date":"2025-08-11","repo":{"name":"github.com/mokiat/goexr","commit":"bb0394c96bec217ff66deeeabf4d1b930381dd1e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/2 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T15:05:22.012Z","repository_id":37989983,"created_at":"2025-08-21T15:05:22.012Z","updated_at":"2025-08-21T15:05:22.012Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274935946,"owners_count":25376832,"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-13T02:00:10.085Z","response_time":70,"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":["decoder","exr","go","golang","openexr","parser"],"created_at":"2024-11-09T01:22:17.931Z","updated_at":"2025-09-13T07:41:43.356Z","avatar_url":"https://github.com/mokiat.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# goexr\n\nGo library for parsing OpenEXR files.\n\nNot all EXR files are supported at the moment. Make sure to check the\n[Limitations](#limitations) section.\n\n## Usage\n\nAdd the library as a dependency to your project.\n\n```sh\ngo get github.com/mokiat/goexr/exr@latest\n```\n\nParse the image as with any other format. For example:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"image\"\n\t\"os\"\n\n\t_ \"github.com/mokiat/goexr/exr\"\n)\n\nfunc main() {\n\tfile, err := os.Open(\"example.exr\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer file.Close()\n\n\timg, format, err := image.Decode(file)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Printf(\"Bounds [%s]: %v\\n\", format, img.Bounds())\n}\n```\n\nMake sure that you have added an anonymous import to the library which ensures\nthat there is a decoder registered with the `image` package.\n\n```go\nimport (\n  _ \"github.com/mokiat/goexr/exr\"\n)\n```\n\nFor more information check the Go documentation of the `exr` package.\n\n## Limitations\n\nThe library supports a subset of EXR files.\n\nSupported EXR versions:\n\n- `2`\n\nSupported image types:\n\n- `single part scanline`\n\nSupported compression modes:\n\n- `NO_COMPRESSION`\n- `ZIP_COMPRESSION`\n\nSupported channels:\n\n- `R`\n- `G`\n- `B`\n- `A`\n\nSupported channel formats:\n\n- `HALF`\n- `FLOAT`\n\nAt the time of writing, EXR images produced by the following programs appear\nto be supported:\n\n- [Krita](https://krita.org/)\n- [GIMP](https://www.gimp.org/)\n\n## Tools\n\nAside from the `exr` package, this library provides two tools that can be used\nto check whether this project works on specific EXR files.\n\n### exrsize\n\nThis tool prints the pixel size of an EXR image.\n\n```sh\nexrsize \u003cimg.exr\u003e\n```\n\nIt can be install as follows:\n\n```sh\ngo install github.com/mokiat/goexr/cmd/exrsize@latest\n```\n\nIt should work with all version 2 EXR images, even those that cannot be\ndecoded by the `exr` package.\n\n### exrtopng\n\nThis tool converts an `exr` image into a `png` one by using basic tone mapping\nand gamma correction to convert linear colors into sRGB space.\n\n```sh\nexrtopng \u003csrc.exr\u003e \u003cdst.png\u003e\n```\n\nIt can be install as follows:\n\n```sh\ngo install github.com/mokiat/goexr/cmd/exrtopng@latest\n```\n\nThis tool is subject to the above [Limitations](#limitations).\n\n## Resources\n\nFor the development of this decoded the following resources were useful:\n\n- [Online Documentation](https://openexr.readthedocs.io/en/latest/TechnicalIntroduction.html)\n\n\t\tVery easy to navigate and contains information on the core concepts.\n\n- [PDF Documentation](https://www.openexr.com/documentation/openexrfilelayout.pdf)\n\n\t\tThe Online Documentation appeared to have errors in some places and the PDF variant was useful in such cases.\n\n- [Source Code](https://github.com/AcademySoftwareFoundation/openexr/tree/main/src/lib/OpenEXR)\n\n\t\tSome aspects of OpenEXR are not fully documented and in such cases the only place where answers can be found is the reference implementation. In fact, even the documentation refers to it at times.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmokiat%2Fgoexr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmokiat%2Fgoexr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmokiat%2Fgoexr/lists"}