import { exiftool } from "exiftool-vendored"; import type { FileInfo } from "./files"; export interface ShootingConditions { make: string; model: string; lensMake: string; lensModel: string; focalLength: string; focalLength35: string; shutterSpeed: string; fStop: string; iso: string; timestamp: string; } export const extractShootingConditions = async ( fileInfo: FileInfo, ): Promise => { const path = fileInfo.rawPath ?? fileInfo.jpegPath; try { const exifData = await exiftool.read(path); return { make: exifData.Make ?? "Unknown", model: exifData.Model ?? "Unknown", lensMake: exifData.LensMake ?? "Unknown", lensModel: exifData.LensModel ?? "Unknown", focalLength: exifData.FocalLength ?? "Unknown", focalLength35: exifData.FocalLengthIn35mmFormat ?? "Unknown", shutterSpeed: exifData.ExposureTime ?? "Unknown", fStop: exifData.FNumber?.toString() ?? "Unknown", iso: exifData.ISO?.toString() ?? "Unknown", timestamp: new Date( (exifData.CreateDate?.toString() as string).replace(/\./g, ":"), ).toISOString(), }; } catch (error: any) { throw new Error( `Failed to extract EXIF data from ${path}: ${error.message}`, ); } }; export const createImageCaption = (exif: ShootingConditions) => { return `${exif.make} ${exif.model}, ${exif.lensMake} ${exif.lensModel} @ ${exif.focalLength} (${exif.focalLength35}), ${exif.shutterSpeed} s, f/${exif.fStop}, ISO ${exif.iso}`; };