Asset Library logo

Asset Library

Community
goodnight000
asset-library

Keep a persistent local library of reusable video-production assets across projects: footage, images, music, sound effects, characters, animation code and 3D sets. Use when searching for an existing asset before sourcing or building one, registering something another project is about to reuse, recording which assets a cut used, or checking a project's catalog at delivery.

Overview

Publishergoodnight000
Repositorycstack
Skill nameasset-library
Stars
117
Forks
21
Bundled files
3
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 3 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by goodnight000 on GitHub. Read the source before you install it.

Installation

Install the Asset Library AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/goodnight000/cstack/tree/main/skills/asset-library
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/goodnight000/cstack.git /tmp/cstack
mkdir -p .claude/skills
cp -r /tmp/cstack/skills/asset-library .claude/skills/asset-library
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Asset Library in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Asset Library on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Asset Library is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Asset library

One SQLite database plus the files it points at, under one library root: the record of every reusable asset, each version of it, and every cut it appeared in. The files stay on disk where agents and editors open them.

LIB below means python3 SKILL_DIR/scripts/library.py (SKILL_DIR is this skill's folder; Python 3.9+, FFmpeg). LIB --help lists the commands, and LIB COMMAND --help gives each one's flags with an example. Every command prints JSON and exits 1 with an error and a hint.

Two words carry the records:

  • Original: one source work. A crop, re-encode or ducked mix is a variant of the same original (--work-id, --variant-role), so reuse limits count originals, not files.
  • Version: one immutable state of an asset. A media file's version is its content hash. A character, code kit or 3D set is a bundle, and each registration snapshots a version of it. A use names the version actually placed, never "latest".

Set up

Read ~/.asset-library/profile.md if it exists: it names the root, any local adapter to call instead of LIB, and the user's reuse rules. Run LIB check. With no library, ask once where it should live (a folder beside the user's video projects is a good default), run LIB init ROOT, and offer to write Root: `ROOT` into the profile.

1. Search before sourcing or building

Search by what the viewer sees or hears, not by the project's topic:

sh
LIB search "keyboard typing" --kind sfx --max-duration 0.5 --unused-in PROJECT
LIB show ID

show gives where the asset already appeared, the user's opinion in their words, its rights and its versions. Reuse a version as is (copy its snapshot from bundles/ID/VERSION/files/), restyle it (its use names the version you started from, with --modified), or build new. Reading an old bundle or project for its mechanics is always fine. An asset with unknown rights stays a candidate until the user decides.

2. Ingest media when it becomes a candidate

Run LIB ingest FILE --kind … --source-url … --creator … --license … while the provenance is still known. Ingest hashes the file, returns duplicate_of instead of a copy when the bytes already exist, copies it into the root, probes it and makes a preview. Describe a sound's --planned-use by the feeling it gives rather than where one cut placed it, so another project can find it. LIB archive ID hides what isn't worth finding again; an asset a past cut used is never deleted.

3. Register a bundle when it is about to be reused

When a new project is about to reuse a character, rig, kit, set, material, synthesised sound or helper script from an earlier one, register it from the project where it works (LIB register --help has a full example), then copy the snapshot into the new project and record that version when the cut uses it. The profile's reuse rules say what may recur.

What --help doesn't tell you:

  • Validation runs in a fresh copy of the snapshot, not in the project, with only PATH, HOME, LANG, TMPDIR and the names given with --validate-env. When it fails, the version is recorded as failed and the command exits 1: add the missing files to --files and register again.
  • The snapshot keeps file contents, not permission bits. Name the interpreter in the command (bash check.sh), or chmod +x in --validate-setup.
  • Validation proves the command exits 0, not that the result looks right. Make it render the example; a command that only parses the source proves nothing.
  • The same content gives the same version. Any changed file or setting adds a version, and old versions stay because past cuts point at them.

4. Record the cut

Record uses once the cut is delivered, from its final cue sheet or manifest after the last swap; uses recorded mid-project go stale when a track or clip changes. Record what the cut shows or plays and pin what was placed: file for media (it is hashed, and a file that isn't the library's copy is refused, so ingest it, as a variant if it was cropped or re-encoded), artifact_version for a bundle (from the copied snapshot's bundle.json), with modified when the project changed it. Detail such as "whoosh" goes in the cue.

LIB used ID --project … --cut … --role … --file … records one use. For a whole cut, list the entries in a JSON declaration kept with the project and run LIB used --from FILE, which records every entry or none; check and deliver read the same file:

json
{"project": "PROJECT", "cut": "v3", "selected": [
  {"id": "sfx-07", "role": "sfx", "file": "audio/sfx-07.flac", "cue": "keyboard", "output_time": 12.4},
  {"id": "walk-rig", "role": "character", "artifact_version": "9c01d5e3aa40", "modified": true}
]}

file is relative to the declaration's folder, and an empty selected list is valid. When a recorded use turns out wrong, record the cut that replaced it and add a caveat note to the asset.

Report the video and the catalog status separately; the video ships whatever state the catalog is in.

5. Check the record

LIB check --project P --cut C --declared FILE checks a cut's record without writing: every declared entry has its use with the right version, and nothing points at a missing file. It also lists unrecorded references, library assets named or byte-matched in the project folder but missing from the declaration; most are rejected candidates, so add one only if the cut really uses it. LIB deliver runs the same check and, when it passes, stores the cut's delivery row, listing the bundles registered from the project (--registered ID@VERSION, or --none REASON).

Notes

LIB note ID --kind opinion|test|rights|caveat --text "…" --source "…" appends a dated note. An opinion is the user's own words with the date and source, never inferred; a judge's or agent's reading is a caveat; a passing validation is a test.

Without the library

With no library and the user declining one, or with the tool failing, keep the project manifest that the producing skill describes and say the catalog was not updated. Change the database only through commands; LIB export writes a full JSON copy.

Before changing library.py or the schema, read records.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Asset Library AI skill do?

Keep a persistent local library of reusable video-production assets across projects: footage, images, music, sound effects, characters, animation code and 3D sets. Use when searching for an existing asset before sourcing or building one, registering something another project is about to reuse, recording which assets a cut used, or checking a project's catalog at delivery.

Why use Asset Library on TypingMind?

Because you install it once and use it with any model. Asset Library is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Asset Library in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/goodnight000/cstack/tree/main/skills/asset-library. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Asset Library?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Asset Library?

As many as you like. As long as a model supports skills, you can use Asset Library with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Asset Library AI skill free?

Yes. It is published on GitHub by goodnight000 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇