{"id":31730986,"url":"https://github.com/jim-easterbrook/photini","last_synced_at":"2025-10-09T07:46:33.481Z","repository":{"id":4808852,"uuid":"5962410","full_name":"jim-easterbrook/Photini","owner":"jim-easterbrook","description":"An easy to use digital photograph metadata (Exif, IPTC, XMP) editing application.","archived":false,"fork":false,"pushed_at":"2025-09-23T03:02:04.000Z","size":140422,"stargazers_count":193,"open_issues_count":2,"forks_count":25,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-09-29T01:07:51.214Z","etag":null,"topics":["exif","iptc","metadata-editor","photography","python","xmp"],"latest_commit_sha":null,"homepage":"https://photini.readthedocs.io/","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/jim-easterbrook.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.txt","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2012-09-26T07:43:19.000Z","updated_at":"2025-09-21T08:38:10.000Z","dependencies_parsed_at":"2023-07-06T10:16:18.756Z","dependency_job_id":"d34e5a70-735b-4309-a739-5dc14b48351b","html_url":"https://github.com/jim-easterbrook/Photini","commit_stats":null,"previous_names":[],"tags_count":115,"template":false,"template_full_name":null,"purl":"pkg:github/jim-easterbrook/Photini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jim-easterbrook%2FPhotini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jim-easterbrook%2FPhotini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jim-easterbrook%2FPhotini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jim-easterbrook%2FPhotini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jim-easterbrook","download_url":"https://codeload.github.com/jim-easterbrook/Photini/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jim-easterbrook%2FPhotini/sbom","scorecard":{"id":258955,"data":{"date":"2025-08-11","repo":{"name":"github.com/jim-easterbrook/Photini","commit":"995d240cfd9fff137b0d2af4778d95020b1e7f70"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":6,"reason":"7 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/8 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/update_translations.yml:1","Info: no jobLevel write permissions found"],"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":"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":"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"}},{"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":"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":"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update_translations.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/jim-easterbrook/Photini/update_translations.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/update_translations.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/jim-easterbrook/Photini/update_translations.yml/main?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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"}}]},"last_synced_at":"2025-08-17T10:20:35.199Z","repository_id":4808852,"created_at":"2025-08-17T10:20:35.199Z","updated_at":"2025-08-17T10:20:35.199Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000974,"owners_count":26082974,"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-09T02:00:07.460Z","response_time":59,"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":["exif","iptc","metadata-editor","photography","python","xmp"],"created_at":"2025-10-09T07:46:32.100Z","updated_at":"2025-10-09T07:46:33.475Z","avatar_url":"https://github.com/jim-easterbrook.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Photini\n=======\n\nA free, easy to use, digital photograph metadata (Exif, IPTC, XMP) editing application for Linux, Windows and MacOS.\n\n\"Metadata\" is said to mean \"data about data\".\nIn the context of digital photographs this means information that isn't essential in order to display the image, but tells you something about it.\nFor example a title and description of the scene or the date \u0026 time and the GPS coordinates of the camera's position when the picture was taken.\n\n   \"[Photini] doesn't try to be an all-singing, all-dancing image management powerhouse - it just lets you add information to photos, quickly and easily.\"\n   \n   -- `Linux Format`_ magazine, January 2013\n\nWhy is it called Photini?\nRead my `blog post`_ on how I chose a name.\n\n.. contents::\n   :backlinks: top\n\nFeatures\n--------\n\n.. image:: https://raw.githubusercontent.com/jim-easterbrook/Photini/refs/heads/main/src/doc/images/screenshot_027.png\n   :alt: Text editing screenshot\n\n*   Easy to use graphical interface.\n*   Set photo title, description, keywords, copyright and creator fields.\n*   Some support for video files.\n*   Spell checking of some fields (optional).\n*   Can set metadata for multiple images simultaneously.\n*   Can adjust picture date \u0026 time and time zone (of multiple images simultaneously).\n*   Reads Exif, IPTC and XMP metadata, writes all three to maximise compatibility with other software.\n*   Writes metadata to image files or to XMP \"sidecar\" files.\n*   Can import photographs from many digital cameras.\n*   Upload to Flickr_ or `Google Photos`_ or Ipernity_ or Pixelfed_ with reuse of metadata.\n\n.. image:: https://raw.githubusercontent.com/jim-easterbrook/Photini/refs/heads/main/src/doc/images/screenshot_224.png\n   :alt: Geotagging screenshot\n\n*   Geotagging - search map to find named places.\n*   Choice of map providers - instantly switch to compare details.\n*   Drag and drop images on to map to set GPS location.\n*   Or set GPS location using data exported by a tracker app.\n*   Edit coordinates if required, or clear to unset GPS data.\n*   Convert GPS coordinates to street address.\n*   Suggestions for further development welcome.\n\nDependencies\n------------\n\nPhotini requires at least the following:\n\n*   Python3: http://python.org/\n*   PyQt5, PyQt6, PySide2, or PySide6: http://www.riverbankcomputing.co.uk/software/pyqt/ or https://doc.qt.io/qtforpython/\n*   python-exiv2: https://pypi.org/project/exiv2/\n\nFor a full list of dependencies, please see the `installation documentation`_.\n\nDocumentation\n-------------\n\n.. warning::\n   This program, like all software, may have bugs.\n   Before using it be sure to back up all your photographs (you do this anyway, right?) as I can't guarantee you won't accidentally damage them.\n\nPhotini's documentation is at http://photini.readthedocs.io/.\nIt includes detailed installation instructions and a full user manual.\n\n.. _readme-getting_help:\n\nGetting help\n------------\n\nIf you encounter any problems installing or running Photini, please email jim@jim-easterbrook.me.uk and I'll respond as soon as I can.\nThere is also an email list or forum for discussions about Photini at https://groups.google.com/forum/#!forum/photini.\nIf you discover a bug and have a GitHub account then please file a bug report on the GitHub `\"issues\" page`_.\n\nIf you find a problem with a particular image file then it would be useful for me to have a copy of its metadata.\nYou can use the exiv2_ command line program to extract the raw metadata so you don't need to send me the entire image file.\nFor example, the command ``exiv2 ex problem_file.jpg`` can reduce a 3 MByte image file to a 20 kByte file called ``problem_file.exv``.\nI promise not to publish or redistribute any file you send me.\n\nLocalisation\n------------\n\nWork has begun on providing Photini in multiple languages.\nI rely on users to do the translation, as I am not fluent in any language other than English.\nThe project uses an online translation service called Weblate_.\nIf you'd like to help translate Photini, please join the `Photini team on Hosted Weblate`_.\nFor more details, see the `localisation documentation`_.\n\n.. _readme-legalese:\n\nLicence\n-------\n\n| Photini - a simple photo metadata editor.\n| http://github.com/jim-easterbrook/Photini\n| Copyright (C) 2012-25  Jim Easterbrook  jim@jim-easterbrook.me.uk\n\n| Catalan translation by Joan Juvanteny\n| Czech translation by Pavel Fric\n| French translation by Nathan, J. Lavoie, Thibault Chevrin\n| German translation by Jan Rimmek, J. Lavoie, Ettore Atalan\n| Italian translation by \"albanobattistella\"\n| Korean translation by Soohyeon Park\n| Norwegian Bokmål translation by Allan Nordhøy\n| Polish translation by Dawid Głaz, Eryk Michalak\n| Spanish translation by Esteban Martinena, Cristos Ruiz, Kamborio, gallegonovato\n| Tamil translation by \"TamilNeram\"\n\nThis program is free software: you can redistribute it and/or\nmodify it under the terms of the GNU General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see http://www.gnu.org/licenses/.\n\nService terms and conditions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nUse of the Google map tab is subject to the `Google Maps Terms of Use`_ and `Google Privacy Policy`_.\n\nUse of the Azure map tab is subject to the `Microsoft Product Terms For Online Services`_ and `Microsoft Privacy \u0026 Security Terms`_.\n\nUse of the Bing map tab is subject to the `Microsoft Bing Maps Terms of Use`_ and `Microsoft Privacy Statement`_.\n\nUse of the Mapbox map tab is subject to the `Mapbox terms of service`_ and `Mapbox privacy policy`_.\n\nThe Flickr upload tab uses the Flickr API but is not endorsed or certified by Flickr.\n\nPrivacy statement\n^^^^^^^^^^^^^^^^^\n\nPhotini does not directly gather any information from its users, but the online services it can use (maps and uploaders) may do so.\nYou should read these services' privacy policies before using them.\n\nPhotini stores user preferences in a text file on the user's computer.\nThe default location of this file is ``$HOME/.config/photini/`` (Linux), ``$HOME/Library/Preferences/photini`` (MacOS), or ``%USERPROFILE%\\AppData\\Local\\photini\\`` (Windows).\nOAuth_ access tokens for the uploader tabs are securely stored on the user's computer using `Python keyring`_.\n\n\nDocumentation licence\n^^^^^^^^^^^^^^^^^^^^^\n\nPermission is granted to copy, distribute and/or modify the Photini documentation under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.\nA copy of the license is included in the documentation section entitled \"GNU Free Documentation License\".\n\n.. _blog post:\n      https://www.jim-easterbrook.me.uk/2012/10/photini-whats-in-a-name/\n.. _exiv2:         https://exiv2.org/manpage.html\n.. _Flickr:        http://www.flickr.com/\n.. _Google Photos: https://photos.google.com/\n.. _Google Maps Terms of Use:\n      http://www.google.com/help/terms_maps.html\n.. _Google Privacy Policy:\n      http://www.google.com/policies/privacy/\n.. _installation documentation:\n      http://photini.readthedocs.io/en/latest/other/installation.html\n.. _Ipernity:      http://www.ipernity.com/\n.. _\"issues\" page: https://github.com/jim-easterbrook/Photini/issues\n.. _Linux Format:  http://www.linuxformat.com/archives?issue=166\n.. _localisation documentation:\n      http://photini.readthedocs.io/en/latest/other/localisation.html\n.. _Mapbox terms of service:\n      https://www.mapbox.com/tos/\n.. _Mapbox privacy policy:\n      https://www.mapbox.com/privacy/\n.. _Microsoft Bing Maps Terms of Use:\n      http://www.microsoft.com/maps/assets/docs/terms.aspx\n.. _Microsoft Privacy \u0026 Security Terms:\n      https://www.microsoft.com/licensing/terms/product/PrivacyandSecurityTerms/all\n.. _Microsoft Privacy Statement:\n      http://www.microsoft.com/en-us/privacystatement/\n.. _Microsoft Product Terms For Online Services:\n      https://www.microsoft.com/licensing/terms/product/ForOnlineServices/all\n.. _OAuth:         http://oauth.net/\n.. _OpenStreetMap licence:\n      http://www.openstreetmap.org/copyright\n.. _Photini team on Hosted Weblate:\n      https://hosted.weblate.org/projects/photini/\n.. _Pixelfed:      https://pixelfed.org/\n.. _Python keyring:\n      https://pypi.python.org/pypi/keyring#what-is-python-keyring-lib\n.. _Weblate:       https://hosted.weblate.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjim-easterbrook%2Fphotini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjim-easterbrook%2Fphotini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjim-easterbrook%2Fphotini/lists"}