Photini - A free, easy to use, digital photograph metadata (Exif, IPTC, XMP) editing application for Linux, Windows and MacOS.

Overview

Photini

A free, easy to use, digital photograph metadata (Exif, IPTC, XMP) editing application for Linux, Windows and MacOS.

"Metadata" is said to mean "data about data". In the context of digital photographs this means information that isn't essential in order to display the image, but tells you something about it. For example a title and description of the scene or the date & time and the GPS coordinates of the camera's position when the picture was taken.

"[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."

Linux Format magazine, January 2013

Why is it called Photini? Read my blog post on how I chose a name.

Features

Text editing screenshot

  • Easy to use graphical interface.
  • Set photo title, description, keywords, copyright and creator fields.
  • Some support for video files.
  • Spell checking of some fields (optional).
  • Can set metadata for multiple images simultaneously.
  • Can adjust picture date & time and time zone (of multiple images simultaneously).
  • Reads Exif, IPTC and XMP metadata, writes all three to maximise compatibility with other software.
  • Writes metadata to image files or to XMP "sidecar" files.
  • Can import photographs from many digital cameras.
  • Upload to Flickr and/or Google Photos with reuse of metadata.

Geotagging screenshot

  • Geotagging - search map to find named places.
  • Choice of map providers - instantly switch to compare details.
  • Drag and drop images on to map to set GPS location.
  • Edit coordinates if required, or clear to unset GPS data.
  • Convert GPS coordinates to street address.
  • Suggestions for further development welcome.

Dependencies

Photini requires at least the following:

For a full list of dependencies, please see the installation documentation.

Documentation

Warning

This program, like all software, may have bugs. 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.

Photini's documentation is at http://photini.readthedocs.io/. It includes detailed installation instructions and a full user manual.

Getting help

If you encounter any problems installing or running Photini, please email [email protected] and I'll respond as soon as I can. There is also an email list or forum for discussions about Photini at https://groups.google.com/forum/#!forum/photini. If you discover a bug and have a GitHub account then please file a bug report on the GitHub "issues" page.

Internationalisation

Work has begun on providing Photini in multiple languages. I rely on users to do the translation, as I am not fluent in any language other than English. If you'd like to help, please join the Photini team on Transifex. For more details, see the localisation documentation.

Licence

Photini - a simple photo metadata editor.
Copyright (C) 2012-21 Jim Easterbrook [email protected]
German translation by Jan Rimmek
Spanish translation by Esteban Martinena & Cristos Ruiz
Polish translation by "itdawid"
Czech translation by Pavel Fric
Catalan translation by Joan Juvanteny

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Service terms and conditions

Use of the Google map tab is subject to the Google Maps Terms of Use and Google Privacy Policy.

Use of the Bing map tab is subject to the Microsoft Bing Maps Terms of Use and Microsoft Privacy Statement.

Use of the Mapbox map tab is subject to the Mapbox terms of service and Mapbox privacy policy.

The Flickr upload tab uses the Flickr API but is not endorsed or certified by Flickr.

Privacy statement

Photini does not directly gather any information from its users, but the online services it can use (maps, Flickr, and Google Photos) may do so. You should read these services' privacy policies before using them.

Photini stores user preferences in a text file on the user's computer. The default location of this file is $HOME/.config/photini/ (Linux), $HOME/Library/Preferences/photini (MacOS), or %USERPROFILE%\AppData\Local\photini\ (Windows). OAuth access tokens for Flickr and Google Photos are securely stored on the user's computer using Python keyring.

Documentation licence

Permission 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. A copy of the license is included in the documentation section entitled "GNU Free Documentation License".

Comments
  • Add support for location description

    Add support for location description

    Please consider adding support for setting a location description as an alternative to specifying geographical coordinates, i.e. something that will be mapped to IPTC's Location Created or Location Shown or the legacy City, Province or State and Country tags. Picture editors often use this information stored in their image databases to find photographers working in a particular area, so it is rather useful to be able to include this information.

    enhancement 
    opened by adamreichold 23
  • Segmentation faults

    Segmentation faults

    Photini may fail to run with some versions of PyQt. If started from a terminal you may get a "Segmentation fault" error message. If this happens, try using the --version option and reporting the details here. For example:

    jim@linux-6fe1:~> photini
    Segmentation fault (core dumped)
    jim@linux-6fe1:~> photini --version
    Photini 2017.6.1, build 822 (a668831)
      Python 3.6.1 (default, Mar 23 2017, 13:04:44) [GCC]
      PyGI 3.24.1, GExiv2 0.10.4, GObject 2.0
      PyQt 5.8.2, Qt 5.9.0, using QtWebEngineWidgets
      enchant 1.6.8
      flickrapi 2.2.1
    jim@linux-6fe1:~> 
    

    My testing so far suggests the problem is with the QtWebEngine replacement for QtWebKit. When this works it's faster, and the Bing map aerial view selector works, so I'd prefer to use it. I think I'm going to have to provide a way of manually disabling it though, as I don't have a definitive list of which PyQt versions are safe.

    bug 
    opened by jim-easterbrook 22
  • Saving fails with 2021.4.0

    Saving fails with 2021.4.0

    I upgraded to 2021.4.0 to test multi-thumbnail reloading (#59) and now photini is useless: It does not save title or copyright anymore into the files, and always creates .xmp files.

    Symptoms

    1. Open file: photini 01.png
    2. Select file in file list
    3. Add title "test" and photographer "test"
    4. Right-click file in file list, "Show changes"
    5. The two changes are visible
    6. Right-click file in file list, "Save changes"
    7. Right-click file in file list, "Close file"
    8. Popup appears: Some files have unsaved meta data. Save?
    9. Confirm by clicking "Save"
    10. Open file with file chooser dialog
    11. Select file
    12. Title and photographer is empty.
    13. A 01.png.xmp file has been created, but that misses the title and photographer as well.

    The same happens when using "Save" in the "File" menu.

    Version

    photini --version
    No module named 'gpxpy'
    Photini 2021.4.0, build 1692 (52cba49)
      Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
    [GCC 10.2.1 20210110]
      PyGObject 3.38.0, GExiv2 0.12.1, GObject 2.0, GLib 2.66.2
      PyQt 5.15.2, Qt 5.15.2, using QtWebEngine
      ffmpeg version 4.3.2-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers
      available styles: cleanlooks, gtk2, cde, motif, plastique, qt5ct-style, Windows, Fusion
      using style: qt5ct-style
    

    I'm using a German language setting.

    opened by cweiske 14
  • Error if accents in filename

    Error if accents in filename

    Hello, When I try to save a photo after modifying metadata, I have this error message :

    11:25:30: ERROR: photini.exiv2: GExiv2: D:\Temp\Photini\photo_with_é.jpg.xmp: Failed to open the data source: No such file or directory (errno = 2) (9)
    Traceback (most recent call last):
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\exiv2.py", line 744, in open_new
        self = cls(sc_path)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\exiv2.py", line 75, in __init__
        self.open_path(self._path)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\gi\overrides\GExiv2.py", line 44, in open_path
        super(Metadata, self).open_path(path)
    gi.repository.GLib.GError: GExiv2: D:\Temp\Photini\photo_with_é.jpg.xmp: Failed to open the data source: No such file or directory (errno = 2) (9)
    

    There is a accent the the file name. When removing it (photo_with_é.jpg => photo_with_e.jpg), everything works fine. Same issue with other non ascii characters. (And congratulations for the great job !)

    bug 
    opened by Arczt 14
  • Error reading metadata

    Error reading metadata

    When I click on some photos I have this error :

    22:25:16: ERROR: photini.exiv2: 20131205_155439.jpg(description), Exif.Photo.UserComment: 'ascii' codec can't decode byte 0xf8 in position 1: ordinal not in range(128)
    

    I suppose it's because there is maybe a 'ë' character in the metatdata. It's for the word 'Noël' which mean Christmas in French.

    opened by HydrelioxGitHub 14
  • Photini should update the

    Photini should update the "Date Taken" field

    When setting a date taken using the Technical metadata tab, I expected it to have an effect on the "Date Taken" field when I right-click->properties->Details the image.

    This is the field that Google Photo uses to order the images.

    image

    Could you consider changing this field when setting the "Taken" field? For the precision, you can always revert to XXXX-01-01 00:00:00.

    Using Photini for Windows version 2020.4.0 build 1484 (5c0423b)

    bug 
    opened by LordCatzorz 13
  • Are video files supported?

    Are video files supported?

    Hello,

    I see in the changelog "started adding support for video files", and that the Open Images dialog offers to select video files. But Photini crashes ("pythonw.exe has stopped working") as soon as I open a video file. I am using the latest version 2017.6.0 windows installer on Windows 10. I have tried with several AVI and MP4 videos.

    So I wonder if perhaps video support is not complete yet? Or a specific issue with the Windows version? Or is it supposed to work and perhaps something wrong on my machine?

    Thanks in advance.

    bug 
    opened by ericdanan 12
  • In 15.11.0 AttributeError: 'module' object has no attribute 'python_2_unicode_compatible'

    In 15.11.0 AttributeError: 'module' object has no attribute 'python_2_unicode_compatible'

    The previous version 15.10.0 is working fine. However, the latest version 15.11.0 crash upon launch. Here is a terminal dump:

    $ photini Traceback (most recent call last): File "/usr/bin/photini", line 9, in <module> load_entry_point('Photini==15.11.0', 'gui_scripts', 'photini')() File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 351, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2363, in load_entry_point return ep.load() File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2088, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) File "/usr/lib/python2.7/dist-packages/photini/editor.py", line 42, in <module> from .bingmap import BingMap File "/usr/lib/python2.7/dist-packages/photini/bingmap.py", line 29, in <module> from .photinimap import PhotiniMap File "/usr/lib/python2.7/dist-packages/photini/photinimap.py", line 30, in <module> from .imagelist import DRAG_MIMETYPE File "/usr/lib/python2.7/dist-packages/photini/imagelist.py", line 31, in <module> from .metadata import Metadata, MetadataHandler File "/usr/lib/python2.7/dist-packages/photini/metadata.py", line 409, in <module> @six.python_2_unicode_compatible AttributeError: 'module' object has no attribute 'python_2_unicode_compatible'

    I am running Ubuntu Trusty 14.04

    I found a similar issue in GitHub in this project along with a solution. I don't know / have time yet to investigate.

    https://github.com/sloria/TextBlob/issues/8

    Well it looks like the trouble comes from line 409 in metadata.py (line 449 as well) @six.python_2_unicode_compatible

    and line 37 in the same file import six

    Basically six has no Attribute 'python_2_unicode_compatible'

    I don't know Python at all, but may be with the other project I mention above you can fix this bug ?

    bug 
    opened by pmo-19 12
  • Google Photo Crash

    Google Photo Crash

    I've just installed Photini and signin my Google account to upload some photos. But when I go to the Google photo tab, I can see my Google profile picture but nothing else is clickable except "Log in" and I have a window with this log :

    18:05:22: ERROR: photini.pyqt: 'title'
    Traceback (most recent call last):
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\pyqt.py", line 113, in wrapper
        return func(*args, **kwds)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\uploader.py", line 274, in connection_changed
        self.show_album_list(self.session.get_albums())
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 323, in show_album_list
        self.upload_config.add_album(album)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 267, in add_album
        widget = QtWidgets.QCheckBox(album['title'].replace('&', '&&'))
    KeyError: 'title'
    18:07:56: ERROR: photini.pyqt: 'title'
    Traceback (most recent call last):
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\pyqt.py", line 113, in wrapper
        return func(*args, **kwds)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\uploader.py", line 274, in connection_changed
        self.show_album_list(self.session.get_albums())
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 323, in show_album_list
        self.upload_config.add_album(album)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 267, in add_album
        widget = QtWidgets.QCheckBox(album['title'].replace('&', '&&'))
    KeyError: 'title'
    18:08:05: ERROR: photini.pyqt: 'title'
    Traceback (most recent call last):
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\pyqt.py", line 113, in wrapper
        return func(*args, **kwds)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\uploader.py", line 274, in connection_changed
        self.show_album_list(self.session.get_albums())
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 323, in show_album_list
        self.upload_config.add_album(album)
      File "C:\Program Files (x86)\Photini\msys2\mingw64\lib\python3.7\site-packages\photini\googlephotos.py", line 267, in add_album
        widget = QtWidgets.QCheckBox(album['title'].replace('&', '&&'))
    KeyError: 'title'
    

    I use the last all in one windows installer version (2019.10.0)

    bug 
    opened by HydrelioxGitHub 11
  • Crash when batch importing files

    Crash when batch importing files

    I am importing a directory with a couple hundred of photos, photini works for a time (I set it to move the photos), but at the end it stops without any message. All the photos of the directory are moved apparently but I can't be sure. Photini version is current HEAD: c403b5f337cc2a78475419a6bb0a1ed2aa4c740f Kubuntu 20.04 with neon packages Python 3.8.2

    Fatal Python error: Cannot recover from stack overflow. Python runtime state: initialized

    Current thread 0x00007fd664b4f740 (most recent call first): File "/usr/lib/python3/dist-packages/gi/overrides/GExiv2.py", line 44 in open_path File "/usr/local/lib/python3.8/dist-packages/photini/exiv2.py", line 75 in init File "/usr/local/lib/python3.8/dist-packages/photini/exiv2.py", line 566 in init File "/usr/local/lib/python3.8/dist-packages/photini/exiv2.py", line 628 in open_old File "/usr/local/lib/python3.8/dist-packages/photini/metadata.py", line 1095 in init File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 63 in init File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 730 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied File "/usr/local/lib/python3.8/dist-packages/photini/pyqt.py", line 113 in wrapper File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 778 in show_thumbnail File "/usr/local/lib/python3.8/dist-packages/photini/imagelist.py", line 732 in open_file File "/usr/local/lib/python3.8/dist-packages/photini/importer.py", line 632 in file_copied ... Aborted

    bug 
    opened by aseques 10
  • ValueError: time data '200303        ' does not match format '%Y%m%d%H%M%S'

    ValueError: time data '200303 ' does not match format '%Y%m%d%H%M%S'

    metadata.py from_ISO_8601 raises ValueError for dates not conforming to ISO format. I have several of these, such as the one reported in the above error which only has a year and month.

    Not sure these dates are exif conform, but e.g. Lightroom (which I am trying to replace with a more customizable flow) has no issue.

    bug 
    opened by bboser 9
  • Bugs in v2022.12.0

    Bugs in v2022.12.0

    I apologise for releasing v2022.12.0 with several bugs that I really should have spotted before release. I've issued the following patch releases:

    v2022.12.0.1 fixes TypeError: descriptor 'tr' requires a 'PySide2.QtCore.QObject' object but received a 'str' or TypeError: tr(self, str, disambiguation: str = None, n: int = -1): first argument of unbound method must have type 'QObject' errors when doing "help -> about Photini" or a map tab search.

    v2022.12.0.2 fixes TypeError: can only join an iterable error when writing an XMP "sidecar" file.

    v2022.12.0.3 fixes incorrect "LangAlt" values written to IPTC-IIM metadata.

    bug 
    opened by jim-easterbrook 0
  • WARNING: CPU random generator seem to be failing, disabling hardware random number generation

    WARNING: CPU random generator seem to be failing, disabling hardware random number generation

    As I'm having a CPU like https://askubuntu.com/questions/1264439/warning-cpu-random-generator-seem-to-be-failing-disable-hardware-random-number and this is a well known issue so far, is there a way to force the hardware RNG using alternative method for random number generation (due to some reason I cannot apply BIOS patch on my machine).

    WARNING: CPU random generator seem to be failing, disabling hardware random number generation
    WARNING: RDRND generated: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
    Traceback (most recent call last):
      File "runpy.py", line 196, in _run_module_as_main
      File "runpy.py", line 86, in _run_code
      File "C:\Program Files (Portable & CMD)\python\lib\site-packages\photini\__main__.py", line 25, in <module>
        sys.exit(main())
      File "C:\Program Files (Portable & CMD)\python\lib\site-packages\photini\editor.py", line 573, in main
        main = MainWindow(options, args)
      File "C:\Program Files (Portable & CMD)\python\lib\site-packages\photini\editor.py", line 180, in __init__
        full_screen = window_state & int(
    TypeError: int() argument must be a string, a bytes-like object or a real number, not 'WindowState'
    Exception ignored in atexit callback: <function shutdown at 0x000002674364AEF0>
    Traceback (most recent call last):
      File "logging\__init__.py", line 2182, in shutdown
      File "logging\__init__.py", line 1084, in flush
      File "C:\Program Files (Portable & CMD)\python\lib\site-packages\photini\loggerwindow.py", line 61, in flush
        self.flush_text.emit()
    RuntimeError: Internal C++ object (StreamProxy) already deleted.
    
    opened by Trung0246 11
  • Flickr authentication failing

    Flickr authentication failing

    Flickr have recently made a change in their API that prevents recent versions of Photini from authenticating / logging in. (With Firefox you get an "SSL_ERROR_RX_RECORD_TOO_LONG" error, I don't know how other browsers will respond.)

    A possible solution is to go back to Photini version 2019.5.0 temporarily, authorise Flickr, then change back to a more recent Photini. (Backup your config file before you do this, then restore it afterwards.) As long as you never log out from Flickr the authorisation should remain valid.

    If the Flickr problem persists I'll issue a new release with an alternative authentication strategy.

    bug 
    opened by jim-easterbrook 2
Releases(2022.12.0.3)
Owner
Jim Easterbrook
Former R&D engineer at @bbcrd, now retired.
Jim Easterbrook
python app to turn a photograph into a cartoon

Draw This. Draw This is a polaroid camera that draws cartoons. You point, and shoot - and out pops a cartoon; the camera's best interpretation of what

Dan Macnish 2k Dec 19, 2022
A quick and dirty QT Statusbar implementation for grabbing GIFs from Tenor, since there is no offical or unofficial one I found. This was intended for use under Linux, however it was also functional enough on MacOS.

Statusbar-TenorGIF App for Linux A quick and dirty QT Statusbar implementation for grabbing GIFs from Tenor, since there is no offical one and I didnt

Luigi DaVinci 1 Nov 1, 2021
DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics.

Frederik Berlaen 344 Jan 6, 2023
Validate arbitrary image uploads from incoming data urls while preserving file integrity but removing EXIF and unwanted artifacts and RCE exploit potential

Validate arbitrary base64-encoded image uploads as incoming data urls while preserving image integrity but removing EXIF and unwanted artifacts and mitigating RCE-exploit potential.

A3R0 1 Jan 10, 2022
Fix datetime EXIF data in photos downloaded from Google Takeout

fix-google-takeout Warning Use at your own risk. Backup your photos. Overview Google takeout for photos

Mayank Mandava 20 Nov 5, 2022
A python script for extracting/removing exif data from images by @AbirHasan2005

Image-Exif A Python script for extracting exif metadata from images. How to use? Using this script you can extract exif data from image and save in .c

Abir Hasan 13 Dec 16, 2022
MetaStalk is a tool that can be used to generate graphs from the metadata of JPEG, TIFF, and HEIC images

MetaStalk About MetaStalk is a tool that can be used to generate graphs from the metadata of JPEG, TIFF, and HEIC images, which are tested. More forma

Cyb3r Jak3 1 Jul 5, 2021
Image Reading, Metadata Conversion, and Image Writing for Microscopy Images in Python

AICSImageIO Image Reading, Metadata Conversion, and Image Writing for Microscopy Images in Pure Python Features Supports reading metadata and imaging

Allen Institute for Cell Science - Modeling 137 Dec 14, 2022
Unique image & metadata generation using weighted layer collections.

nft-generator-py nft-generator-py is a python based NFT generator which programatically generates unique images using weighted layer files. The progra

Jonathan Becker 243 Dec 31, 2022
Python Digital Art Generator

Python Digital Art Generator The main goal of this repository is to generate all possible layers permutations given by the user in order to get unique

David Cuentas Mar 3 Mar 12, 2022
Digital image process Basic algorithm

These are some basic algorithms that I have implemented by my hands in the process of learning digital image processing, such as mean and median filtering, sharpening algorithms, interpolation scaling algorithms, histogram equalization algorithms, etc.

JingYu 2 Nov 3, 2022
a lite weight photo editor written in python for day to day photo editing!

GNU-PhotoShop A lite weight Photo editing Program (currently CLI only) written in python3 for day to day photo editing. Disclaimer : Currently we don'

Kunal Sharma 5 May 30, 2022
Ascify-Art - An easy to use, GUI based and user-friendly colored ASCII art generator from images!

Ascify-Art This is a python based colored ASCII art generator for free! How to Install? You can download and use the python version if you want, modul

Akash Bora 14 Dec 31, 2022
Image-Viewer is a Windows image viewer based on Python 3.

Image-Viewer Hi! Image-Viewer is a Windows image viewer based on Python 3. Using You must download Image-Viewer.exe from the root of the repository. T

null 2 Apr 18, 2022
Utilities for SteamVR on Linux

This project contains scripts to improve the functionally of SteamVR on Linux:

null 86 Dec 29, 2022
This is the official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.

Freedom to build what you want FreeCAD is an open-source parametric 3D modeler made primarily to design real-life objects of any size. Parametric modeling allows you to easily modify your design by going back into your model history to change its parameters.

FreeCAD 12.9k Jan 7, 2023
Django helper application to easily and non-destructively crop arbitrarily large images in admin and frontend.

django-image-cropping django-image-cropping is an app for cropping uploaded images via Django's admin backend using Jcrop. Screenshot: django-image-cr

Jonas und der Wolf GmbH 546 Jan 3, 2023
An add to make adding screenshots and copied images to the scene easy

Blender Clipboard to Scene It doesn't work with version 2.93 and higher (I tested it on 2.91 and 2.83) There is an issue with importing the Pillow mod

Mohammad Mehdi Afkhami 3 Dec 29, 2021