oops forgot to readd stuff cuz i moved it >~<

This commit is contained in:
elburg 2023-02-05 12:07:35 -08:00
parent 8ed5644f81
commit fea0c31d08
9 changed files with 242 additions and 1 deletions

17
category/deviantart.py Normal file
View file

@ -0,0 +1,17 @@
def makeKeyWordList(tags):
catPaths = {
'digitalart/paintings/other': ['Digital Art', 'Paintings']
}
output = [
tags.da_category,
tags.license,
tags.author.username
]
if tags.is_mature:
output.append('is_mature')
for item in .get(tags.category_path,[]):
output.append(item)

9
category/furaffinity.py Normal file
View file

@ -0,0 +1,9 @@
def makeKeyWordList(tags):
return [
tags.theme,
tags.rating,
tags.species,
tags.gender,
tags.artist_url,
tags.fa_category
]

View file

@ -16,7 +16,7 @@ with open(f"{source}.json") as file:
# TODO: insert method to check url or dict # TODO: insert method to check url or dict
logging.debug("determining file type...") logging.debug("determining file type...")
import exif from standards import exif
if infojson.extension in exif.allowed_exts: if infojson.extension in exif.allowed_exts:
logging.debug(f"exif module supports {infojson.extesnion} files. using it... ") logging.debug(f"exif module supports {infojson.extesnion} files. using it... ")

7
misc/getpub.py Normal file
View file

@ -0,0 +1,7 @@
def getPub(input):
if fa_category in input or input.category == 'furaffinity':
return 'Furaffinity'
elif input.category == 'deviantart':
return 'DeviantArt'
else:
return 'Unknown'

81
standards/exif.py Normal file
View file

@ -0,0 +1,81 @@
import logging
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
allowed_exts=[
"tif","tiff", # TIFF
"jpeg","jpg","pjpeg","pjpg","jpe", # JPEG
"webp", # Webp
# "wav","wave", # RIFF Wave
"png","apng" # PNG (since 1.2)
]
def backupMetadata(file):
from PIL import Image, ExifTags
logging.debug(f"loading file {file}")
img = Image.open(file)
logging.debug("file loaded. getting exif")
img_exif = img.getexif()
full=[]
if img_exif is None:
logging.warning("Could not load EXIF Data... Either something happened with Pillow, the file disappeared, or you don't have access to the file. Try running verbose!")
break
else:
logging.debug("loaded tags")
for key, val in img_exif.items():
logging.debug(f"for key:'{key}', val:'{val}' in img_exif.items()")
if key in ExifTags.TAGS:
logging.debug(f"{key} is known exif tag! ({ExifTags.TAGS[key]})")
full.append({
'tagName': str(key),
'realName': str(ExifTags.TAGS[key]),
'value': str(val)
})
else:
logging.warning(f"{key} is an unknown exif tag!")
full.append({
'tagName': str(key),
'realName': None,
'value': str(val)
})
logging.info("writing backup data")
import json
#import tempfile
#temp = tempfile.TemporaryFile(mode='w+')
#json.dump(full,temp,sort_keys=True)
with open(f"{file}.exif_backup.json.xz",'w+b') as bfile
logging.debug(f"writing to {bfile}")
import lzma
bfile.write(lzma.compress(
bytes(json.dumps(full,sort_keys=True)),
format=FORMAT_XZ,
check=CHECK_SHA256,
preset=9
))
logging.debug("wrote backup data")
logging.info("backup done!")
def writeTags(file,tags):
from PIL import Image
image=Image.open(file)
exif = image.getexif()
if artist in tags:
if type(tag.artist) == str:
exif[0x013b] = tags.artist
elif tags.category == "deviantart":
exif[0x013b] = tags.artist.username
if title in tags:
exif[0x0010e] = tags.title
if description in tags:
exif[0x9286] = tags.description

0
standards/iptc.py Normal file
View file

0
standards/matroska.py Normal file
View file

0
standards/png.py Normal file
View file

127
standards/xmp.py Normal file
View file

@ -0,0 +1,127 @@
"XMP Manipulator for gallery-dl"
import logging
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
allowed_exts=[
"html", "htm", "xhtml", "xht", # HTML
"tif", "tiff", # TIFF
"jpeg", "jpg", "pjpeg", "pjpg", "jpe", # JPEG
"jp2", "jpf", "jpx", "jpm", "mj2", # JPEG 2000
"png", "apng", # PNG
"gif", # GIF
"mp3", # MPEG-1 / MPEG-2 Layer III
"mp4", "m4a", "m4p", "m4b", "m4r", "m4v", # MPEG-4
"mov", "qt", # Apple QuickTime .mov
"pdf", # PDF
"webp" # WebP
]
# def backupMetadata(file: str, outputFileExt: str = "xmp_backup.json.xz") -> bool:
# """Exports XMP metadata inside of a file.
# Parameters
# ----------
# file : str
# Location of the file relative to the working directory.
# outputFileExt : str, optional
# The suffix used for the backup file. By default, the output file will be formatted as such:
# <source filename>.xmp_backup.json.xz
# Returns
# -------
# bool
# True, if operation was successful.
# False, if operation failed.
# """
# from libxmp.utils import file_to_dict
# import json
# with open(f"{file}.xmp_backup.json.xz",'w+b') as bfile
# logging.debug(f"writing to {bfile}")
# import lzma
# bfile.write(lzma.compress(
# bytes(json.dumps(file_to_dict(file),sort_keys=True)),
# format=FORMAT_XZ,
# check=CHECK_SHA256,
# preset=9
# ))
# logging.debug("wrote backup data")
# logging.info("backup done!")
def backupMetadata(file):
import pyexiv2
data = pyexiv2.ImageMetadata(file)
data.read()
full = []
for key in data.xmp_keys:
full.append([
key,
data[key].raw_value
])
with open(f"{file}.xmp_backup.json.xz",'w+b') as bfile
import lzma, json
bfile.write(lzma.compress(
bytes(json.dumps(full)),
format=FORMAT_XZ,
check=CHECK_SHA256,
preset=9
))
# def writeTags(file: str, tags: dict) -> bool:
# """Writes XMP tags to file taking the info.json file as a dict.
# """
# from libxmp import XMPFiles, consts
# xmpfile = XMPFiles(file_path=file,)
# if artist in tags:
# if type(tags.artist) == str:
# xmp.set_property(consts.XMP_NS_DC, u'creator', tags.artist.decode('unicode-escape'))
def writeTags(file, tags):
import pyexiv2
xmptags = pyexiv2.ImageMetadata(file)
xmptags.read()
if artist in tags:
if type(tag.artist) == str:
xmptags['Xmp.dc.creator'] = tags.artist
elif tags.category == "deviantart":
xmptags['Xmp.dc.creator'] = tags.artist.username
if title in tags:
xmptags['Xmp.dc.title'] = tags.title
if description in tags:
xmptags['Xmp.dc.description'] = tags.description
if date in tags:
xmptags['Xmp.dc.date'] = tags.date
from ..misc.getpub import getPub
xmptags['Xmp.dc.publisher'] = getPub(tags)
del getPub
keywords=[]
keywords.append(tags.category)
if tags in tags:
for item in tags.tags:
if item not in keywords: keywords.append(item)
if tags.category == 'deviantart':
from ..category.deviantart import makeKeyWordList
for item in makeKeyWordList(tags):
if item not in keywords: keywords.append(item)
elif tags.category == 'furaffinity':
from ..category.furaffinity import makeKeyWordList
for item in makeKeyWordList(tags):
if item not in keywords: keywords.append(item)