Priority
Medium
Summary
The keyword field is initialized with the photo’s existing child keywords under the llm parent. The user can remove keywords from the field, but Save only adds entered keywords and never removes deselected keywords from the photo.
The UI therefore behaves like a replacement editor while the save logic is additive only.
Example
Existing keywords:
portrait, fashion, studio, red dress
User changes the field to:
Current saved result:
portrait, fashion, studio, red dress
Expected saved result:
Relevant code
Existing keywords are loaded:
props.keywords =
table.concat(existingLlmKeywords, ", ")
Save only calls:
addKeywordsWithParent(
catalog,
selectedPhoto,
keywordList
)
Expected behavior
The entered keyword list should become the assigned set of llm child keywords for the selected photo.
Unrelated Lightroom keywords must remain untouched.
Implementation notes
During the catalog write operation:
- Parse and normalize entered keywords.
- Determine currently assigned child keywords whose direct parent is
llm.
- Add entered keywords that are not assigned.
- Remove assigned
llm keywords that are absent from the entered list.
- Leave all keywords outside the
llm hierarchy unchanged.
Consider case normalization and duplicate handling.
Acceptance criteria
Priority
Medium
Summary
The keyword field is initialized with the photo’s existing child keywords under the
llmparent. The user can remove keywords from the field, but Save only adds entered keywords and never removes deselected keywords from the photo.The UI therefore behaves like a replacement editor while the save logic is additive only.
Example
Existing keywords:
User changes the field to:
Current saved result:
Expected saved result:
Relevant code
Existing keywords are loaded:
Save only calls:
Expected behavior
The entered keyword list should become the assigned set of
llmchild keywords for the selected photo.Unrelated Lightroom keywords must remain untouched.
Implementation notes
During the catalog write operation:
llm.llmkeywords that are absent from the entered list.llmhierarchy unchanged.Consider case normalization and duplicate handling.
Acceptance criteria
llmkeyword from the field removes it from the photo.llm.llmchild keywords without deleting unrelated keywords.