{"id":16994607,"url":"https://github.com/znerol/exifproxy","last_synced_at":"2026-04-18T19:31:16.201Z","repository":{"id":57427615,"uuid":"314813491","full_name":"znerol/exifproxy","owner":"znerol","description":"Metadata extraction reverse proxy based on twisted and exiftool","archived":false,"fork":false,"pushed_at":"2020-11-22T12:09:23.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-30T19:38:11.335Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/znerol.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-21T13:03:22.000Z","updated_at":"2020-11-22T12:09:26.000Z","dependencies_parsed_at":"2022-09-19T19:50:40.095Z","dependency_job_id":null,"html_url":"https://github.com/znerol/exifproxy","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/znerol/exifproxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znerol%2Fexifproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znerol%2Fexifproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znerol%2Fexifproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znerol%2Fexifproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/znerol","download_url":"https://codeload.github.com/znerol/exifproxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/znerol%2Fexifproxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31982444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T17:30:12.329Z","status":"ssl_error","status_checked_at":"2026-04-18T17:29:59.069Z","response_time":103,"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":[],"created_at":"2024-10-14T03:46:03.368Z","updated_at":"2026-04-18T19:31:16.174Z","avatar_url":"https://github.com/znerol.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Exifproxy\n=========\n\n.. image:: https://travis-ci.com/znerol/exifproxy.svg?branch=master\n    :target: https://travis-ci.com/znerol/exifproxy\n\n\nMetadata extraction reverse proxy based on twisted_ and exiftool_.\n\n.. _exiftool: http://www.sno.phy.queensu.ca/~phil/exiftool/\n.. _twisted: https://twistedmatrix.com/\n\n\nInstallation\n------------\n\n::\n\n   python3 -m pip install exifproxy\n\n\nUsage\n-----\n\n::\n\n   twist exifproxy --help\n   Usage: twist [options] plugin [plugin_options] exifproxy [options]\n   Options:\n         --backend=  Url to backend, no trailing slash [default: http://localhost]\n         --help      Display this help and exit.\n         --listen=   Listen port (strports syntax) [default: tcp:8080]\n         --version   Display Twisted version and exit.\n\n\nRequests to one of the proxy endpoints will be forwarded to the backend. When a\nsuccessful result is returned from the backend, content is extracted from the\nbody and sent to the client. The following proxy endpoints are available:\n\n/json\n  All metadata is extracted from the backend response using\n  ``exiftool -j -g -a -struct`` and returned to the client with\n  ``Content-Type`` header set to ``application/json``.\n/xmp\n  The ``xmp`` packet is extracted from the response and returned to the client\n  with ``Content-Type`` header set to ``application/rdf+xml``.\n/preview\n  The first preview image is extracted from the backend response and returned\n  to the client as a JPEG image.\n/pageimage/{N}\n  The Nth page image is extracted from the backend response and returned to the\n  client as a JPEG image. Index starts from ``0``.\n\n\nTryout\n------\n\nRun ``twist exifproxy --backend=https://raw.githubusercontent.com/exiftool/exiftool/master/t/images``\n\nThen use ``curl`` to access any of the exiftool example images_ through one of the proxy endpoints:\n\n::\n\n   curl http://localhost/xmp/Photoshop.psd\n   curl http://localhost/json/GIMP.xcf\n\n.. _images: https://github.com/exiftool/exiftool/tree/master/t/images\n\n\nLicense\n-------\n\nThe software is subject to the AGPLv3_ or later license.\n\n\n.. _AGPLv3: https://www.gnu.org/licenses/agpl-3.0.en.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznerol%2Fexifproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fznerol%2Fexifproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznerol%2Fexifproxy/lists"}