{"id":13400174,"url":"https://github.com/deckerst/aves","last_synced_at":"2026-04-07T00:01:58.070Z","repository":{"id":37046528,"uuid":"200468551","full_name":"deckerst/aves","owner":"deckerst","description":"Aves is a gallery and metadata explorer app, built for Android with Flutter.","archived":false,"fork":false,"pushed_at":"2026-04-06T21:56:44.000Z","size":379993,"stargazers_count":4601,"open_issues_count":170,"forks_count":175,"subscribers_count":33,"default_branch":"develop","last_synced_at":"2026-04-06T23:22:57.517Z","etag":null,"topics":["android","exif","flutter","gallery","gdepth","geotiff","gpx","heic","heif","metadata","metadata-explorer","motion-photos","mpf","multipage","svg","tiff","topojson","xmp"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/deckerst.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"deckerst","liberapay":"deckerst","custom":"https://www.paypal.com/donate/?hosted_button_id=RWKQ4J7D8USX6"}},"created_at":"2019-08-04T08:30:52.000Z","updated_at":"2026-04-06T22:25:34.000Z","dependencies_parsed_at":"2023-10-24T16:32:47.797Z","dependency_job_id":"0cf13ca6-bfba-4c03-a22b-9443fe01969d","html_url":"https://github.com/deckerst/aves","commit_stats":null,"previous_names":[],"tags_count":166,"template":false,"template_full_name":null,"purl":"pkg:github/deckerst/aves","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerst%2Faves","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerst%2Faves/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerst%2Faves/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerst%2Faves/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deckerst","download_url":"https://codeload.github.com/deckerst/aves/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerst%2Faves/sbom","scorecard":{"id":886082,"data":{"date":"2025-08-23T22:08:34Z","repo":{"name":"github.com/deckerst/aves","commit":"279bf44c6249de3fdd461ff1643048a27392c5f3"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":6.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 17 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Code-Review","score":0,"reason":"Found 1/19 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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/quality-check.yml:48","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:13","Info: topLevel permissions set to 'read-all': .github/workflows/quality-check.yml:13","Info: topLevel permissions set to 'read-all': .github/workflows/release.yml:9","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info:  16 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   9 out of   9 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.13.6 not signed: https://api.github.com/repos/deckerst/aves/releases/235774304","Warn: release artifact v1.13.5 not signed: https://api.github.com/repos/deckerst/aves/releases/234704359","Warn: release artifact v1.13.4 not signed: https://api.github.com/repos/deckerst/aves/releases/231270955","Warn: release artifact v1.13.3 not signed: https://api.github.com/repos/deckerst/aves/releases/227840203","Warn: release artifact v1.13.2 not signed: https://api.github.com/repos/deckerst/aves/releases/222554877","Warn: release artifact v1.13.6 does not have provenance: https://api.github.com/repos/deckerst/aves/releases/235774304","Warn: release artifact v1.13.5 does not have provenance: https://api.github.com/repos/deckerst/aves/releases/234704359","Warn: release artifact v1.13.4 does not have provenance: https://api.github.com/repos/deckerst/aves/releases/231270955","Warn: release artifact v1.13.3 does not have provenance: https://api.github.com/repos/deckerst/aves/releases/227840203","Warn: release artifact v1.13.2 does not have provenance: https://api.github.com/repos/deckerst/aves/releases/222554877"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":9,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 11 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":9,"reason":"11 out of 12 merged PRs checked by a CI test -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 9 contributing companies or organizations","details":["Info: found contributions from: WeblateOrg, freeplane, gammu, osmandapp, phpmyadmin, redhatofficial, sdaps, unknown-horizons, weblateorg"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}}]},"last_synced_at":"2025-08-24T10:06:11.264Z","repository_id":37046528,"created_at":"2025-08-24T10:06:11.264Z","updated_at":"2025-08-24T10:06:11.264Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31494177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["android","exif","flutter","gallery","gdepth","geotiff","gpx","heic","heif","metadata","metadata-explorer","motion-photos","mpf","multipage","svg","tiff","topojson","xmp"],"created_at":"2024-07-30T19:00:49.260Z","updated_at":"2026-04-07T00:01:58.044Z","avatar_url":"https://github.com/deckerst.png","language":"Dart","readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/deckerst/aves/develop/aves_logo.svg\" alt='Aves logo' width=\"200\" /\u003e\n\n## Aves\n\n![Version badge][Version badge]\n![Build badge][Build badge]\n\nAves is a gallery and metadata explorer app. It is built for Android, with Flutter.\n\n[\u003cimg src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\"\n      alt='Get it on Google Play'\n      height=\"80\"\u003e](https://play.google.com/store/apps/details?id=deckers.thibault.aves\u0026pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1)\n[\u003cimg src=\"https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png\"\n      alt='Get it on IzzyOnDroid'\n      height=\"80\"\u003e](https://apt.izzysoft.de/fdroid/index/apk/deckers.thibault.aves)\n[\u003cimg src=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\"\n      alt='Get it on F-Droid'\n      height=\"80\"\u003e](https://f-droid.org/packages/deckers.thibault.aves.libre)\n[\u003cimg src=\"https://raw.githubusercontent.com/deckerst/common/main/assets/get-it-on-github.png\"\n      alt='Get it on GitHub'\n      height=\"80\"\u003e](https://github.com/deckerst/aves/releases/latest)\n\n\n[Compare versions](https://github.com/deckerst/aves/wiki/App-Versions)\n      \n\u003cdiv align=\"left\"\u003e\n\n## Features\n\nAves can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like **multi-page TIFFs, SVGs, old AVIs and more**!\n\nIt scans your media collection to identify **motion photos**, **panoramas** (aka photo spheres), **360° videos**, as well as **GeoTIFF** files.\n\n**Navigation and search** is an important part of Aves. The goal is for users to easily flow from albums to photos to tags to maps, etc.\n\nAves integrates with Android (including Android TV) with features such as **widgets**, **app shortcuts**, **screen saver** and **global search** handling. It also works as a **media viewer and picker**.\n\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n\n[\u003cimg src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/1.png\"\n      alt='Collection screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/1.png)\n[\u003cimg\n      src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/2.png\"\n      alt='Image screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/2.png)\n[\u003cimg\n      src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/5.png\"\n      alt='Stats screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/5.png)\n[\u003cimg\n      src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/3.png\"\n      alt='Info (basic) screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/3.png)\n[\u003cimg\n      src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/4.png\"\n      alt='Info (metadata) screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/4.png)\n[\u003cimg\n      src=\"https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/6.png\"\n      alt='Countries screenshot'\n      width=\"130\" /\u003e](https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/6.png)\n\n\u003cdiv align=\"left\"\u003e\n\n## Changelog\n\nThe list of changes for past and future releases is available [here](https://github.com/deckerst/aves/blob/develop/CHANGELOG.md).\n\n## Permissions\n\nAves requires a few permissions to do its job:\n- **read contents of shared storage**: the app only accesses media files, and modifying them requires explicit access grants from the user,\n- **read locations from media collection**: necessary to display the media coordinates, and to group them by country (via reverse geocoding),\n- **have network access**: necessary for the map view, and most likely for precise reverse geocoding too,\n- **view network connections**: checking for connection states allows Aves to gracefully degrade features that depend on internet.\n\n## Contributing\n\n### Issues\n\n[Bug reports](https://github.com/deckerst/aves/issues/new?assignees=\u0026labels=type%3Abug\u0026template=bug_report.md\u0026title=) and [feature requests](https://github.com/deckerst/aves/issues/new?assignees=\u0026labels=type%3Afeature\u0026template=feature_request.md\u0026title=) are welcome, but read the [guidelines](https://github.com/deckerst/aves/issues/234) first. If you have questions, check out the [discussions](https://github.com/deckerst/aves/discussions).\n\n### Code\n\nAt this stage this project does *not* accept PRs.\n\n### Translations\n\nTranslations are powered by [Weblate](https://hosted.weblate.org/engage/aves/) and the effort of wonderfully generous volunteers.\n\u003ca href=\"https://hosted.weblate.org/engage/aves/\"\u003e\n\u003cimg src=\"https://hosted.weblate.org/widgets/aves/-/multi-auto.svg\" alt=\"Translation status\" /\u003e\n\u003c/a\u003e\n\nIf you want to translate this app in your language and share the result, [there is a guide](https://github.com/deckerst/aves/wiki/Contributing-to-Translations).\n\n### Donations\n\nSome users have expressed the wish to financially support the project. Thanks! ❤️\n\n[\u003cimg src=\"https://raw.githubusercontent.com/deckerst/common/main/assets/paypal-badge-cropped.png\"\n      alt='Donate with PayPal'\n      height=\"40\"\u003e](https://www.paypal.com/donate/?hosted_button_id=RWKQ4J7D8USX6)\n[\u003cimg src=\"https://liberapay.com/assets/widgets/donate.svg\"\n      alt='Donate using Liberapay'\n      height=\"40\"\u003e](https://liberapay.com/deckerst/donate)\n\n## Project Setup\n\nBefore running or building the app, update the dependencies for the desired flavor:\n```\n# scripts/apply_flavor_play.sh\n```\n\nTo build the project, create a file named `\u003capp dir\u003e/android/key.properties`. It should contain a reference to a keystore for app signing, and other necessary credentials. See [key_template.properties](https://github.com/deckerst/aves/blob/develop/android/key_template.properties) for the expected keys.\n\nTo run the app:\n```\n# ./flutterw run -t lib/main_play.dart --flavor play\n```\n\n[Version badge]: https://img.shields.io/github/v/release/deckerst/aves?include_prereleases\u0026sort=semver\n[Build badge]: https://img.shields.io/github/actions/workflow/status/deckerst/aves/quality-check.yml?branch=develop\n","funding_links":["https://github.com/sponsors/deckerst","https://liberapay.com/deckerst","https://www.paypal.com/donate/?hosted_button_id=RWKQ4J7D8USX6","https://liberapay.com/deckerst/donate"],"categories":["Dart","Android","flutter","🎬 Media \u0026 Entertainment","Apps"],"sub_categories":["Android Gallery","🖼️ Gallery \u0026 Tools","Gallery"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeckerst%2Faves","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeckerst%2Faves","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeckerst%2Faves/lists"}