reluce / szurubooru-toolkit

Python package and script collection to manage your szurubooru image board.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Could Upload Media include Tags from Sidecar txt file

gljames24 opened this issue · comments

Is the currently a way to import images from a folder with sidecars that programs like gallery-dl make with --write-tags instead of having to set the tag to "tagme" and relying on the auto tagger? Additionally, would it be possible to have a boolean in the config so that if the similarity is too high, the tags get copied over anyway like if the same image was downloaded twice, but from two different boorus with two different sets of tags?

Do you mean that you want to be able to set tags individually for each image with the upload-media script?

Regarding the second request: You mean that the duplicate post should use the tags from the existing post while also adding the new ones?

When I use the upload-media script, I would like to be able to have an image, let's call it 'abc.jpg', and for it to be imported with the tags given from a text file 'abc.txt' if it exists. If the image is already in the booru, there could be an option to either do nothing, overwrite, or append the tags from that text file to the image it matched with.

@reluce I ended up using the import-from-url script to import from a folder by adding in txt and no sidecar options for images found in a folder and just downloaded an image already in my szurubooru as import-from-url would already import images in the tmp directory. It would probably be better to move this importing functionality to upload-media and call it in import-from-url after the images and json files had been imported. I need to take a look at the 1.0 changes, but I think adding in my merge tags option and this addition would make importing media a lot easier with a backlog of data already downloaded with gallery-dl.

files = [file for file in glob.glob(f'{download_dir}/*') if  Path(file).suffix not in ['.psd', '.json','.txt']]

    logger.info(f'Downloaded {len(files)} post(s). Start importing...')

    saucenao_limit_reached = False

    
    for file in tqdm(
        files,
        ncols=80,
        position=0,
        leave=False,
        disable=config.import_from_url['hide_progress'],
    ):
        if os.path.exists(str(file) + '.json'):
            with open(file + '.json') as json_file:
                metadata = json.load(json_file)
                metadata['site'] = site
                metadata['source'] = generate_src(metadata)

                if 'rating' in metadata:
                    metadata['safety'] = convert_rating(metadata['rating'])
                else:
                    metadata['safety'] = config.upload_media['default_safety']

                if 'tags' in metadata or 'tag_string' in metadata or 'hashtags' in metadata:
                    metadata['tags'] = set_tags(metadata)
                else:
                    metadata['tags'] = []

                # As Twitter doesn't provide any tags compared to other sources, we try to auto tag it.
                if site == 'twitter':
                    metadata['tags'] += extract_twitter_artist(metadata)
                    config.auto_tagger['md5_search_enabled'] = True
                    config.auto_tagger['saucenao_enabled'] = True
                else:
                    config.auto_tagger['md5_search_enabled'] = False
                    config.auto_tagger['saucenao_enabled'] = False
        elif os.path.exists(str(file) + '.txt'):
            with open(str(file) + '.txt') as txt_file:
                tags = txt_file.read().splitlines()
            metadata = {
                'safety': config.upload_media['default_safety'],
                'tags': tags,
                'site': '',
                'source': ''
            }
        else:
            metadata = {
                'safety': config.upload_media['default_safety'],
                'tags': 'tagme',
                'site': '',
                'source': ''
            }
        with open(file, 'rb') as file_b:
            saucenao_limit_reached = upload_media.main(file_b.read(), Path(file).suffix[1:], metadata, saucenao_limit_reached)