Files
SpineViewer/release/SpineThumbnailGenerateServer站点/index.html
T
2026-10-29 11:57:42 +08:00

385 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SpineThumbnails — Eagle 插件 · Spine 导出资源缩略图自动生成</title>
<meta name="description" content="SpineThumbnails 是一款用于 Eagle 的 Spine 缩略图自动生成插件。自动识别并配对 Spine 骨骼、Atlas 与贴图,支持 3.4–4.3、静态 PNG、动态 WebP、进度控制与八种界面语言。">
<meta property="og:title" content="SpineThumbnails — Eagle 插件">
<meta property="og:description" content="识别、配对、渲染一次完成。为 Eagle 中的 Spine 导出资源自动生成静态或动态缩略图。">
<meta property="og:type" content="website">
<meta property="og:image" content="assets/promo-banner.jpg">
<meta name="theme-color" content="#16161b">
<link rel="icon" href="assets/logo.png">
<link rel="stylesheet" href="style.css">
<noscript><style>.reveal { opacity: 1; transform: none; }</style></noscript>
<script>
try {
var savedTheme = localStorage.getItem('stg-site-theme');
document.documentElement.dataset.theme = savedTheme || 'dark';
} catch (error) {}
</script>
</head>
<body>
<header class="topbar">
<div class="wrap topbar-inner">
<a class="brand" href="#top">
<img src="assets/logo.png" alt="SpineThumbnails 图标" width="30" height="30">
<span class="brand-name">SpineThumbnails</span>
<span class="brand-ver">v1.0.0</span>
</a>
<nav class="nav" aria-label="页面导航">
<a href="#features">功能特性</a>
<a href="#safety">安全机制</a>
<a href="#workflow">生成流程</a>
<a href="#versions">支持版本</a>
<a href="#install">安装使用</a>
</nav>
<div class="topbar-actions">
<button class="icon-btn" id="themeToggle" type="button" aria-label="切换深浅主题" title="切换深浅主题">
<svg class="icon-sun" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4.2"/><path d="M12 2.5v2.4M12 19.1v2.4M2.5 12h2.4M19.1 12h2.4M5.2 5.2l1.7 1.7M17.1 17.1l1.7 1.7M18.8 5.2l-1.7 1.7M6.9 17.1l-1.7 1.7"/></svg>
<svg class="icon-moon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 14.2A8.2 8.2 0 0 1 9.8 4a8.4 8.4 0 1 0 10.2 10.2z"/></svg>
</button>
<a class="btn btn-primary btn-sm" href="https://community-cn.eagle.cool/plugins?search=Spine%E7%BC%A9%E7%95%A5%E5%9B%BE" target="_blank" rel="noopener">获取插件</a>
</div>
</div>
</header>
<main id="top">
<section class="hero">
<div class="hero-glow" aria-hidden="true"></div>
<div class="wrap hero-grid">
<div class="hero-copy">
<span class="pill"><i class="dot" aria-hidden="true"></i>Eagle 插件 · 自动资源配对</span>
<h1>导入完成,<br><span class="grad">缩略图自动就位</span></h1>
<p class="hero-sub">
SpineThumbnails 识别 Eagle 中导入的 Spine 骨骼、Atlas 与贴图,
自动跨 item 文件夹完成配对,再按你的设置生成静态 PNG 或动态 WebP 缩略图。
从版本识别到渲染、写入、进度反馈,一次完成。
</p>
<div class="hero-cta">
<a class="btn btn-primary" href="https://community-cn.eagle.cool/plugins?search=Spine%E7%BC%A9%E7%95%A5%E5%9B%BE" target="_blank" rel="noopener">前往插件页</a>
<a class="link-arrow" href="#workflow">了解工作流程 →</a>
</div>
<ul class="stats">
<li><b>9</b><span>Spine 版本<br>3.4 – 4.3</span></li>
<li><b>2</b><span>缩略图模式<br>静态 / 动态</span></li>
<li><b>8</b><span>界面语言<br>简繁英日韩俄西德</span></li>
</ul>
</div>
<div class="hero-visual">
<figure class="shot shot-hero reveal">
<img class="zoomable" src="assets/ui-main.jpg" alt="SpineThumbnails 插件主界面:自动生成开关、生成方式、策略、状态、统计与分类日志" width="1560" height="1296">
<figcaption>SpineThumbnails 1.0.0 · 插件主界面</figcaption>
</figure>
<div class="badge-chip reveal">
<img src="assets/logo.png" alt="" width="24" height="24">
<span>首次使用默认关闭自动生成,只有主动开启后才会处理新导入的素材。</span>
</div>
</div>
</div>
<div class="wrap">
<ul class="file-chips" aria-label="可识别的 Spine 资源类型">
<li class="chip chip-on">json</li>
<li class="chip chip-on">skel</li>
<li class="chip chip-on">skel.bytes</li>
<li class="chip chip-on">atlas</li>
<li class="chip chip-on">atlas.txt</li>
<li class="chip chip-off">png / jpg / webp · 用于 atlas 贴图配对</li>
</ul>
</div>
</section>
<section class="safety-band" id="safety">
<div class="wrap">
<div class="safety-head reveal">
<span class="kicker">SAFE BY DEFAULT</span>
<h2>默认关闭,只处理新导入</h2>
<p>缩略图会写入 Eagle 素材卡片,因此在首次使用时需要明确打开自动生成开关。</p>
</div>
<ul class="safety-grid">
<li class="reveal">
<span class="safety-mark">01</span>
<strong>不扫描历史素材</strong>
<p>插件从启用后的新导入批次开始监听,不会回头批量修改已有素材。</p>
</li>
<li class="reveal">
<span class="safety-mark">02</span>
<strong>不覆盖自定义缩略图</strong>
<p>检测到素材已有自定义缩略图时直接跳过,并把结果记录在分类日志中。</p>
</li>
<li class="reveal">
<span class="safety-mark">03</span>
<strong>配置独立保存</strong>
<p>设置写入 Eagle 用户数据目录,不修改素材 <code>metadata.json</code>、标签或注释。</p>
</li>
</ul>
</div>
</section>
<section class="section" id="features">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">FEATURES</span>
<h2>导入之后,剩下交给插件</h2>
<p class="section-lead">不是只会渲染一张图:资源发现、跨目录配对、版本切换、编码搜索和写入反馈都在同一个后台流程里完成。</p>
</div>
<div class="features">
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M9 15l6-6"/><path d="M10.5 6.6L12.1 5a4 4 0 0 1 5.7 5.7l-1.6 1.6"/><path d="M13.5 17.4L11.9 19a4 4 0 0 1-5.7-5.7l1.6-1.6"/></svg></div>
<h3>跨文件夹自动配对</h3>
<p>Eagle 会把每个导入文件拆成独立 item 文件夹。插件按文件名与尾缀规则关联骨骼、atlas 和贴图,即使它们分散在不同目录也能组成一套资源。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="16" rx="3"/><path d="M7 9h10M7 13h6"/><circle cx="17" cy="15" r="2.2"/></svg></div>
<h3>静态与动态两种输出</h3>
<p>静态模式固定使用 setup pose 输出 PNG;动态模式读取骨骼中的第一个动画,逐帧渲染后封装为轻量 WebP。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M4 18V9M10 18V5M16 18v-7M22 18V3"/><path d="M2 18h22"/></svg></div>
<h3>体积与速度双策略</h3>
<p>“最优体积”生成十个候选档位并保留最小结果;“最优速度”先粗估再只渲染最有希望的一两档,适合大批量导入。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M6 3.5v11"/><circle cx="18" cy="6" r="2.6"/><circle cx="6" cy="17.5" r="2.6"/><path d="M18 8.6a9 9 0 0 1-9 8.9"/></svg></div>
<h3>9 个运行版本</h3>
<p>从 JSON 版本字段或 SKEL 二进制头部识别 Spine 版本,自动匹配 3.4–4.3 对应的本地运行时。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M4 5h16v14H4z"/><path d="M8 9h8M8 13h5"/><path d="M16 15l2 2 3-4"/></svg></div>
<h3>批次串行处理</h3>
<p>一次只渲染一个素材,避免批量导入时把 Eagle 卡住。后续批次自动排队,进度窗口会同步总数与剩余数量。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M10 8.4l6 3.6-6 3.6z"/></svg></div>
<h3>暂停、继续与取消</h3>
<p>大批量动态生成时自动显示进度窗口。可暂停当前队列、继续执行,或取消剩余任务并保留已经完成的结果。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M5 5h14v14H5z"/><path d="M8 9h8M8 13h8M8 17h5"/></svg></div>
<h3>分类日志</h3>
<p>成功、失败、警告和错误可分别筛选。每条记录包含素材名、Eagle 文件夹、骨架、atlas 与贴图齐全情况。</p>
</article>
<article class="feature-card reveal">
<div class="f-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a15 15 0 0 1 0 18M12 3a15 15 0 0 0 0 18"/></svg></div>
<h3>八种界面语言</h3>
<p>跟随 Eagle 当前语言显示简体中文、繁体中文、英文、日文、韩文、俄文、西班牙文或德文界面。</p>
</article>
</div>
</div>
</section>
<section class="section alt" id="workflow">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">WORKFLOW</span>
<h2>从导入到缩略图</h2>
<p class="section-lead">首次打开自动生成后,后续新导入的 Spine 素材会沿同一条串行流程处理。</p>
</div>
<ol class="steps">
<li class="step reveal">
<span class="step-num">01</span>
<h3>发现新素材</h3>
<p>监听 Eagle 素材库目录,在导入批次稳定后读取新增 item,历史素材不会进入队列。</p>
</li>
<li class="step reveal">
<span class="step-num">02</span>
<h3>配对与检查</h3>
<p>关联骨骼、atlas 和贴图,检查版本、复合后缀、贴图数量以及是否已有自定义缩略图。</p>
</li>
<li class="step reveal">
<span class="step-num">03</span>
<h3>渲染缩略图</h3>
<p>加载匹配运行时,按静态或动态模式绘制画布。动态模式继续搜索满足目标体积的编码参数。</p>
</li>
<li class="step reveal">
<span class="step-num">04</span>
<h3>写入与反馈</h3>
<p>通过 Eagle 官方接口写入自定义缩略图,并同步更新统计、分类日志与进度窗口。</p>
</li>
</ol>
</div>
</section>
<section class="section alt" id="modes">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">OUTPUT</span>
<h2>按素材用途选择输出</h2>
<p class="section-lead">两种模式共用同一套资源识别与安全检查,只在最终渲染阶段不同。</p>
</div>
<div class="mode-grid">
<article class="mode-card reveal">
<div class="mode-visual static" aria-hidden="true">
<span class="pose-ring"></span>
<span class="pose-bone b1"></span>
<span class="pose-bone b2"></span>
<span class="pose-bone b3"></span>
<span class="mode-file">PNG</span>
</div>
<div class="mode-copy">
<span class="mode-label">STATIC</span>
<h3>静帧 · setup pose</h3>
<p>始终生成一个稳定的 default 姿势,适合需要明确默认形象、动画首帧不适合作为封面的素材。</p>
<ul>
<li>输出格式:PNG</li>
<li>渲染内容:setup pose</li>
<li>速度:更快,结果稳定</li>
</ul>
</div>
</article>
<article class="mode-card reveal">
<div class="mode-visual animated" aria-hidden="true">
<span class="motion-dot d1"></span>
<span class="motion-dot d2"></span>
<span class="motion-dot d3"></span>
<span class="motion-line"></span>
<span class="mode-file">WEBP</span>
</div>
<div class="mode-copy">
<span class="mode-label">ANIMATED</span>
<h3>动态 · 首个动画</h3>
<p>读取骨骼中的第一个动画,采样帧后封装为动态 WebP,让素材卡片直接呈现动作状态。</p>
<ul>
<li>输出格式:动画 WebP</li>
<li>渲染内容:第一个动画</li>
<li>速度:更慢,需搜索编码档位</li>
</ul>
</div>
</article>
</div>
</div>
</section>
<section class="section" id="versions">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">SUPPORTED</span>
<h2>覆盖 Spine 3.4 – 4.3</h2>
<p class="section-lead">支持 JSON、SKEL、SKEL.BYTES、ATLAS 与 ATLAS.TXT,使用与皮肤和约束相匹配的本地运行时渲染。</p>
</div>
<ul class="v-chips reveal" aria-label="支持的 Spine 版本">
<li>3.4</li><li>3.5</li><li>3.6</li><li>3.7</li><li class="sep" aria-hidden="true">·</li>
<li>3.8</li><li>4.0</li><li>4.1</li><li>4.2</li><li>4.3</li>
</ul>
<div class="v-table-wrap reveal">
<table class="v-table">
<thead>
<tr><th>版本</th><th>骨骼输入</th><th>渲染说明</th></tr>
</thead>
<tbody>
<tr>
<td><code>3.4</code> / <code>3.5</code></td>
<td>JSON · SKEL · SKEL.BYTES</td>
<td>使用独立版本运行时和匹配的二进制解析分支,保留网格、权重、变形、约束与绘制顺序。</td>
</tr>
<tr>
<td><code>3.6</code> / <code>3.7</code></td>
<td>JSON · SKEL · SKEL.BYTES</td>
<td>通过官方同版本 <code>SkeletonBinary</code> 兼容层解析,无需额外导入 JSON。</td>
</tr>
<tr>
<td><code>3.8</code> – <code>4.3</code></td>
<td>JSON · SKEL · SKEL.BYTES</td>
<td>读取数据版本并加载对应运行时;4.x 的物理约束、裁剪和染色能力由运行时处理。</td>
</tr>
</tbody>
</table>
</div>
<ul class="chips reveal" aria-label="附加支持">
<li>复合后缀 <code>skel.bytes</code></li>
<li>复合后缀 <code>atlas.txt</code></li>
<li>PMA 贴图</li>
<li>多皮肤骨骼</li>
<li>动态 WebP</li>
<li>进度暂停与取消</li>
<li>八种界面语言</li>
</ul>
</div>
</section>
<section class="section alt" id="install">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">GET STARTED</span>
<h2>安装后只需打开一次开关</h2>
<p class="section-lead">插件不会在默认状态下自动写入缩略图。先在控制面板开启“导入时自动生成缩略图”,再导入新的 Spine 资源。</p>
</div>
<a class="dl-cta reveal" href="https://community-cn.eagle.cool/plugins?search=Spine%E7%BC%A9%E7%95%A5%E5%9B%BE" target="_blank" rel="noopener">
<span class="dl-cta-info">
<span class="dl-os">EAGLE PLUGIN COMMUNITY</span>
<strong>在 Eagle 插件社区获取 SpineThumbnails</strong>
<span class="dl-meta">搜索“Spine缩略图”,或直接打开 Eagle 插件社区。</span>
</span>
<span class="btn btn-primary">前往插件页 →</span>
</a>
<ol class="install-steps reveal">
<li>
<h3>安装并打开插件</h3>
<p>在 Eagle 中安装插件,打开 SpineThumbnails 控制面板。</p>
</li>
<li>
<h3>启用自动生成</h3>
<p>打开“导入时自动生成缩略图”,选择动态或静态模式,以及最优体积或最优速度策略。</p>
</li>
<li>
<h3>导入整套资源</h3>
<p>把骨骼、atlas 和贴图导入 Eagle。插件会只针对本次新导入的素材自动处理。</p>
</li>
</ol>
<aside class="callout reveal">
<strong>第一次使用为什么没有自动生成?</strong>
<p>自动生成默认关闭,避免未经确认就批量修改缩略图。开启后只处理之后新导入的素材,不会追溯历史内容。</p>
</aside>
</div>
</section>
<section class="section" id="faq">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">FAQ</span>
<h2>常见问题</h2>
</div>
<div class="faq">
<details class="reveal">
<summary>插件会覆盖我已经设置好的缩略图吗?</summary>
<p>不会。检测到素材已有自定义缩略图时会跳过并记录日志。插件只通过 Eagle 官方接口设置当前新素材的缩略图。</p>
</details>
<details class="reveal">
<summary>为什么历史素材没有自动处理?</summary>
<p>这是默认安全行为。插件只处理启用后新导入的素材,不扫描、不修改历史素材,避免一次开关造成全素材库批量变更。</p>
</details>
<details class="reveal">
<summary>资源没有同时导入会怎样?</summary>
<p>配套不全的素材会记为待观察。后续批次补齐 atlas 或贴图后,插件会重新检查并继续处理。</p>
</details>
<details class="reveal">
<summary>动态缩略图为什么比静态慢?</summary>
<p>动态模式需要渲染多个动画帧,还要在分辨率、帧率、质量和目标体积之间寻找合适档位。选择“最优速度”会减少实际生成的候选数量。</p>
</details>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="wrap footer-inner">
<div class="foot-brand">
<img src="assets/logo.png" alt="" width="34" height="34">
<div>
<strong>SpineThumbnails</strong>
<span>Eagle 插件 · v1.0.0</span>
</div>
</div>
</div>
</footer>
<div class="lightbox" id="lightbox" hidden>
<img alt="放大查看插件界面截图">
</div>
<script src="app.js"></script>
</body>
</html>