Book Video Factory
jaxxchen003/book-video-factory
Create or operate a portable, auditable Chinese book-review short-video workflow from a clean local workspace.
Bilingual guide for running offlinepacking/autopipe.sh across multiple nodes to produce padding-free packed WebDataset shards for SFT, with Energon Metadataset assembly
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packing --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .claude/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.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/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .claude/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .agents/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .agents/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .cursor/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .cursor/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git --path .opencode/skills/distributed-offline-packing--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .gemini/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .gemini/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .github/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .github/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .github/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install EvolvingLMMs-Lab/LLaVA-OneVision-2 distributed-offline-packing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.opencode/skills/distributed-offline-packing .opencode/skills/distributed-offline-packing && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "distributed-offline-packing" agent skill from https://github.com/EvolvingLMMs-Lab/LLaVA-OneVision-2/tree/main/.opencode/skills/distributed-offline-packing into .opencode/skills/distributed-offline-packing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "distributed-offline-packing", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
distributed-offline-packingBilingual guide for running offlinepacking/autopipe.sh across multiple nodes to produce padding-free packed WebDataset shards for SFT, with Energon Metadataset assembly
Distributed Offline Packing is an agent skill from EvolvingLMMs-Lab/LLaVA-OneVision-2. Bilingual guide for running offlinepacking/autopipe.sh across multiple nodes to produce padding-free packed WebDataset shards for SFT, with Energon Metadataset assembly
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: opencode
It sits in Writing & Content, covering Translation. The repository describes itself as: Fully Open Framework for Democratized Multimodal Training. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6ef16b1. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
pythonbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
opencode
From compatibility in the SKILL.md frontmatter.
Distributed Offline Packing loads about 2.6k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 927 words of instructions outside code blocks.
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.
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.
The full file from EvolvingLMMs-Lab/LLaVA-OneVision-2 at commit 6ef16b1, republished under its Apache-2.0 licence (© EvolvingLMMs-Lab). 927 words, ~2,570 tokens.
.claude/skills/distributed-offline-packing/SKILL.md (or your agent's skills folder).Use this skill when packing a large SFT JSONL (hundreds of thousands to millions of samples) into Energon WebDataset shards at a fixed sequence length, using offline_packing/auto_pipe.sh parallelized across multiple nodes.
当需要把大规模 SFT JSONL(几十万到几百万样本)按固定序列长度打包成 Energon WebDataset shards,并通过 offline_packing/auto_pipe.sh 在多台机器上并行处理时,使用这个 skill。
offline_packing/auto_pipe.sh and stage scripts s1_split_json_to_samples.py … s4_bins_to_webdataset.pyimages, prompts, captions (multi-turn list-of-lists) and image paths are usable as-is所有节点共享同一个 NFS(数据+代码+输出)。每台机器使用同一个 docker 镜像,里面要有 transformers、energon、项目代码。需要 offline_packing/auto_pipe.sh 和 s1–s4 四个 stage 脚本。Tokenizer 和 image processor 是本地 HF 格式目录。源 JSONL 每行包含 images / prompts / captions(多轮是 list-of-list),图片路径可直接使用。
JSONL (N samples)
├─ s1_split_json_to_samples.py # validate + drop bad/missing-image samples
│ # output: per-sample serialized records
├─ s2_compute_token_lengths.py # tokenize prompts/captions, compute image-patch tokens
│ # output: length array per sample
├─ s3_bin_packing.py # BFD (Best-Fit-Decreasing) into bins of capacity L
│ # output: bin assignment
└─ s4_bins_to_webdataset.py # write tar shards + idx + .nv-meta/{dataset.yaml,split.yaml,sample_loader.py}auto_pipe.sh runs all four stages sequentially on one node for one input file. To use N nodes, split the JSONL into N parts and run auto_pipe.sh independently on each — s3 BFD does NOT shard across nodes, so each node packs its own slice.
auto_pipe.sh 在一台机器上对一个输入文件顺序跑完四个 stage。要用 N 台机器就把 JSONL 切成 N 份,每台独立跑一次 auto_pipe.sh——s3 BFD 不能跨节点共享,所以每台只 pack 自己的那一份。
--shard-prefix <name>_<a|b|...> so tar files don't collide on shared NFSPackedCaptioningSample for image+text packed turns, MultiMixQASample for QA-style. The class controls the auto-generated sample_loader.py--no-npy flag: only set when JSONL has no precomputed patch_positions field. Without --no-npy s2 expects per-sample .npy files; missing files cause noisy warnings AND fall back to slow real-image tokenization<output_root>/node_<x>/webdataset/{*.tar, *.idx, .nv-meta/}Scan token lengths once on the full JSONL using s2_compute_token_lengths.py (or a quick standalone script). Pick L so that drop rate is acceptable (typically <0.1%).
# Inside container, on any single node
python offline_packing/s2_compute_token_lengths.py \
--jsonl <path/to/full.jsonl> \
--tokenizer <path/to/tokenizer> \
--image-processor Qwen2_5_VLProcessor \
--factor 48 --min-pixels 3136 --max-pixels 4000000 \
--output <path/to/token_lens.txt>
# Then quickly inspect distribution (max, p99, count > L) before committing to LTOTAL=$(wc -l < full.jsonl)
HALF=$(( (TOTAL + 1) / 2 ))
split -l $HALF -d --additional-suffix=.jsonl full.jsonl part_
# produces part_00.jsonl, part_01.jsonlFor >2 nodes, adjust -l accordingly.
Make sure the same NFS is mounted on every node at the same path so paths in JSONL and outputs match.
Use the project's standard docker image with the repo bind-mounted. Working directory should be the repo root.
On node A:
cd <repo_root>
bash offline_packing/auto_pipe.sh \
--jsonl <data_root>/part_00.jsonl \
--tokenizer <tokenizer_path> \
--image-processor Qwen2_5_VLProcessor \
--factor 48 --min-pixels 3136 --max-pixels 4000000 \
--image-root / \
--sample-class PackedCaptioningSample \
--shard-prefix <dataset_name>_a \
--output-dir <output_root>/node_a \
--seq-len 4096 \
--no-npy \
2>&1 | tee <log_dir>/node_a.logOn node B (in parallel):
bash offline_packing/auto_pipe.sh \
--jsonl <data_root>/part_01.jsonl \
... \
--shard-prefix <dataset_name>_b \
--output-dir <output_root>/node_b \
... \
2>&1 | tee <log_dir>/node_b.log[!IMPORTANT]
--shard-prefixmust differ between nodes so tar filenames don't collide--output-dirmust differ between nodes--image-root /if JSONL paths are absolute; otherwise set it to the image root prefix- Add
--no-npyif the JSONL has nopatch_positionsfield
# Tar count per node should match s4 log
ls <output_root>/node_a/webdataset/*.tar | wc -l
ls <output_root>/node_b/webdataset/*.tar | wc -l
# Bin count + capacity utilization printed by s3
grep -E "(bins|util|efficiency)" <log_dir>/node_a.log
# Inspect one tar to confirm sample schema
mkdir -p /tmp/tar_inspect && cd /tmp/tar_inspect
tar -xf <output_root>/node_a/webdataset/<prefix>-000000.tar
ls | head
python -c "import json; d=json.load(open(open(__import__('glob').glob('*.json')[0]).name)); print(list(d.keys()))"Expected JSON top-level keys for PackedCaptioningSample:
images, prompts, captions, sample_count, patch_positions, timestamp_decimal.
patch_positions=[[""]] is normal under --no-npy — the auto-generated sample_loader.py handles it via sample.get(..., None).
__module__: megatron.energon
__class__: Metadataset
splits:
train:
datasets:
- weight: <num_samples_in_part_00>
path: <output_root>/node_a/webdataset
subflavors:
augmentation: false
- weight: <num_samples_in_part_01>
path: <output_root>/node_b/webdataset
subflavors:
augmentation: falseNotes / 注意:
weight is sample-count proportional (use the original input line count of each part, not the bin count)val split only if you actually need one; for SFT-only pipelines omit itsubflavors is optional; here we mark augmentation: false since data is already packed--no-npyWithout it s2 hunts for per-sample .npy files and either spams warnings OR falls back to the slow real-image tokenization path. Always check the source JSONL for a patch_positions field first.
--shard-prefix on multiple nodesTar filenames collide on shared NFS, second node overwrites the first. Use distinct suffixes (_a, _b, _n0, _n1, …).
rm -rf still running on NFSRemoving millions of small files from NFS can take 10+ minutes. Don't wait — use a fresh _v2 output dir, and mv (atomic rename on same FS) when done if you want the original name back.
du -sh / rm -rf exceeding bash 120s timeoutRun them as nohup ... & and poll the PID, or run them in tmux.
Container time may differ from host time but wall clock is the same. Don't be confused by log timestamps when comparing across docker exec sessions.
--sample-classThe class determines the auto-generated sample_loader.py and how downstream code unpacks tars. Confirm by reading the dataclass file (e.g. aiak_training_llm/data/multimodal/flavors/packed_captioning.py) and matching its fields to your JSONL shape.
weight confusion in Metadataset yamlUse sample counts (or proportional integers), not bin counts. Energon samples each dataset proportional to weight.
For ~390k samples per node at L=4096 on a multi-core machine with NFS storage:
rm is running)--no-npy): ~5 minTwo nodes in parallel ≈ same wall time as one node, so 2× throughput.
Typical packing efficiency at L=4096 with avg ~10 samples/bin: >99% capacity utilization.
Before declaring done:
sample_count in tar JSON > 0 (not all 1; means packing actually worked)dataset.yaml exists with absolute paths and correct weightsoffline_packing/auto_pipe.sh — pipeline driveroffline_packing/s1_split_json_to_samples.py — JSONL → per-sample recordsoffline_packing/s2_compute_token_lengths.py — token length computationoffline_packing/s3_bin_packing.py — BFD bin packingoffline_packing/s4_bins_to_webdataset.py — tar + idx + .nv-meta writeraiak_training_llm/data/multimodal/flavors/packed_captioning.py — PackedCaptioningSample dataclassaiak_training_llm/data/multimodal/flavors/multi_mix_qa.py — MultiMixQASample dataclassaiak_megatron/examples/multimodal/sft_dataset.yaml — Metadataset yaml template© EvolvingLMMs-Lab, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .opencode/skills/distributed-offline-packing of EvolvingLMMs-Lab/LLaVA-OneVision-2.
Open the folder on GitHubat commit 6ef16b1
Distributed Offline Packing 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Distributed Offline Packing this skillEvolvingLMMs-Lab/LLaVA-OneVision-2 | 1.2k | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Book Video Factoryjaxxchen003/book-video-factory | 104 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Prompts CollectionNorman-bury/research-writing-skill | 3.4k | — | ~1k | Automated safety check: Pass | MIT | |
| Translation Diff ExportDevolutions/UniGetUI | 26k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Sync Translationssymfony/symfony | 31k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Translation Diff ImportDevolutions/UniGetUI | 26k | — | ~750 | Automated safety check: Pass | MIT |
jaxxchen003/book-video-factory
Create or operate a portable, auditable Chinese book-review short-video workflow from a clean local workspace.
Norman-bury/research-writing-skill
A skill your agent uses for translation, polishing, or de-AI-ification of academic text - provides ready-to-use prompt templates
Devolutions/UniGetUI
Compares UniGetUI JSON locale files against English, identifies untranslated or source-changed keys, and generates patch, reference, and handoff files for a target language.
symfony/symfony
Synchronize translation catalogs across maintained Symfony branches: find messages that newer branches added to the English catalogs but that are still missing from the oldest maintained branch…
Devolutions/UniGetUI
Merges translated key-value pairs from a UniGetUI JSON localization patch back into the full language file and validates the merged result.
Devolutions/UniGetUI
Translates a sparse UniGetUI JSON language patch, writes completed entries into the working copy, preserves placeholders and terminology, and prepares the patch for merge-back.
EvolvingLMMs-Lab/LLaVA-OneVision-2
Guide for writing clear, consistent git commit messages following this repository's conventions
EvolvingLMMs-Lab/LLaVA-OneVision-2
Bilingual guide for understanding how culengths controls attention behavior across ViT and LLM stages, and how patchpositions scope differs between the two
EvolvingLMMs-Lab/LLaVA-OneVision-2
Bilingual guide for understanding LengthPoolSortDataset cross-rank length synchronization mechanism in multi-GPU training
EvolvingLMMs-Lab/LLaVA-OneVision-2
Bilingual guide for running and interpreting LLaVA-OneVision2 HF vs Megatron consistency checks across TP and PP settings
EvolvingLMMs-Lab/LLaVA-OneVision-2
Bilingual guide for the OFFLINEPACKINGBMR and OFFLINEPACKEDDATA environment variables that control LLaVA-OneVision2 training-side packing — what each gate does, why both must be enabled together…
EvolvingLMMs-Lab/LLaVA-OneVision-2
Bilingual guide for merging ViT + LLM into LlavaOnevision2 HF checkpoint and validating weight/inference consistency
Categories
Bilingual guide for running offlinepacking/autopipe.sh across multiple nodes to produce padding-free packed WebDataset shards for SFT, with Energon Metadataset assembly. Distributed Offline Packing is an agent skill from EvolvingLMMs-Lab/LLaVA-OneVision-2.
Distributed Offline Packing fits situations like: tasks that involve Translation.
Run `npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a claude-code`. Or copy the skill folder (.opencode/skills/distributed-offline-packing in EvolvingLMMs-Lab/LLaVA-OneVision-2) into .claude/skills/distributed-offline-packing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a codex`. Or copy the skill folder (.opencode/skills/distributed-offline-packing in EvolvingLMMs-Lab/LLaVA-OneVision-2) into .agents/skills/distributed-offline-packing in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EvolvingLMMs-Lab/LLaVA-OneVision-2 --skill distributed-offline-packing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/distributed-offline-packing, .gemini/skills/distributed-offline-packing, .github/skills/distributed-offline-packing and .opencode/skills/distributed-offline-packing in your project.
Going by SKILL.md and its folder, Distributed Offline Packing needs the command-line tools its instructions call (python and bash). Our summary lists: Python 3; Docker. Compatibility (from SKILL.md): opencode.
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.
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.
Distributed Offline Packing is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Distributed Offline Packing: Book Video Factory (jaxxchen003/book-video-factory, 104 stars), Prompts Collection (Norman-bury/research-writing-skill, 3.4k stars), Translation Diff Export (Devolutions/UniGetUI, 26k stars) and Sync Translations (symfony/symfony, 31k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
EvolvingLMMs-Lab (a GitHub organization) maintains it in EvolvingLMMs-Lab/LLaVA-OneVision-2, which has 1,216 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.
Source: EvolvingLMMs-Lab/LLaVA-OneVision-2 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.