用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Aradotso/devtools-skills --skill mangasnap-oneclick-userscript命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | mangasnap-oneclick-userscript |
| description | Browser userscript for packaging manga chapters into CBZ/ZIP archives with one click |
| triggers | ["how do I use the MangaSnap OneClick userscript","install LuminaCBZ manga downloader","configure mangasnap chapter archiver","customize CBZ export naming patterns","troubleshoot manga userscript issues","batch download manga chapters as cbz","set up tampermonkey manga script","archive manga chapters offline"] |
Skill by ara.so — Devtools Skills collection.
MangaSnap-OneClick (branded as LuminaCBZ) is a browser userscript that enables one-click packaging of manga chapters into CBZ or ZIP archives for offline reading. It detects chapter boundaries, fetches all pages, and assembles them into properly named archives entirely client-side.
Install a userscript manager browser extension:
https://morethanpaper.github.io/MangaSnap-OneClick/The script exposes a global configuration object that can be customized before page load:
// Add this to Tampermonkey as a separate script, or inject via console
// Must execute BEFORE the main script loads
window.__LUMINA_CONFIG__ = {
format: 'cbz', // 'zip' or 'cbz'
parallelism: 4, // max concurrent page requests (1-8 recommended)
naming: 'seriesFirst', // 'seriesFirst' | 'numberFirst' | 'custom'
customPattern: '{series}_Chapter_{chapter}_vol_{volume}.cbz'
};
| Option | Type | Default | Description |
|---|---|---|---|
format | string | 'cbz' | Archive format: 'zip' or 'cbz' |
parallelism | number | 4 | Concurrent page downloads (1-8) |
naming | string | 'seriesFirst' | Naming convention for archives |
customPattern | string | varies | Custom filename pattern template |
Available template variables:
{series} - Series/manga title{chapter} - Chapter number{volume} - Volume number{part} - Part/section number{year} - Current year{title} - Chapter title (if available)Example patterns:
// Number first: "274_Vagabond_vol_12.cbz"
customPattern: '{chapter}_{series}_vol_{volume}.cbz'
// Verbose: "Vagabond - Chapter 274 (Volume 12) [2026].cbz"
customPattern: '{series} - Chapter {chapter} (Volume {volume}) [{year}].cbz'
// Simple: "Vagabond_274.cbz"
customPattern: '{series}_{chapter}.cbz'
For slower connections, reduce parallelism to avoid timeouts:
// In Tampermonkey dashboard, edit the script header section
// Or inject before navigation
window.__LUMINA_CONFIG__ = {
parallelism: 2 // Reduce from default 4
};
For faster connections with stable bandwidth:
window.__LUMINA_CONFIG__ = {
parallelism: 6 // Increase for faster archiving
};
If a download fails or produces incomplete archives:
// Force sequential download (slowest but most reliable)
window.__LUMINA_CONFIG__ = {
parallelism: 1
};
The script uses client-side ZIP compression. To adjust compression level (requires editing the userscript source):
// Find the compression function in the script
// Modify the compression level (0-9)
const zipOptions = {
type: 'blob',
compression: 'DEFLATE',
compressionOptions: {
level: 6 // Default: 6 (0=no compression, 9=max compression)
}
};
CBZ archives can include ComicInfo.xml metadata. To add custom metadata (requires script modification):
// Add to the archive generation function
const comicInfoXml = `<?xml version="1.0"?>
<ComicInfo>
<Title>${chapterTitle}</Title>
<Series>${seriesName}</Series>
<Number>${chapterNumber}</Number>
<Volume>${volumeNumber}</Volume>
<PageCount>${pageCount}</PageCount>
<Year>${new Date().getFullYear()}</Year>
</ComicInfo>`;
// Add to ZIP before finalizing
zip.file('ComicInfo.xml', comicInfoXml);
To add support for additional manga hosting platforms (requires forking and modifying):
// Add URL pattern matching
// @match https://newsitedomain.com/*/chapter/*
// Add site-specific selectors
const siteConfigs = {
'newsitedomain.com': {
chapterTitleSelector: '.chapter-title',
imageContainerSelector: '.manga-page img',
pageCountSelector: '.page-indicator',
nextPageSelector: '.next-page-link'
}
};
// Implement detection logic
function detectCurrentSite() {
const hostname = window.location.hostname;
return Object.keys(siteConfigs).find(domain => hostname.includes(domain));
}
Symptoms: No "Package Chapter" button visible on supported pages
Solutions:
@match patterns// Check if script loaded
console.log(window.__LUMINA_CONFIG__);
// Should output configuration object or undefined
Symptoms: CBZ/ZIP has fewer pages than expected
Solutions:
// Force pre-loading all images
window.__LUMINA_CONFIG__ = {
parallelism: 1, // Sequential loading
preloadDelay: 2000 // Wait 2s between pages (if supported)
};
Symptoms: Browser tab crashes or freezes during large chapter downloads
Solutions:
// Reduce memory footprint (if script supports)
window.__LUMINA_CONFIG__ = {
streamingMode: true, // Don't hold all pages in memory
maxCacheSize: 50 // MB limit for cache
};
Symptoms: Archives saved with generic names like "download.zip"
Solutions:
// Fallback to simple naming
window.__LUMINA_CONFIG__ = {
naming: 'custom',
customPattern: 'Chapter_{chapter}.cbz'
};
While the script is designed for single-chapter use, you can automate batch downloads:
// Run in browser console on manga series page
const chapterLinks = document.querySelectorAll('.chapter-link');
const downloadDelay = 5000; // 5 seconds between chapters
chapterLinks.forEach((link, index) => {
setTimeout(() => {
window.location.href = link.href;
// Script will auto-trigger on new page
// Use browser auto-download settings to save without prompt
}, index * downloadDelay);
});
Configure browser to auto-save to specific folder:
~/Manga/{series_name}/window.__LUMINA_CONFIG__ = {
customPattern: '{series}/{series}_Ch{chapter}.cbz'
};
Access progress programmatically (if script exposes API):
// Check if global API exists
if (window.LuminaCBZ) {
window.LuminaCBZ.onProgress((current, total) => {
console.log(`Downloaded ${current}/${total} pages`);
});
window.LuminaCBZ.onComplete((filename) => {
console.log(`Archive saved: ${filename}`);
// Trigger next action
});
}
The script runs entirely in-browser and does not use traditional environment variables. Configuration is done via JavaScript objects as shown above.
| Browser | Version | Status |
|---|---|---|
| Chrome | 90+ | ✅ Fully supported |
| Firefox | 110+ | ✅ Fully supported |
| Edge | 90+ | ✅ Fully supported |
| Safari | 16+ | ⚠️ Requires Userscripts extension |
| Opera | 84+ | ✅ Fully supported |
| Brave | 1.45+ | ✅ Fully supported |
Mobile browsers: Limited support (use Kiwi Browser or Firefox Nightly on Android)
// Use batch approach to save all chapters before delisting
// Set high-quality settings
window.__LUMINA_CONFIG__ = {
format: 'cbz',
parallelism: 3,
customPattern: '{series}_Ch{chapter}_[ARCHIVE].cbz'
};
// Optimize for e-ink devices (prefer CBZ for reader compatibility)
window.__LUMINA_CONFIG__ = {
format: 'cbz',
naming: 'seriesFirst'
};
// Include metadata for organization
window.__LUMINA_CONFIG__ = {
format: 'cbz',
customPattern: '{year}-{series}_v{volume}_ch{chapter}.cbz'
};