|
| 1 | +## Image Tags Updater |
| 2 | + |
| 3 | +This app updates JPEG metadata from the first sheet of an XLSX file and supports flexible column headers. |
| 4 | + |
| 5 | +### Required and Optional Columns |
| 6 | + |
| 7 | +- Required (one of): |
| 8 | + - `Source file name` or `source` — matched to uploaded image filenames (case-insensitive, trimmed) |
| 9 | +- Optional: |
| 10 | + - `Output file name` or `ouput` — desired output name; `.jpg` is added if missing |
| 11 | + - `Title` or `title` |
| 12 | + - `Caption` or `caption` |
| 13 | + - `Description` or `description` |
| 14 | + - `Keywords` or `keywords` |
| 15 | + |
| 16 | +Aliases are case-insensitive and whitespace around headers is ignored. |
| 17 | + |
| 18 | +### Matching Logic |
| 19 | + |
| 20 | +- Images are matched to rows by `Source file name` (or `source`) after converting both to lowercase and trimming. |
| 21 | +- If no row is found, the image shows `No matching row in XLSX`. |
| 22 | + |
| 23 | +### Metadata Writing |
| 24 | + |
| 25 | +- `Title`, `Caption`, `Keywords`: stored as Unicode in EXIF XP tags (`XPTitle`, `XPComment`, `XPKeywords`). |
| 26 | +- `Description`: written to `XPComment` for Unicode; `ImageDescription` is ASCII-only, so non-ASCII text is transliterated (Serbian mappings: Š→S, Đ→DJ, Č→C, Ć→C, Ž→Z, DŽ→DZ; lowercase equivalents too). |
| 27 | +- `Keywords`: written as a single string; if you separate by commas/semicolons, they are kept as typed. |
| 28 | + |
| 29 | +### Output Filename |
| 30 | + |
| 31 | +- Uses `Output file name` (or `ouput`) if provided; otherwise original image name. |
| 32 | +- Ensures `.jpg`/`.jpeg` extension; adds `.jpg` if missing. |
| 33 | +- Applies the same transliteration for Serbian characters to keep ASCII-safe names. |
| 34 | + |
| 35 | +### Example (first rows) |
| 36 | + |
| 37 | +| Source file name | Output file name | Title | Caption | Description | Keywords | |
| 38 | +| ---------------- | ---------------- | ------------ | ---------------- | ------------------ | --------------- | |
| 39 | +| image00001.jpg | apron-001.jpg | Pregač | Pregač sa džepom | Pamučni kuhinjski… | kuhinja; pregač | |
| 40 | +| image00002.jpg | apron-002 | Radni Pregač | Bez rukava | Polyester, plavi | rad; uniforma | |
| 41 | + |
| 42 | +You may use aliases as headers, e.g. `source`, `ouput`, `title`, `caption`, `description`, `keywords`. |
| 43 | + |
| 44 | +### Tips |
| 45 | + |
| 46 | +- Keep headers in the first row; content from subsequent rows only. |
| 47 | +- Avoid extra spaces in filenames; the app trims and lowercases for matching. |
| 48 | +- Only JPEG files are supported. |
| 49 | + |
1 | 50 | # React + Vite |
2 | 51 |
|
3 | 52 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. |
|
0 commit comments