First draft 0.1

This commit is contained in:
David Maisonave
2024-07-20 03:15:56 -04:00
parent 91eb3aa81c
commit 71319037c5
7 changed files with 13159 additions and 23 deletions

View File

@@ -1,14 +1,14 @@
# RenameFileName:
# RenameFile:
### Requirements
`pip install stashapp-tools`
`pip install pyYAML`
### Using RenameFileName
### Using RenameFile
`*Note: Changes are made when a scene edit is saved.`
Renames video (scene) file names when the user edits the [Title] field located in the scene [Edit] tab.
The file is renamed after user clicks save button.
Tags are appended to the file name if the tag does not already exist in the original file name.When you have installed the `RenameFileName` plugin, hop into your plugins directory, RenameFileName folder > open renamefilename_settings.py with your favorite code/text editor and you'll see this:
Features are configurable using the renamefilename_settings.py.
Tags are appended to the file name if the tag does not already exist in the original file name.When you have installed the `RenameFile` plugin, hop into your plugins directory, RenameFile folder > open renamefile_settings.py with your favorite code/text editor and you'll see this:
Features are configurable using the renamefile_settings.py.
Note: On Windows OS, the file can not be renamed while it's playing. Refresh the URL to allow file release and rename.

File diff suppressed because it is too large Load Diff

View File

@@ -5,21 +5,23 @@ import shutil
from pathlib import Path
import hashlib
# This is a Stash plugin which allows users to rename the video (scene) file name by editing the [Title] field located in the scene [Edit] tab.
# Importing stashapi.log as log for critical events
import stashapi.log as log
# Import settings from renamefilename_settings.py
from renamefilename_settings import config
# Import settings from renamefile_settings.py
from renamefile_settings import config
# Get the directory of the script
script_dir = Path(__file__).resolve().parent
# Configure logging for your script
log_file_path = script_dir / 'renamefilename.log'
log_file_path = script_dir / 'renamefile.log'
logging.basicConfig(filename=log_file_path, level=logging.INFO, format='%(asctime)s - %(message)s')
logger = logging.getLogger('renamefilename')
logger = logging.getLogger('renamefile')
endpoint = config.get("graphql_endpoint") # GraphQL endpoint; Update via renamefilename_settings.py
endpoint = config.get("graphql_endpoint") # GraphQL endpoint; Update via renamefile_settings.py
# GraphQL query to fetch all scenes
query_all_scenes = """
@@ -59,7 +61,7 @@ def form_filename(original_file_stem, scene_details, wrapper_styles, separator,
tag_keys_added = 0
default_title = ''
if_notitle_use_org_filename = config["if_notitle_use_org_filename"]
add_tag_if_not_in_name = config["add_tag_if_not_in_name"]
exclude_tag_if_in_name = config["exclude_tag_if_in_name"]
if if_notitle_use_org_filename:
default_title = original_file_stem
@@ -138,7 +140,7 @@ def form_filename(original_file_stem, scene_details, wrapper_styles, separator,
elif key == 'tags':
tags = [tag.get('name', '') for tag in scene_details.get('tags', [])]
for tag_name in tags:
if not add_tag_if_not_in_name or tag_name.lower() not in original_file_stem.lower():
if not exclude_tag_if_in_name or tag_name.lower() not in original_file_stem.lower():
add_tag(tag_name)
new_filename = separator.join(filename_parts).replace('--', '-')
@@ -304,6 +306,7 @@ def rename_scene(scene_id, wrapper_styles, separator, key_order, stash_directory
metadata_scan_path = original_parent_directory
perform_metadata_scan(metadata_scan_path)
# ToDo: Add logic to the below code section so it checks base file length and checks folder length, instead of lumping them altogether.
# Current DB schema allows file folder max length to be 255, and max base filename to be 255
max_filename_length = int(config["max_filename_length"])
if len(new_filename) > max_filename_length:
@@ -338,10 +341,10 @@ wrapper_styles = config["wrapper_styles"]
separator = config["separator"]
key_order = config["key_order"]
# Read stash directory from renamefilename_settings.py
# Read stash directory from renamefile_settings.py
stash_directory = config.get('stash_directory', '')
# Extract rename_files and move_files settings from renamefilename_settings.py
# Extract rename_files and move_files settings from renamefile_settings.py
rename_files_setting = config["rename_files"]
move_files_setting = config["move_files"]

View File

@@ -1,14 +1,14 @@
name: RenameFileName
name: RenameFile
description: "Renames video (scene) file names when the user edits the [Title] field located in the scene [Edit] tab.
The file is renamed after user clicks save button.
Tags are appended to the file name if the tag does not already exist in the original file name.
Features are configurable using the renamefilename_settings.py.
Features are configurable using the renamefile_settings.py.
Note: On Windows OS, the file can not be renamed while it's playing. Refresh the URL to allow file release and rename."
version: 0.1
url: https://github.com/David-Maisonave/Axter-Stash
exec:
- python
- "{pluginDir}/renamefilename.py"
- "{pluginDir}/renamefile.py"
interface: raw
hooks:
- name: RenameFiles

View File

@@ -28,7 +28,6 @@ config = {
"frame_rate",
"tags"
],
# Define keys to exclude from the formed filename
# Specify keys to exclude from the filename formation process. (ie. "exclude_keys": ["studio", "date"],)
"exclude_keys": ["studio", "performers", "date", "height", "video_codec", "frame_rate"],
# Define whether files should be moved when renaming
@@ -39,16 +38,14 @@ config = {
"dry_run": False,
# Define whether the original file name should be used if title is empty
"if_notitle_use_org_filename": True,
# Define whether to add tag only if tag is not in file name
"add_tag_if_not_in_name": True,
# Define whether to rename all files missing tag names, or only the latest scene having an update
# "rename_all_files": True,
# Define whether to exclude the tag if the tag is already in the file name
"exclude_tag_if_in_name": True, # Warning: If set to False, could end up having duplicate tags in file name
# Define the maximum number of tag keys to include in the filename (None for no limit)
"max_tag_keys": 12,
# Current Stash DB schema only allows maximum base file name length to be 255
"max_filename_length": 255,
"max_filefolder_length": 255, # For future useage
"max_filebase_length": 255, # For future useage
# "max_filefolder_length": 255, # For future useage
# "max_filebase_length": 255, # For future useage
# GraphQL endpoint
"graphql_endpoint": "http://localhost:9999/graphql", # Update with your endpoint
# Define a whitelist of allowed tags or (None to allow all tags)