| 1234567891011121314151617181920212223242526272829 |
- // 去重:同一 AI 底图的多份副本只保留最高分辨率一份,其余删除并在索引留痕
- import { readFileSync, writeFileSync, unlinkSync } from 'node:fs'
- import { join } from 'node:path'
- const dir = '.scratch/lanhu-cockpit-asset-replacement/design-archive'
- const idx = JSON.parse(readFileSync(join(dir, 'index.json'), 'utf8'))
- const baseMaps = idx.files.filter((f) => f.layer && f.layer.includes('ChatGPT Image'))
- baseMaps.sort((a, b) => b.bytes - a.bytes)
- const keep = baseMaps[0]
- const dropped = []
- for (const f of baseMaps) {
- if (f === keep) continue
- unlinkSync(join(dir, f.local))
- dropped.push({ local: f.local, artboard: f.artboard, w: f.w, h: f.h, bytes: f.bytes, sha256: f.sha256, reason: 'duplicate-base-map' })
- }
- const kept = idx.files.filter((f) => !dropped.some((d) => d.local === f.local))
- idx.files = kept
- idx.dropped = dropped
- idx.note = '同一 AI 生成底图的多份副本仅保留最高分辨率一份,其余删除并在此留痕(内容不同字节但视觉相同)'
- idx.count = kept.length
- writeFileSync(join(dir, 'index.json'), JSON.stringify(idx, null, 1))
- console.log('kept:', keep.local, `${keep.w}x${keep.h}`, keep.bytes)
- console.log('dropped:', dropped.length)
- for (const d of dropped) console.log(` - ${d.local} ${d.w}x${d.h}`)
- console.log('files kept:', kept.length)
|