${this.renderMetricRow('Total', fmtNs(m.total), true)}
File Counts
Added
${m.added}
Updated
${m.updated}
Skipped
${m.skipped}
Removed
${m.removed}
${this.hasRescanPhases
? html`
Clear Phases
${this.renderMetricRow('Clear Queue', fmtNs(m.clearQueue))}
${this.renderMetricRow('Clear Database', fmtNs(m.clearDatabase))}
${this.renderMetricRow('Clear Cover Files', fmtNs(m.clearCoverFiles))}
`
: nothing}
${this.renderMetricRow('Load Existing Files', fmtNs(m.loadExisting))}
${this.renderMetricRow('Directory Walk', fmtNs(m.walkDuration))}
Metadata Extraction
—
${fmtNs(m.extractionWallClock)}
wall-clock
Per-format and per-operation times
are cumulative across
${Object.values(
m.formatCount ?? {},
).reduce(
(a, b) => a + b,
0,
)}
files
${formatEntries.length > 0
? html`
By Format
${formatEntries.map(
([ext, ms]) =>
this.renderMetricRow(
`${ext} (${m.formatCount?.[ext] ?? 0} files)`,
fmtMs(ms),
),
)}
`
: nothing}
By Operation
${this.renderMetricRow('Tag Extraction', fmtNs(m.tagExtraction))}
${this.renderMetricRow('Duration Extraction', fmtNs(m.durationExtraction))}
Database Writes —
${fmtNs(m.dbWritesWallClock)}
wall-clock
${this.renderMetricRow('Batch Commits', fmtNs(m.batchCommits))}
${this.renderMetricRow('Pure DB Operations', fmtNs(pureDb))}
${this.renderMetricRow('Save Cover Originals', fmtNs(m.coverArtSave))}
Thumbnail Generation —
${fmtNs(m.thumbnailWallClock)}
wall-clock
Generated concurrently; cumulative
CPU time may exceed wall-clock
${this.renderMetricRow('Cumulative CPU Time', fmtNs(m.thumbnailGeneration))}
${this.renderMetricRow('Small (_sm)', fmtNs(m.thumbnailSmall))}
${this.renderMetricRow('Medium (_md)', fmtNs(m.thumbnailMedium))}
${this.renderMetricRow('Large (_lg)', fmtNs(m.thumbnailLarge))}
${this.renderMetricRow('Orphan Cleanup', fmtNs(m.orphanCleanup))}
${this.renderMetricRow('Post-Scan Variants', fmtNs(m.postScanVariants))}
`;
}
override render() {
return html`
Scan Settings
Choose how the scanner reads files.
Auto-detect reads the disk type
automatically. Select HDD if your music
is on a spinning disk, or SSD for
solid-state storage.
Storage Type
Auto-detect
SSD (max parallelism)
HDD (reduced I/O)
Scan Actions
Soft scan finds new files, skips existing
ones, and removes orphaned entries. Full
rescan clears the entire database and
cover art cache, then re-imports
everything.
${this.scanning
? 'Scanning...'
: 'Soft Scan'}
${this.scanning
? 'Scanning...'
: 'Full Rescan'}