mirror of
				https://github.com/9001/copyparty.git
				synced 2025-11-04 05:43:17 +00: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
 |