/** * Rename media — re-uploads each file under its new filename. * Payload replaces the old file + regenerates thumbnails while keeping the same ID. */ import { getPayload } from 'payload' import config from '@payload-config' import path from 'node:path' import fs from 'node:fs' const imagesDir = path.resolve(process.cwd(), 'images') const renames: Array<{ alt: string; newFile: string }> = [ { alt: 'Jason Woltje portrait', newFile: 'jason-portrait.jpg' }, { alt: 'Stylized portrait — thought leader', newFile: 'thought-leader-city.jpg' }, { alt: 'Stylized portrait — social', newFile: 'social-neon.jpg' }, { alt: 'Jason Woltje — tech founder portrait, dark background', newFile: 'tech-founder-dark.jpg' }, { alt: 'Jason Woltje — social media profile, neon gradient', newFile: 'social-neon.jpg' }, { alt: 'Jason Woltje — at the desk, documentary style', newFile: 'at-the-desk.jpg' }, { alt: 'Jason Woltje — illustrated portrait', newFile: 'illustrated-portrait.jpg' }, { alt: 'Jason Woltje — thought leader portrait, city backdrop', newFile: 'thought-leader-city.jpg' }, { alt: 'Jason Woltje — fashion editorial portrait', newFile: 'editorial-blazer.jpg' }, ] async function main() { const payload = await getPayload({ config }) const seen = new Set() for (const r of renames) { const { docs } = await payload.find({ collection: 'media', where: { alt: { equals: r.alt } }, limit: 1, depth: 0, }) if (docs.length === 0) { console.log(` skip — no media with alt "${r.alt}"`) continue } const doc = docs[0]! if (seen.has(doc.id as number)) continue seen.add(doc.id as number) const currentFilename = (doc as any).filename as string if (currentFilename === r.newFile) { console.log(` ↷ id=${doc.id} already named ${r.newFile}`) continue } const filePath = path.join(imagesDir, r.newFile) if (!fs.existsSync(filePath)) { console.log(` ⚠ file missing: ${r.newFile}`) continue } await payload.update({ collection: 'media', id: doc.id, filePath, data: {}, }) console.log(` ✓ id=${doc.id}: ${currentFilename} → ${r.newFile}`) } console.log('\nDone.') process.exit(0) } main().catch((err) => { console.error('Fatal:', err) process.exit(1) })