Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

203 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TMDB-Import

English简体中文DeepWiki

This script uses the Playwright automation framework and only supports Chrome/Chromium browsers. Playwright automatically downloads and manages browsers, eliminating the need for manual driver installation.

Installation

Install Dependencies

Full Installation (All Features)

pip install -r requirements.txt
playwright install chromium

Minimal Installation (Core Features Only)

pip install python-dateutil

This minimal installation supports most extractors that don't require browser automation.

Optional Dependencies

Dependencies are loaded on-demand. The program will show helpful error messages when a feature requires a missing package:

  • Browser Automation (for sites like Youku, IQIYI that require JavaScript rendering)

    pip install playwright
    playwright install chromium
  • Chinese Variant Conversion (Simplified ↔ Traditional)

    pip install opencc-python-reimplemented

    Enable in config.ini by setting chinese_convert = zh-CN (or zh-TW, zh-HK)

  • Image Processing (for backdrop/poster cropping and format conversion)

    pip install Pillow bordercrop

Individual Package Installation

pip install playwright
pip install python-dateutil
pip install Pillow
pip install bordercrop
pip install opencc-python-reimplemented
playwright install chromium

Usage

Command Line Options

  • -h, --help: Show help information
  • -V, --version: Show version information
  • -d, --debug: Enable debug logging (default is INFO level)
  • --headless: Run browser in headless mode (default is GUI mode)

Basic Usage

python -m tmdb_import [options] "URL"

Browser Mode Description

  • GUI Mode (default): Browser window is visible, suitable for debugging and scenarios requiring manual interaction
  • Headless Mode (--headless): Browser runs in the background without displaying a window, suitable for automation scripts and server environments
  • Headless mode can improve performance and reduce resource usage, especially suitable for batch processing tasks

Extract Episode Data

python -m tmdb_import "http://www.***.com/video.html"
python -m tmdb_import -d "http://www.***.com/video.html" # Enable debug logging
python -m tmdb_import --headless "http://www.***.com/video.html" # Run in headless mode
python -m tmdb_import -d --headless "http://www.***.com/video.html" # Debug + headless mode
python -m tmdb_import "http://www.***.com/video.html" --debug # Options can also be placed after URL
  • Extract episode data through web links, including title, plot description, duration, release time (mostly current platform time), and background image links.
  • Output files:
    • metadata.json: Full structured metadata (show-level fields, season-level fields, episode list by season)
    • import.csv: Flattened episode list for TMDB import

Import Data to TMDB

python -m tmdb_import "https://www.themoviedb.org/tv/{tv_id}/season/{season_number}?language={language}"
# Example: python -m tmdb_import "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Enable debug: python -m tmdb_import -d "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Headless mode: python -m tmdb_import --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
# Combined options: python -m tmdb_import -d --headless "https://www.themoviedb.org/tv/203646/season/1?language=zh-CN"
  • Import data from import.csv in the directory to TMDB. When uploading backdrop images, automatically crop black borders and adapt to the aspect ratio required by TMDB. On first run, manual login is required (or set tmdb_username and tmdb_password in config.ini for automatic login). See Configuration for more options.

Image Processing

python -m tmdb_import backdrop "https://www.***.com/image.jpg"
python -m tmdb_import --headless backdrop "https://www.***.com/image.jpg" # Process backdrop in headless mode
  • Crop backdrop images to fit TMDB requirements
python -m tmdb_import poster "https://www.***.com/image.jpg"
python -m tmdb_import --headless poster "https://www.***.com/image.jpg" # Process poster in headless mode
  • Crop poster images to fit TMDB requirements
python -m tmdb_import fitsize width*height "https://www.***.com/image.jpg"
python -m tmdb_import --headless fitsize 1920*1080 "https://www.***.com/image.jpg" # Crop in headless mode
  • Crop images according to specified width and height

Using as a Python Library

TMDB-Import can also be used as a library in your Python projects:

# Add to sys.path (if not installed via pip)importsyssys.path.insert(0, r'/path/to/TMDB-Import')
# Import directly (package uses underscore now)fromtmdb_importimportextract_from_url, save_metadata_json, create_csv# Extract metadatametadata=extract_from_url("https://tver.jp/series/...")
# Access metadataprint(metadata.title) # Show titleprint(metadata.overview) # Show overviewprint(metadata.poster) # Poster URLprint(metadata.language) # Language code (e.g., 'ja-JP')# Access episodesforseasoninmetadata.seasons:
forepisode_num, episodeinseason.episodes.items():
print(f"E{episode_num}: {episode.name}")
# Optional: Save files manuallysave_metadata_json("output.json", metadata)
forseasoninmetadata.seasons:
ifseason.episodes:
create_csv("output.csv", season.episodes)
break

Available Functions:

  • extract_from_url(url, language="zh-CN"): Extract and process metadata from URL
  • save_metadata_json(filename, metadata): Save metadata to JSON file
  • create_csv(filename, episodes_dict): Save episodes to CSV file

Metadata Structure:

  • Metadata: Show-level data (title, overview, poster, backdrop, logo, language, seasons)
  • Season: Season-level data (season_number, name, overview, poster, episodes)
  • Episode: Episode data (episode_number, name, air_date, runtime, overview, backdrop)

Configuration

The config.ini file in the working directory controls the behaviour of the script. All settings are placed under the [DEFAULT] section.

KeyDefaultDescription
encodingutf-8-sigCSV file encoding (e.g. utf-8, utf-8-sig, gbk)
save_user_profiletruePersist the browser session under the Browser/ folder so you stay logged in between runs
tmdb_username(empty)TMDB account username for automatic login
tmdb_password(empty)TMDB account password for automatic login
backdrop_forced_uploadfalseWhen true, upload a backdrop image even if one already exists on TMDB
backdrop_vote_after_uploadfalseWhen true, automatically cast a thumbs-up vote on the newly uploaded backdrop
filter_words(empty)Comma-separated words; episodes whose titles contain any of these words are filtered out. Remaining episodes are automatically renumbered while preserving gaps (e.g., if episodes 1,2,3,4,5,6,10 exist and episodes 2,4 are filtered, result will be 1,2,3,8 to preserve the gap after episode 6)
rename_csv_on_importfalseWhen true, rename import.csv to import_{tmdb_id}_s{season}_{language}.csv before importing
delete_csv_after_importfalseWhen true, delete the CSV file after a successful import
chinese_convert(empty)Convert Chinese text variant after extraction. Leave empty to disable. Options: zh-CN (Simplified), zh-TW (Taiwan Traditional), zh-HK (Hong Kong Traditional). Only applied when the source language is Chinese (zh-*).

Example config.ini:

[DEFAULT]encoding = utf-8-sig
save_user_profile = true
tmdb_username = your_username
tmdb_password = your_password
backdrop_forced_upload = false
backdrop_vote_after_upload = false
filter_words = 番外,加更
rename_csv_on_import = false
delete_csv_after_import = false
chinese_convert = 

Test Environment

Windows 11, Chrome/Chromium, Python 3, and Visual Studio Code.

Supported Sites

WebsiteTitlePlotDurationRelease DateBackdropDefault Language
anidbxxFollow site
applezh-CN
asahija-JP
bilibilixzh-CN
biliintlxxFollow site
crunchyrollFollow site
cctvxzh-CN
fodxja-JP
hbomaxxFollow site
iqiyixxxzh-CN
ixiguazh-CN
kktvxzh-TW
kocowaFollow site
linetvxxzh-TW
litvxxxzh-TW
mgtvxxzh-CN
miguxxzh-CN
mytvsuperzh-HK
myvideoxxzh-TW
netflixxxxFollow site
nhkxja-JP
paravixja-JP
primevideoFollow site
ptsplusxzh-TW
qqxzh-CN
sohuzh-CN
tvdbxxFollow site
tvbanywherezh-HK
tverja-JP
vikixxen-US
viuzh-CN
yahooxxFollow site
wavveko-KR
youkuzh-CN
youtubeFollow site

About

Automated tool for extracting TV episode data from streaming platforms and importing to TMDB. Supports 25+ sites with Playwright automation, image processing.

Topics

Resources

Stars

71 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages