Agent skill

Story Copyright Detector

by UfukNode in UfukNode/Noustiny

Classifies a story seed as known, inspired or original IP and returns strict JSON naming the franchise and the image model to use.

MITAuto-check passedMedia & Creative

Install Story Copyright Detector

skills CLI
$ npx skills add UfukNode/Noustiny --skill story-copyright-detector -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install UfukNode/Noustiny story-copyright-detector --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/UfukNode/Noustiny.git skills-src && mkdir -p .claude/skills && cp -r skills-src/hermes-additions/skills/creative/story-copyright-detector .claude/skills/story-copyright-detector && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
story-copyright-detector
GitHub stars
181
Token cost
~1.7k tokens
SKILL.md length
593 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Classifies a story seed as known, inspired or original IP and returns strict JSON naming the franchise and the image model to use.

  • Works in 5 steps: Named character / franchise token —… → Franchise-coded artifacts / places —… → Register archetypes without a name — "a… → …
  • Choosing an image model for a new story seed
  • SKILL.md covers When to Use, Input Shape, Output Contract and Heuristic checklist, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Meant to run once per story, when a user enters the canvas with a fresh seed, and again only if the story is reset. It reads the seed and returns one JSON object with ip_level (known, inspired or original), a lowercase franchise slug or null, and a model_preference. Known means a specific copyrighted franchise or trademarked character, inspired means a derivative register that names no IP, and original means a grounded scene with no genre trappings.

Known seeds are sent to flux-photoreal, while inspired and original seeds go to gemini-stylised, which the skill describes as cheaper and faster. The decision is scoped to the story, not to each frame, and downstream steps store it and reuse it for every later image generation instead of asking again. Marvel, Star Wars, DC, Harry Potter and Lord of the Rings are among the franchises listed as known.

When your agent uses it

  • Choosing an image model for a new story seed
  • Checking whether a seed names a known franchise
  • Re-classifying after the user resets the story

Example prompts

  • “Classify this story seed: Tony Stark holds the Infinity Gauntlet on the Avengers compound.”
  • “Which image model should a kitchen-sink drama seed use?”
  • “Does a seed about a farmboy called to an ancient prophecy count as inspired?”

Requirements

  • A downstream image pipeline that reads the JSON result

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Named character / franchise token — proper nouns that are unmistakably trademarked (Tony Stark, Frodo, Hogwarts, Darth Vader, Jon Snow…
  2. Franchise-coded artifacts / places — Infinity Gauntlet, Mjolnir, lightsaber, the Ring, the Iron Throne, Pandora, Hogwarts, Shire, Spice…
  3. Register archetypes without a name — "a cybernetic hacker", "a farmboy prophecy", "a blue-skinned forest people" → inspired.
  4. Grounded interior / decision / memory / original character → original.
  5. Empty or unintelligible seed → original, model_preference="gemini-stylised", reason="empty seed — default stylised path".

What it can do on your machine

Read from SKILL.md and the folder at commit 09a0c82. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Story Copyright Detector loads about 1.7k tokens when it runs. Until then it costs about 154 tokens; SKILL.md has 593 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~154
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from UfukNode/Noustiny at commit 09a0c82, republished under its MIT licence (© UfukNode). 593 words, ~1,730 tokens.

Download SKILL.mdSave it as .claude/skills/story-copyright-detector/SKILL.md (or your agent's skills folder).
name
story-copyright-detector
description
Classify a story seed by its intellectual-property weight so downstream image pipelines can pick the right render strategy. Returns {ip_level: known|inspired|original, franchise, model_preference: flux-photoreal|gemini-stylised} as strict JSON. Known franchises (Marvel, Star Wars, Harry Potter, GoT, Avatar, DC, LOTR, Anime) trigger the FLUX + moderation-rewriter ladder because their vocabulary sets off BFL/Google safety filters. Original stories get sent straight to Gemini/Nano Banana — cheaper, faster, stylised, no filter dance required. Use once per story, at canvas-enter time.
author
Noustiny
license
MIT
version
1.0.0

Story Copyright Detector

Every image pipeline wants to be the right pipeline for the story. A Marvel-finale seed cannot go to Gemini — one mention of "Iron Man" and the render refuses. A kitchen-sink drama seed should not be forced through FLUX's heavier photoreal render when Nano Banana would paint the scene in half the time with warmer tones.

This skill looks at the seed once and decides the route. One JSON object, fire and forget. Downstream stores it and every subsequent image-gen reads the preference out of memory instead of re-asking.

When to Use

  • User enters canvas with a fresh seed — fire this skill exactly once.
  • User resets the story → fire again because the seed changed.
  • Do NOT re-fire per beat — the decision is story-scoped, not frame-scoped.

Input Shape

json
{
  "seed": "Tony Stark holds the Infinity Gauntlet on the Avengers compound battlefield — every possible ending hangs on what he does next."
}

Output Contract

Return exactly one JSON object, nothing else:

json
{
  "ip_level": "known",
  "franchise": "marvel",
  "model_preference": "flux-photoreal",
  "reason": "Named Marvel characters (Tony Stark, Avengers), franchise-coded artifact (Infinity Gauntlet); image filters will reject verbatim prompts — route to FLUX with moderation-rewriter retry ladder."
}

Rules:

  • ip_level ∈ "known" | "inspired" | "original".
    • known: names a specific copyrighted franchise (Marvel, Star Wars, DC, Harry Potter, Game of Thrones, Lord of the Rings, Avatar (Cameron), Avatar: The Last Airbender, Dune, One Piece, Naruto, Attack on Titan, anything with a trademarked character name or title).
    • inspired: reads like a derivative of a known register ("a hacker with a cybernetic implant", "a farmboy called to an ancient prophecy") without naming any IP — filters are unlikely to trip.
    • original: a grounded, non-genre scene (a phone call, a decision, a kitchen-sink memory, an unnamed character's interior).
  • franchise: lowercase slug (marvel, star-wars, harry-potter, got, lotr, dc, avatar-cameron, avatar-airbender, dune, one-piece, naruto, attack-on-titan, anime-generic, breaking-bad, the-wire, …) OR null for non-franchise seeds.
  • model_preference:
    • flux-photoreal when ip_level="known" — FLUX handles IP-sanitized prompts best, photoreal cinematic look, goes through moderation-rewriter on refuse.
    • gemini-stylised when ip_level is "inspired" or "original" — Nano Banana is cheaper, faster, stylised; filter won't trip because there are no trademarks to collide with.
    • Exception: if ip_level="inspired" but the seed is heavy on violence / body horror, prefer flux-photoreal (FLUX's violence tolerance is higher than Gemini's).
  • reason: one sentence, human-readable, explains the call. Shown in the agent ticker so the demo viewer sees "WHY the router picked this model".

No markdown code fences, no preamble. First character {, last character }.

Show full SKILL.md (244 more words)Show less

Heuristic checklist

Walk the seed in this order:

  1. Named character / franchise token — proper nouns that are unmistakably trademarked (Tony Stark, Frodo, Hogwarts, Darth Vader, Jon Snow, Katara, Aang, Naruto Uzumaki, Luffy, Paul Atreides, Walter White). If one or more hits → known.
  2. Franchise-coded artifacts / places — Infinity Gauntlet, Mjolnir, lightsaber, the Ring, the Iron Throne, Pandora, Hogwarts, Shire, Spice, Hidden Leaf Village. If one or more hits → known, franchise inferred from the token.
  3. Register archetypes without a name — "a cybernetic hacker", "a farmboy prophecy", "a blue-skinned forest people" → inspired.
  4. Grounded interior / decision / memory / original character → original.
  5. Empty or unintelligible seed → original, model_preference="gemini-stylised", reason="empty seed — default stylised path".

Model preference shorthand

Detected franchisemodel_preferenceWhy
marvel / dc / star-wars / lotr / got / harry-potter / dune / avatar-cameronflux-photorealLive-action aesthetic — FLUX photoreal cinematic matches the register
avatar-airbender / naruto / one-piece / attack-on-titan / anime-genericgemini-stylisedAnimation register — Nano Banana handles cel-shade natively AND supports multi-modal reference portraits for character consistency
breaking-bad / the-wire (grounded drama)gemini-stylisedGrounded realistic look — Nano Banana's warmer palette suits the register
null (original)gemini-stylisedNo IP to dodge, cheap path wins

Anti-patterns

  • Do NOT return the full reasoning — one short reason line only.
  • Do NOT add suggestions, alternatives, or markdown. JSON only.
  • Do NOT over-flag — "a decision at a crossroads" is NOT a franchise even if it sounds Harry Potter-ish. Require an actual named token.
  • Do NOT under-flag — "the compound battle" + "gauntlet" is Marvel even without saying Marvel.

Example

Input:

json
{ "seed": "A hacker wakes at the foot of Galata Tower with a cybernetic implant under the skin of the forearm and no memory of the last three years. It is 03:17." }

Correct output:

json
{
  "ip_level": "inspired",
  "franchise": null,
  "model_preference": "gemini-stylised",
  "reason": "Cyberpunk register (cybernetic implant, amnesiac hacker) with original setting (Galata Tower); no trademark tokens; stylised path is cheaper and filter-safe."
}

Input:

json
{ "seed": "Aang returns to the Southern Air Temple after a hundred years and finds it empty — every air nomad gone, their bison's bones in the snow." }

Correct output:

json
{
  "ip_level": "known",
  "franchise": "avatar-airbender",
  "model_preference": "flux-photoreal",
  "reason": "Named IP character (Aang) + franchise-coded setting (Southern Air Temple) + species (air nomads, sky bison) — image filters will refuse verbatim; route to FLUX with moderation retry."
}

© UfukNode, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in hermes-additions/skills/creative/story-copyright-detector of UfukNode/Noustiny.

Open the folder on GitHubat commit 09a0c82

Compare with similar skills

Story Copyright Detector next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Story Copyright Detector compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Story Copyright Detector this skillUfukNode/Noustiny181—~1.7kAutomated safety check: PassMIT
AI Image Generation and Editingzhayujie/CowAgent47k—~1.3kAutomated safety check: PassMIT
Nano Banana Pro Prompts Recommend SkillYouMind-OpenLab/nano-banana-pro-prompts-recommend-skill1.9k1 repos~4.1kAutomated safety check: PassNone
Logo Generatorop7418/logo-generator-skill2.2k—~1.8kAutomated safety check: NotesNone
Gemini Web Reverse-Engineered ClientJimLiu/baoyu-skills26k5 repos~1.6kAutomated safety check: PassMIT
SEO Image GeneratorAgriciDaniel/claude-seo19k2 repos~2.1kAutomated safety check: PassMIT

Similar skills

  • Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.

    47k GitHub stars~1.3k tokensUpdated today
    Media & CreativeAuto-check passed
  • Nano Banana Pro Prompts Recommend Skill

    YouMind-OpenLab/nano-banana-pro-prompts-recommend-skill

    Recommend suitable prompts from 10,000+ Nano Banana Pro image generation prompts based on user needs.

    1.9k GitHub starsUsed in 1 repo~4.1k tokens
    Media & CreativeAuto-check passed
  • Logo Generator

    op7418/logo-generator-skill

    Generate professional SVG logos and high-end showcase images.

    2.2k GitHub stars~1.8k tokensUpdated 5 mo ago
    Media & CreativeAuto-check: notes
  • Generates text and images through an unofficial, reverse-engineered Gemini Web API, supporting reference images and multi-turn conversations.

    26k GitHub starsUsed in 5 repos~1.6k tokens
    Media & CreativeAuto-check passed
  • SEO Image Generator

    AgriciDaniel/claude-seo

    Generates Open Graph previews, blog hero images, product photos and infographics for SEO use through Gemini image tools and the banana extension.

    19k GitHub starsUsed in 2 repos~2.1k tokens
    Media & CreativeAuto-check passed
  • BlockRun Image Generation

    BlockRunAI/ClawRouter

    Generates or edits images through ClawRouter's local image API, with a choice of models and sizes and payment handled automatically through x402.

    6.6k GitHub stars~2.1k tokensUpdated 4 days ago
    Media & CreativeAuto-check passed

More from UfukNode/Noustiny

All 13 skills in this repo
  • Grades whether a downstream story beat still holds after an upstream insertion, returning a strict JSON verdict of still_valid, needs_rewrite or must_delete.

    181 GitHub stars~2.3k tokensUpdated 5 mo ago
    Auto-check passed
  • Narrative Writer

    UfukNode/Noustiny

    Turns an ordered list of canon story beats into one continuous piece of present-tense prose with tonal continuity and motif carry-through, never JSON or tool calls.

    181 GitHub stars~1.9k tokensUpdated 5 mo ago
    Auto-check passed
  • Expands a one-line author intent into a full story beat that fits between two known nodes of a canon path, returned as strict JSON.

    181 GitHub stars~3.1k tokensUpdated 5 mo ago
    Auto-check passed
  • Story Scene Composer

    UfukNode/Noustiny

    Groups every node of an existing branching story tree into scenes, titles each scene, assigns an act and a one-word motif, and returns the result as JSON.

    181 GitHub stars~2.3k tokensUpdated 5 mo ago
    Auto-check passed
  • Chooses the pace, color palette, transition and length of the opening montage for a Noustiny audiobook storybook when the user leaves those settings open.

    181 GitHub stars~3.2k tokensUpdated 5 mo ago
    Auto-check passed
  • Character Sheet Builder

    UfukNode/Noustiny

    Produce a cast sheet of 1–4 named characters from a story seed.

    181 GitHub stars~2.1k tokensUpdated 5 mo ago
    Auto-check passed

Works with

Questions about Story Copyright Detector

What does Story Copyright Detector do?

Classifies a story seed as known, inspired or original IP and returns strict JSON naming the franchise and the image model to use. Meant to run once per story, when a user enters the canvas with a fresh seed, and again only if the story is reset. It reads the seed and returns one JSON object with ip_level (known, inspired or original), a lowercase franchise slug or null, and a model_preference.

When should I use Story Copyright Detector?

Story Copyright Detector fits situations like: choosing an image model for a new story seed; checking whether a seed names a known franchise; re-classifying after the user resets the story.

How do I install Story Copyright Detector in Claude Code?

Run `npx skills add UfukNode/Noustiny --skill story-copyright-detector -a claude-code`. Or copy the skill folder (hermes-additions/skills/creative/story-copyright-detector in UfukNode/Noustiny) into .claude/skills/story-copyright-detector in your project. Claude Code loads it when a task matches its description.

How do I install Story Copyright Detector in Codex?

Run `npx skills add UfukNode/Noustiny --skill story-copyright-detector -a codex`. Or copy the skill folder (hermes-additions/skills/creative/story-copyright-detector in UfukNode/Noustiny) into .agents/skills/story-copyright-detector in your project. Codex loads it when a task matches its description.

Can I use Story Copyright Detector in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add UfukNode/Noustiny --skill story-copyright-detector -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/story-copyright-detector, .gemini/skills/story-copyright-detector, .github/skills/story-copyright-detector and .opencode/skills/story-copyright-detector in your project.

What does Story Copyright Detector need to run?

SKILL.md names no scripts, command-line tools or credentials: Story Copyright Detector is instructions for the agent only. Our summary lists: A downstream image pipeline that reads the JSON result.

Does Story Copyright Detector access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Story Copyright Detector safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Story Copyright Detector use?

Story Copyright Detector is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Story Copyright Detector use?

About 1.7k tokens (SKILL.md is roughly 6.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Story Copyright Detector?

Skills that share tags, products or a category with Story Copyright Detector: AI Image Generation and Editing (zhayujie/CowAgent, 47k stars), Nano Banana Pro Prompts Recommend Skill (YouMind-OpenLab/nano-banana-pro-prompts-recommend-skill, 1.9k stars), Logo Generator (op7418/logo-generator-skill, 2.2k stars) and Gemini Web Reverse-Engineered Client (JimLiu/baoyu-skills, 26k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Story Copyright Detector?

UfukNode (a GitHub user) maintains it in UfukNode/Noustiny, which has 181 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on May 4, 2026.

Source: UfukNode/Noustiny on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.