Update index.html
Browse files- index.html +213 -0
index.html
CHANGED
|
@@ -187,6 +187,150 @@ body {
|
|
| 187 |
padding: 32px 24px;
|
| 188 |
}
|
| 189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
/* --- Upload Section --- */
|
| 191 |
.upload-section {
|
| 192 |
display: flex;
|
|
@@ -1148,6 +1292,55 @@ body {
|
|
| 1148 |
|
| 1149 |
<!-- 主内容区 -->
|
| 1150 |
<main class="main">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1151 |
<!-- 上传区域 -->
|
| 1152 |
<section class="upload-section" id="uploadSection">
|
| 1153 |
<div class="upload-area" id="uploadArea">
|
|
@@ -2398,6 +2591,26 @@ function csvEsc(str) {
|
|
| 2398 |
// =================== 初始化 ===================
|
| 2399 |
initAISettings();
|
| 2400 |
updateModelSelectStatus();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2401 |
|
| 2402 |
// =================== 上传功能 ===================
|
| 2403 |
dom.uploadArea.addEventListener('click', function(e) {
|
|
|
|
| 187 |
padding: 32px 24px;
|
| 188 |
}
|
| 189 |
|
| 190 |
+
/* --- Intro Section --- */
|
| 191 |
+
.intro-section {
|
| 192 |
+
margin-bottom: 24px;
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
.intro-card {
|
| 196 |
+
background: var(--bg-card);
|
| 197 |
+
border: 1px solid var(--border);
|
| 198 |
+
border-radius: var(--radius-lg);
|
| 199 |
+
box-shadow: var(--shadow-sm);
|
| 200 |
+
overflow: hidden;
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
.intro-header {
|
| 204 |
+
display: flex;
|
| 205 |
+
align-items: center;
|
| 206 |
+
gap: 12px;
|
| 207 |
+
padding: 16px 24px;
|
| 208 |
+
border-bottom: 1px solid var(--border-light);
|
| 209 |
+
cursor: pointer;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
.intro-header:hover {
|
| 213 |
+
background: var(--bg-hover);
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
.intro-icon {
|
| 217 |
+
color: var(--primary);
|
| 218 |
+
display: flex;
|
| 219 |
+
align-items: center;
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
.intro-titles h2 {
|
| 223 |
+
font-size: 1rem;
|
| 224 |
+
font-weight: 600;
|
| 225 |
+
color: var(--text-primary);
|
| 226 |
+
flex: 1;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
.intro-divider {
|
| 230 |
+
color: var(--text-muted);
|
| 231 |
+
font-weight: 300;
|
| 232 |
+
margin: 0 4px;
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
.intro-toggle {
|
| 236 |
+
margin-left: auto;
|
| 237 |
+
padding: 4px 8px;
|
| 238 |
+
transition: transform var(--transition);
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
.intro-toggle.collapsed svg {
|
| 242 |
+
transform: rotate(-90deg);
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
.intro-body {
|
| 246 |
+
padding: 20px 24px 24px;
|
| 247 |
+
transition: all 0.3s ease;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
.intro-body.collapsed {
|
| 251 |
+
display: none;
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
.intro-columns {
|
| 255 |
+
display: grid;
|
| 256 |
+
grid-template-columns: 1fr 1fr;
|
| 257 |
+
gap: 32px;
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
.intro-col h4 {
|
| 261 |
+
font-size: 0.9rem;
|
| 262 |
+
font-weight: 600;
|
| 263 |
+
color: var(--text-secondary);
|
| 264 |
+
margin-bottom: 8px;
|
| 265 |
+
letter-spacing: 0.02em;
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
.intro-col p {
|
| 269 |
+
font-size: 0.875rem;
|
| 270 |
+
color: var(--text-secondary);
|
| 271 |
+
line-height: 1.7;
|
| 272 |
+
margin-bottom: 10px;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
.intro-col p strong {
|
| 276 |
+
color: var(--primary);
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
.intro-col ul {
|
| 280 |
+
list-style: none;
|
| 281 |
+
padding: 0;
|
| 282 |
+
display: flex;
|
| 283 |
+
flex-direction: column;
|
| 284 |
+
gap: 4px;
|
| 285 |
+
}
|
| 286 |
+
|
| 287 |
+
.intro-col ul li {
|
| 288 |
+
font-size: 0.85rem;
|
| 289 |
+
color: var(--text-secondary);
|
| 290 |
+
line-height: 1.6;
|
| 291 |
+
padding-left: 4px;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
.intro-models {
|
| 295 |
+
margin-top: 16px;
|
| 296 |
+
padding-top: 16px;
|
| 297 |
+
border-top: 1px solid var(--border-light);
|
| 298 |
+
display: flex;
|
| 299 |
+
align-items: center;
|
| 300 |
+
gap: 8px;
|
| 301 |
+
flex-wrap: wrap;
|
| 302 |
+
}
|
| 303 |
+
|
| 304 |
+
.intro-models-label {
|
| 305 |
+
font-size: 0.8rem;
|
| 306 |
+
color: var(--text-muted);
|
| 307 |
+
font-weight: 500;
|
| 308 |
+
}
|
| 309 |
+
|
| 310 |
+
.intro-model-tag {
|
| 311 |
+
font-size: 0.75rem;
|
| 312 |
+
padding: 3px 12px;
|
| 313 |
+
border-radius: 20px;
|
| 314 |
+
font-weight: 500;
|
| 315 |
+
}
|
| 316 |
+
|
| 317 |
+
.intro-model-tag.sf {
|
| 318 |
+
background: #EDE9FE;
|
| 319 |
+
color: #7C3AED;
|
| 320 |
+
}
|
| 321 |
+
|
| 322 |
+
.intro-model-tag.gemini {
|
| 323 |
+
background: #DBEAFE;
|
| 324 |
+
color: #2563EB;
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
@media (max-width: 768px) {
|
| 328 |
+
.intro-columns {
|
| 329 |
+
grid-template-columns: 1fr;
|
| 330 |
+
gap: 20px;
|
| 331 |
+
}
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
/* --- Upload Section --- */
|
| 335 |
.upload-section {
|
| 336 |
display: flex;
|
|
|
|
| 1292 |
|
| 1293 |
<!-- 主内容区 -->
|
| 1294 |
<main class="main">
|
| 1295 |
+
<!-- 工具介绍 -->
|
| 1296 |
+
<section class="intro-section" id="introSection">
|
| 1297 |
+
<div class="intro-card">
|
| 1298 |
+
<div class="intro-header">
|
| 1299 |
+
<div class="intro-icon">
|
| 1300 |
+
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg>
|
| 1301 |
+
</div>
|
| 1302 |
+
<div class="intro-titles">
|
| 1303 |
+
<h2>关于本工具 <span class="intro-divider">|</span> About This Tool</h2>
|
| 1304 |
+
</div>
|
| 1305 |
+
<button class="btn btn-ghost btn-sm intro-toggle" id="introToggle" title="收起/展开">
|
| 1306 |
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
|
| 1307 |
+
</button>
|
| 1308 |
+
</div>
|
| 1309 |
+
<div class="intro-body" id="introBody">
|
| 1310 |
+
<div class="intro-columns">
|
| 1311 |
+
<div class="intro-col">
|
| 1312 |
+
<h4>🇨🇳 中文</h4>
|
| 1313 |
+
<p><strong>Scene Asset Analyzer</strong> 是一款基于 AI 视觉模型的游戏场景3D资产分析工具。上传游戏场景截图后,AI 将以资深场景美术的视角自动识别截图中的所有3D资产,并提供:</p>
|
| 1314 |
+
<ul>
|
| 1315 |
+
<li>📦 资产清单(含中英文命名)</li>
|
| 1316 |
+
<li>📐 资产在原图中的精确定位标注</li>
|
| 1317 |
+
<li>⏱️ 每项资产的预估制作人天</li>
|
| 1318 |
+
<li>📝 专业的制作注意事项与建议</li>
|
| 1319 |
+
<li>📥 一键导出 Excel(含截图)/ CSV</li>
|
| 1320 |
+
</ul>
|
| 1321 |
+
</div>
|
| 1322 |
+
<div class="intro-col">
|
| 1323 |
+
<h4>🌐 English</h4>
|
| 1324 |
+
<p><strong>Scene Asset Analyzer</strong> is an AI-powered tool for analyzing 3D assets in game scene screenshots. Upload your scene screenshots and AI will automatically identify all 3D assets from a senior environment artist's perspective, providing:</p>
|
| 1325 |
+
<ul>
|
| 1326 |
+
<li>📦 Asset inventory with bilingual naming</li>
|
| 1327 |
+
<li>📐 Precise location annotation on original images</li>
|
| 1328 |
+
<li>⏱️ Estimated production time (man-days) per asset</li>
|
| 1329 |
+
<li>📝 Professional production notes & suggestions</li>
|
| 1330 |
+
<li>📥 One-click export to Excel (with images) / CSV</li>
|
| 1331 |
+
</ul>
|
| 1332 |
+
</div>
|
| 1333 |
+
</div>
|
| 1334 |
+
<div class="intro-models">
|
| 1335 |
+
<span class="intro-models-label">支持模型 Supported Models:</span>
|
| 1336 |
+
<span class="intro-model-tag sf">Qwen3-VL-32B</span>
|
| 1337 |
+
<span class="intro-model-tag gemini">Gemini 3 Flash</span>
|
| 1338 |
+
<span class="intro-model-tag gemini">Gemini 3 Pro</span>
|
| 1339 |
+
</div>
|
| 1340 |
+
</div>
|
| 1341 |
+
</div>
|
| 1342 |
+
</section>
|
| 1343 |
+
|
| 1344 |
<!-- 上传区域 -->
|
| 1345 |
<section class="upload-section" id="uploadSection">
|
| 1346 |
<div class="upload-area" id="uploadArea">
|
|
|
|
| 2591 |
// =================== 初始化 ===================
|
| 2592 |
initAISettings();
|
| 2593 |
updateModelSelectStatus();
|
| 2594 |
+
initIntroToggle();
|
| 2595 |
+
|
| 2596 |
+
// =================== 工具介绍收起/展开 ===================
|
| 2597 |
+
function initIntroToggle() {
|
| 2598 |
+
var toggleBtn = $('#introToggle');
|
| 2599 |
+
var introBody = $('#introBody');
|
| 2600 |
+
if (!toggleBtn || !introBody) return;
|
| 2601 |
+
var header = toggleBtn.closest('.intro-header');
|
| 2602 |
+
var collapsed = localStorage.getItem('intro_collapsed') === 'true';
|
| 2603 |
+
if (collapsed) {
|
| 2604 |
+
introBody.classList.add('collapsed');
|
| 2605 |
+
toggleBtn.classList.add('collapsed');
|
| 2606 |
+
}
|
| 2607 |
+
function toggle() {
|
| 2608 |
+
var isCollapsed = introBody.classList.toggle('collapsed');
|
| 2609 |
+
toggleBtn.classList.toggle('collapsed');
|
| 2610 |
+
localStorage.setItem('intro_collapsed', isCollapsed);
|
| 2611 |
+
}
|
| 2612 |
+
if (header) header.addEventListener('click', toggle);
|
| 2613 |
+
}
|
| 2614 |
|
| 2615 |
// =================== 上传功能 ===================
|
| 2616 |
dom.uploadArea.addEventListener('click', function(e) {
|