Render curated date-folder photos with title date and place captions

This commit is contained in:
Pigway
2026-10-05 01:36:05 +08:00
parent f5ab1ade77
commit 011339d511
15 changed files with 386 additions and 18 deletions
+29
View File
@@ -83,3 +83,32 @@ protected asynchronous device display. Schemas are in `/openapi.json` and `/docs
Native Aliyun Drive/Baidu Drive/Google Drive adapters are not implemented.
A compatible WebDAV gateway or an independently managed NAS sync folder can be used.
Frame Flow does not install a gateway or receive vendor API credentials automatically.
## Date-folder captions / 整理照片文字
Enable **Only photos in date-prefixed folders** and **Show folder caption below
the photo** when editing a source. Curated sources created by the UI increase the
catalog limit to 100,000 photos; other sources default to 10,000. The API exposes
`catalog_limit` explicitly. It remains a bounded catalog; reaching the limit is
shown in the UI.
Example folder name: `20261005 家庭出游@示例地点`.
The image contains the photo and three separate caption lines:
```text
家庭出游
2026-10-05
示例地点
```
Without `@`, the location line is omitted. Folder names support `YYYYMMDD`,
`YYYY-MM-DD`, `YYYY.MM.DD`, and `YYYY年MM月DD日`, with calendar-valid dates.
Subfolders inherit their nearest dated ancestor; image filenames and EXIF do not
replace this curated date. Synology `#recycle`, hidden folders, and `@eaDir` are
excluded. Extremely long captions shrink and then truncate visually; full values
remain available in catalog metadata.
Output is 1200×1600: a 1200×1280 photo area plus a white caption area. Original
files remain unchanged. Contain/cover/smart and color/grayscale profiles still apply.
A prepared source definition is in `deploy/organized-photos-source.json`; use it
with `PUT /api/v1/photo-sources/organized-photos` after mounting the library.
+48
View File
@@ -10312,6 +10312,20 @@
"name": {
"type": "string",
"title": "Name"
},
"caption": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Caption"
}
},
"additionalProperties": false,
@@ -10395,6 +10409,23 @@
"title": "Enabled",
"default": true
},
"catalog_limit": {
"type": "integer",
"maximum": 100000.0,
"minimum": 1.0,
"title": "Catalog Limit",
"default": 10000
},
"organized_only": {
"type": "boolean",
"title": "Organized Only",
"default": false
},
"folder_caption": {
"type": "boolean",
"title": "Folder Caption",
"default": false
},
"credential_env": {
"anyOf": [
{
@@ -10449,6 +10480,23 @@
"title": "Enabled",
"default": true
},
"catalog_limit": {
"type": "integer",
"maximum": 100000.0,
"minimum": 1.0,
"title": "Catalog Limit",
"default": 10000
},
"organized_only": {
"type": "boolean",
"title": "Organized Only",
"default": false
},
"folder_caption": {
"type": "boolean",
"title": "Folder Caption",
"default": false
},
"credential_env": {
"anyOf": [
{