Skip to content

Commit a8ac923

Browse files
author
Marko Ljubicic
committed
Update README.md
1 parent 5d82f62 commit a8ac923

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

‎README.md‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,52 @@
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+
150
# React + Vite
251

352
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

0 commit comments

Comments
 (0)