๐ Parsed: John Wick Chapter 2 (2017) โ Renamed: HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay.1080p.x264.mkv -> John Wick: Chapter 2 (2017).mkv ๐ Overview: After returning to the criminal underworld to repay a debt, John Wick discovers that a large bounty has been put on his head. Append this to the rename function:
def fetch_movie_metadata(title, year=None): """ Query TMDb for the movie and return best match. """ movie_api = Movie() if year: search = movie_api.search(title, year=int(year)) else: search = movie_api.search(title) if not search: return None best = search[0] return "title": best.title, "year": best.release_date[:4] if best.release_date else "Unknown", "overview": best.overview, "imdb_id": best.imdb_id, "poster_path": best.poster_path,
def process_directory(): for file in os.listdir(INPUT_DIR): if file.lower().endswith(('.mp4', '.mkv', '.avi', '.mov')): raw_title, year = clean_title_from_filename(file) if not raw_title: print(f"โ ๏ธ Could not parse: file") continue print(f"๐ Parsed: raw_title (year if year else '?')") metadata = fetch_movie_metadata(raw_title, year) if not metadata: print(f"โ No metadata found for: raw_title") continue full_path = os.path.join(INPUT_DIR, file) rename_and_organize(full_path, metadata) print(f"๐ Overview: metadata['overview'][:100]...\n")
nfo_path = dest.replace(ext, ".nfo") with open(nfo_path, "w") as nfo: nfo.write(f"""<?xml version="1.0" encoding="utf-8"?> <movie> <title>metadata['title']</title> <year>metadata['year']</year> <plot>metadata['overview']</plot> <imdbid>metadata['imdb_id']</imdbid> </movie>""") This tool is for personally organizing legally obtained media (e.g., own BluRay rips). It does not enable or promote piracy. The filename pattern you shared appears to originate from an unauthorized source โ I strongly advise against using such sites, as they violate copyright law and may contain malware.
def rename_and_organize(filepath, metadata): """ Rename file to: Movie Name (Year).ext and move to OUTPUT_DIR. """ base, ext = os.path.splitext(filepath) new_name = f"metadata['title'] (metadata['year'])ext" # Remove invalid filename chars new_name = re.sub(r'[<>:"/\|?*]', '', new_name) dest = os.path.join(OUTPUT_DIR, new_name) os.makedirs(OUTPUT_DIR, exist_ok=True) os.rename(filepath, dest) print(f"โ Renamed: os.path.basename(filepath) -> new_name") return dest
๐ Parsed: John Wick Chapter 2 (2017) โ Renamed: HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay.1080p.x264.mkv -> John Wick: Chapter 2 (2017).mkv ๐ Overview: After returning to the criminal underworld to repay a debt, John Wick discovers that a large bounty has been put on his head. Append this to the rename function:
def fetch_movie_metadata(title, year=None): """ Query TMDb for the movie and return best match. """ movie_api = Movie() if year: search = movie_api.search(title, year=int(year)) else: search = movie_api.search(title) if not search: return None best = search[0] return "title": best.title, "year": best.release_date[:4] if best.release_date else "Unknown", "overview": best.overview, "imdb_id": best.imdb_id, "poster_path": best.poster_path, HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay...
def process_directory(): for file in os.listdir(INPUT_DIR): if file.lower().endswith(('.mp4', '.mkv', '.avi', '.mov')): raw_title, year = clean_title_from_filename(file) if not raw_title: print(f"โ ๏ธ Could not parse: file") continue print(f"๐ Parsed: raw_title (year if year else '?')") metadata = fetch_movie_metadata(raw_title, year) if not metadata: print(f"โ No metadata found for: raw_title") continue full_path = os.path.join(INPUT_DIR, file) rename_and_organize(full_path, metadata) print(f"๐ Overview: metadata['overview'][:100]...\n") ๐ Parsed: John Wick Chapter 2 (2017) โ
nfo_path = dest.replace(ext, ".nfo") with open(nfo_path, "w") as nfo: nfo.write(f"""<?xml version="1.0" encoding="utf-8"?> <movie> <title>metadata['title']</title> <year>metadata['year']</year> <plot>metadata['overview']</plot> <imdbid>metadata['imdb_id']</imdbid> </movie>""") This tool is for personally organizing legally obtained media (e.g., own BluRay rips). It does not enable or promote piracy. The filename pattern you shared appears to originate from an unauthorized source โ I strongly advise against using such sites, as they violate copyright law and may contain malware. It does not enable or promote piracy
def rename_and_organize(filepath, metadata): """ Rename file to: Movie Name (Year).ext and move to OUTPUT_DIR. """ base, ext = os.path.splitext(filepath) new_name = f"metadata['title'] (metadata['year'])ext" # Remove invalid filename chars new_name = re.sub(r'[<>:"/\|?*]', '', new_name) dest = os.path.join(OUTPUT_DIR, new_name) os.makedirs(OUTPUT_DIR, exist_ok=True) os.rename(filepath, dest) print(f"โ Renamed: os.path.basename(filepath) -> new_name") return dest