{ "manifest": { "app": { "name": "Spine Thumbnails" } }, "thumb": { "title": "Spine Thumbnails", "noticeIntro": "After importing Spine assets (.skel / .json + .atlas + textures), this plugin creates a skeleton preview for items that do not yet have a custom thumbnail.", "noticeSafety": "Only newly imported items are processed. Existing items are not scanned or changed, and custom thumbnails are never overwritten.", "noticeModes": "Animated uses the first animation and exports WebP. Still always uses the setup pose.", "noticeDefault": "Automatic generation is off by default. Enable it below when needed.", "autoToggle": "Generate thumbnails on import", "clear": "Clear log", "modeLabel": "Generation mode", "modeAnimated": "Animated (first animation)", "modeStatic": "Still (setup pose)", "strategyLabel": "Strategy", "strategySize": "Smallest file (slow)", "strategySpeed": "Fastest (quick)", "statusLabel": "Status", "statusStarting": "Starting…", "libraryLabel": "Library", "statsLabel": "Statistics", "filterAll": "All", "filterOk": "Success", "filterFail": "Failed", "filterWarn": "Warning", "filterError": "Error", "unknownError": "Unknown error", "scriptError": "Script error: {error}", "promiseError": "Unhandled Promise error: {error}", "uncategorized": "Uncategorized", "reasonQuiet": "quiet", "reasonFallback": "fallback scan", "none": "none", "complete": "complete", "incomplete": "incomplete", "statusLoaded": "Script {version} loaded; waiting for Eagle events…", "statusEagleMissing": "Eagle API not available", "statusListening": "Watching", "statusListenFailed": "Watch failed", "statusAutoOff": "Watching (automatic generation off)", "statusNoLibrary": "Library path unavailable", "statusPairing": "Pairing new assets…", "statusPairingProgress": "Pairing {current}/{total}", "statusRendering": "Rendering frame {current}/{total} ({queued} queued)", "statusGenerating": "Generating thumbnails… {queued} remaining", "statusPaused": "Paused (resume or cancel in the progress window)", "statusAutoSkipped": "Automatic generation is off; this batch was skipped", "statusStartFailed": "Startup failed: {error}", "stats": "Batches {batches} · Added {added} · Spine {spine} · Complete {complete} · Generated {generated} · Skipped {skipped} · Failed {failed}", "modulesMissing": "Local modules not loaded: {modules}", "moduleLoadError": "Local modules were not loaded. Check the script order in index.html: {modules}", "version": "Plugin code version {version}", "pluginCreated": "Plugin created: {name}", "settingsReadFailed": "Failed to read settings; using defaults (automatic generation off): {error}", "settingsSaveFailed": "Failed to save settings: {error}", "autoEnabled": "Automatic generation enabled. Newly imported Spine assets will receive thumbnails.", "autoDisabled": "Automatic generation disabled; the pending queue was cleared.", "modeStaticLog": "Generation mode: still (setup pose, PNG)", "modeAnimatedLog": "Generation mode: animated (first animation as WebP; setup pose if no animation exists)", "strategySpeedLog": "Strategy: fastest (estimate profiles and render only the smallest one or two)", "strategySizeLog": "Strategy: smallest file (render all ten profiles and keep the smallest result)", "missingItem": "Skipped {label}: item not found in Eagle", "suffixFixed": "Fixed compound suffix for {label} → {name}", "suffixFailed": "Failed to fix compound suffix for {label}: {error}", "existingThumbnail": "Skipped {label}: a custom thumbnail already exists", "thumbnailRejected": "Eagle rejected this thumbnail", "generated": "Generated {label} | {details} | Spine {version}", "generateFailed": "Generation failed for {label}: {error}", "cancelled": "Generation cancelled: discarded {dropped} pending items. Completed {done} (success {generated}, failed {failed}, skipped {skipped})", "batchFailed": "Failed to process import batch: {error}", "batchFinished": "Batch finished: {added} added, {total} in library ({reason})", "recheck": "Rechecking {count} previously incomplete assets", "noSpine": "No Spine assets in this batch", "incompletePending": "{count} assets are incomplete and will be rechecked after later imports", "incompleteIgnored": "{count} assets are incomplete and were not processed", "itemSummary": " {name} | {path} | {state} | skeleton {skeleton} | atlas {atlas} | pages {pages} (missing {missing})", "autoSkipped": "Automatic generation is off; skipped {count} assets in this batch", "queued": "Queued {added}; {queued} waiting{state}", "queuedRunning": " (processing)", "libraryInfoNoPath": "library.info() did not return a path: {info}", "libraryInfoFailed": "library.info() failed: {error}", "switchingLibrary": "Switching library: {path}", "noCreateEvent": "No plugin-create event received; trying to start directly", "watching": "Watching {path} ({count} existing items treated as history)", "watchReadFailed": "Failed to read the asset directory: {error}", "watchMissingDir": "Asset directory does not exist: {path}", "watchFailed": "Failed to start watching: {error}", "fixSuffixAction": "Fixing compound suffix for {label}", "renderAction": "Rendering {label}", "setThumbnailAction": "Setting thumbnail for {label}", "thumbnailDetailsAnimated": "Animated {size}@{fps}fps/q{quality}/{kb}KB (target {target}KB)/{frames} frames/animation {animation}/{strategy}{limit}", "thumbnailDetailsStatic": "Still {width}×{height}/{kb}KB{fallback}", "bestSpeed": "fastest", "bestSize": "smallest file", "fallbackNote": " ({text})", "fallbackNoAnimation": "the skeleton has no animations", "fallbackAnimatedFailed": "animated generation failed: {error}", "limitNote": " (the smallest profile still exceeds the target; consider a larger thumbnail size)", "runSummary": "{generated} succeeded, {failed} failed, {skipped} skipped in {seconds} seconds." }, "progress": { "title": "Spine Thumbnails", "generating": "Generating animated thumbnails…", "waiting": "Waiting to start…", "confirmPrompt": "Cancel this run?", "resume": "Continue", "cancel": "Confirm cancel", "stop": "Stop", "confirm": "Done", "generatedConfirm": "{done} thumbnails generated. Cancel this run?", "complete": "Complete", "completed": "Completed {done} / {total} ({percent}%)" } }