Skip to content
Automation
Skill

/generate-identifiers

Use this skill when a user provides a torrent name or file name and wants to fix recognition issues, or asks to add/manage custom identifiers (自定义识别词). This skill generates identifier rules based on the WordsMatcher preprocessing logic, checks for duplicates against existing

From plugin
moviepilot
12k16 skills

Claude Code

$ npx -y skills add jxxghp/moviepilot --skill generate-identifiers --agent claude-code

SKILL.md

generate-identifiers.SKILL.md
name: generate-identifiers
version: 4
description: >-
  Use this skill when a user provides a torrent name or file name and wants to fix recognition issues,
  or asks to add/manage custom identifiers (自定义识别词).
  This skill generates identifier rules based on the WordsMatcher preprocessing logic,
  checks for duplicates against existing rules, and saves them through the
  structured MoviePilot API gateway.
  Because custom identifiers are global, generated rules must default to conservative,
  sample-specific regex patterns instead of broad matches unless the user explicitly wants global cleanup.
  Applicable scenarios include:
  1) A torrent or file name is incorrectly recognized (wrong title, season, episode, etc.);
  2) The user wants to block unwanted keywords from torrent names;
  3) The user needs episode offset rules for series with non-standard numbering;
  4) The user wants to force recognition of a specific media by source-native ID;
  5) The user wants TV recognition to use a specific TMDB episode group.
allowed-tools: moviepilot_api
allowed-api-operations: config.identifiers.get config.identifiers.update media.recognize

Generate Custom Identifiers (生成自定义识别词)

This skill helps generate custom identifier rules for MoviePilot's media recognition system. Custom identifiers preprocess torrent/file names before the recognition engine runs, correcting naming issues that cause misidentification.

Prerequisites

Use these `moviepilot_api` operations:

  • `config.identifiers.get` - Query all existing custom identifier rules
  • `config.identifiers.update` - Save the updated identifier list (replaces the full list)
  • `media.recognize` - Test recognition of a torrent title or file path (optional)

Supported Rule Formats

There are **four formats**. Operators must have spaces on both sides.

1. Block Word (屏蔽词)

Removes matched text from the title. Supports regex.

SomeUniqueAlias

Use a bare block word only when the token itself is specific enough globally, or when the user explicitly wants a global cleanup rule.

2. Replacement (被替换词 => 替换词)

Regex substitution. The left side is a regex pattern, the right side is the replacement (supports backreferences).

被替换词 => 替换词

**Special replacement for direct ID specification:**

被替换词 => {[tmdbid=xxx;type=movie/tv;s=xxx;e=xxx]}
被替换词 => {[doubanid=xxx;type=movie/tv;s=xxx;e=xxx]}

Use the source-specific field that matches the target metadata provider: `tmdbid`, `doubanid`, `bangumiid`, or `anilistid`. Where `s` (season) and `e` (episode) are optional. For TMDB TV recognition, add `g=xxx` to specify an episode group:

被替换词 => {[tmdbid=xxx;type=tv;g=xxx;s=xxx;e=xxx]}

3. Episode Offset (集偏移)

Shifts episode numbers found between the front and back delimiter words. `EP` is the placeholder for the original episode number.

前定位词 <> 后定位词 >> EP-12

4. Combined Replacement + Episode Offset

First performs replacement; episode offset only runs if replacement succeeded.

被替换词 => 替换词 && 前定位词 <> 后定位词 >> EP-12

Comments

Lines starting with `#` are comments and will be skipped during processing.

Important Rules for Writing Identifiers

1. **Regex support**: All patterns support regular expressions. Special characters (`. * + ? ^ $ { } [ ] ( ) | \`) must be escaped with `\` when matching literally. 2. **Spaces matter**: The operators ` => `, ` <> `, ` >> `, ` && ` must have spaces on both sides. 3. **One rule per string**: Each element in the identifiers list is one rule. 4. **EP placeholder**: In episode offset expressions, `EP` represents the original episode number. Common patterns:

  • `EP-12` means subtract 12
  • `EP+5` means add 5
  • `EP*2` means multiply by 2

5. **Chinese number support**: Episode offset handles Chinese numbers (一二三四五六七八九十). 6. **Empty replacement**: Using nothing after `=>` is equivalent to a block word.

Global Scope Guardrails

Custom identifiers are **global**. A new rule affects all future torrent/file recognition, not just the sample provided by the user.

When generating a new rule, default to **the narrowest regex that still fixes the user's sample**:

  • Extract the sample's unique anchors first: wrong title alias, year, season/episode marker, group tag, source, resolution, release tag, file extension, or other distinctive fragments.
  • The matching side should usually contain **at least two meaningful anchors**, and one of them should normally be the title alias or another highly distinctive identifier from the user-provided sample.
  • Prefer matching the **full wrong alias or a stable unique fragment** from the sample, not a short generic substring.
  • Avoid generic global rules such as bare `1080p`, `WEB-DL`, `中字`, `国配`, `REPACK`, `S01E01`, or pure numbers unless the user explicitly wants a global cleanup rule.
  • If the rule only needs to fix one specific naming pattern, prefer a **contextual replacement** with capture groups/backreferences over a bare block word.
  • For episode offset rules, the `前定位词` and `后定位词` should use sample-specific context so the offset only runs on the intended naming pattern.
  • For direct media binding, the left side should match the user's specific wrong alias or naming pattern, not a broad season/episode pattern that could hit other media.

Narrow vs Broad Examples

Bad (too broad for a global rule):

REPACK
1080p
S01E01 => {[tmdbid=12345;type=tv;s=1;e=1]}

Better (scoped to the user's sample pattern):

(\[SubGroup\].*?My\.Show.*?2024.*?)REPACK => \1
Some\.Weird\.Name(?:\.2024)?(?:\.S01E\d+)? => {[tmdbid=12345;type=tv;s=1]}
\[Baha\] <> \[1080P\] >> EP-12

Before saving, mentally test the rule against:

  • the user's sample: it should match
  • unrelated titles with common release tags: it should usually **not** match

Workflow

Step 1: Analyze the Problem

Parse the torrent/file name provided by the user. Identify:

  • What is being incorrectly recognized (title, season, episode, year, qualit
Read more
@jxxghp
Ships withmoviepilot

基于 NAStool 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护。

Stars on GitHub

Momentum

stars in total
12.1k
Star history of jxxghp/moviepilot on GitHub, a chart by star-history.com

Other skills on moviepilot.

anysearch

anysearch

API key for higher rate limits. Anonymous access available with lower rate limits.

@jxxghp@jxxghpInstall Skill
browser-use

browser-use

Use this skill when the user asks the agent to open, browse, inspect, extract content from, click through, fill forms on,…

@jxxghp@jxxghpInstall Skill
command-dispatch

command-dispatch

Use this skill when the user sends a slash command or asks to run a MoviePilot system or plugin command in natural language.…

@jxxghp@jxxghpInstall Skill
create-moviepilot-plugin

create-moviepilot-plug…

Use this skill when the user asks to create, modify, debug, validate, or scaffold a MoviePilot local plugin. Covers version-aware…

@jxxghp@jxxghpInstall Skill
create-moviepilot-skill

create-moviepilot-skil…

Use this skill when the user asks to create, scaffold, update, or review a MoviePilot agent skill. This includes adding a new…

@jxxghp@jxxghpInstall Skill
database-operation

database-operation

Use this skill when you need to inspect, query, maintain, or carefully modify the MoviePilot database. This skill uses the…

@jxxghp@jxxghpInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n11d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about generate-identifiers.

Which coding agents can use generate-identifiers?
generate-identifiers installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.