mirror of
				https://github.com/9001/copyparty.git
				synced 2025-10-30 20:22:20 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| import subprocess as sp
 | |
| 
 | |
| 
 | |
| _ = r"""
 | |
| remove exif tags from uploaded images; the eventhook edition of
 | |
| https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/image-noexif.py
 | |
| 
 | |
| dependencies:
 | |
|     exiftool / perl-Image-ExifTool
 | |
| 
 | |
| being an upload hook, this will take effect after upload completion
 | |
|     but before copyparty has hashed/indexed the file, which means that
 | |
|     copyparty will never index the original file, so deduplication will
 | |
|     not work as expected... which is mostly OK but ehhh
 | |
| 
 | |
| note: modifies the file in-place, so don't set the `f` (fork) flag
 | |
| 
 | |
| example usages; either as global config (all volumes) or as volflag:
 | |
|     --xau bin/hooks/image-noexif.py
 | |
|     -v srv/inc:inc:r:rw,ed:c,xau=bin/hooks/image-noexif.py
 | |
|                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| explained:
 | |
|     share fs-path srv/inc at /inc (readable by all, read-write for user ed)
 | |
|     running this xau (execute-after-upload) plugin for all uploaded files
 | |
| """
 | |
| 
 | |
| 
 | |
| # filetypes to process; ignores everything else
 | |
| EXTS = ("jpg", "jpeg", "avif", "heif", "heic")
 | |
| 
 | |
| 
 | |
| try:
 | |
|     from copyparty.util import fsenc
 | |
| except:
 | |
| 
 | |
|     def fsenc(p):
 | |
|         return p.encode("utf-8")
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     fp = sys.argv[1]
 | |
|     ext = fp.lower().split(".")[-1]
 | |
|     if ext not in EXTS:
 | |
|         return
 | |
| 
 | |
|     cwd, fn = os.path.split(fp)
 | |
|     os.chdir(cwd)
 | |
|     f1 = fsenc(fn)
 | |
|     cmd = [
 | |
|         b"exiftool",
 | |
|         b"-exif:all=",
 | |
|         b"-iptc:all=",
 | |
|         b"-xmp:all=",
 | |
|         b"-P",
 | |
|         b"-overwrite_original",
 | |
|         b"--",
 | |
|         f1,
 | |
|     ]
 | |
|     sp.check_output(cmd)
 | |
|     print("image-noexif: stripped")
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     try:
 | |
|         main()
 | |
|     except:
 | |
|         pass
 |