Your key. Your cloud costs. Microsoft bills usage to your own resource. Only send images you are authorized to process in the cloud. AI suggestions can be wrong: review every field before applying it.
Before you start
You need Lightroom Classic and your own Microsoft Foundry resource with a compatible vision-capable OpenAI model deployment. This is a Library-menu plug-in, not a Publish Service. It does not require either FTP plug-in.
Begin with a catalog backup and a non-sensitive image. Public downloads are coming soon. Native compatibility should be checked on your Lightroom and operating-system combination; the SDK declaration is not a tested-version guarantee.
Prepare your own cloud resource
The existing client targets GPT-4.1 mini with image input and strict structured output. Check current model availability and lifecycle before choosing a deployment; not every model in the Foundry catalog is compatible. Use a pay-as-you-go deployment with scoped access and spending visibility.
Follow Microsoft's official guidance to create a Foundry resource and deploy a model. Check the retirement schedule, current pricing, and deployment processing locations. Resource location alone does not determine where inference occurs.
This client uses resource API keys, not Entra sign-in or managed identity. Do not weaken an organization's keyless-authentication or networking policies to use it. No publisher backend, VM, agent, or additional storage service is required by the plug-in.
Install & connect
- Extract the ZIP to a permanent folder. In Lightroom Classic, select File > Plug-in Manager > Add and choose the complete
AITagging.lrpluginfolder. - Open Library > Plug-in Extras > AI Photo Tagging: Foundry Settings.
- Enter your resource root, such as
https://YOUR-RESOURCE.services.ai.azure.com, and the exact model deployment name you chose. A compatiblehttps://YOUR-RESOURCE.openai.azure.comroot is also accepted. - Enter your resource API key directly into Lightroom's masked field. Never put it in messages, screenshots, source files, or a shared package.
- Select Save locally. Saving does not test the connection or validate model access. Use one authorized, non-sensitive photo to verify the setup and check usage afterward.
Use the resource root, not a portal link, project URL, or API path. The plug-in appends the API path itself. Custom gateways and sovereign-cloud endpoints are not supported by this version.
The endpoint and deployment are local preferences; the key uses Lightroom's encrypted storage. A key is required each time you save, and an existing key is never displayed. Forget key removes the locally saved key, not the endpoint or deployment, and does not revoke the key in Azure.
Tag one photo
- Select exactly one photo in Library. Multiple selections are rejected before rendering or a cloud request.
- Choose Library > Plug-in Extras > AI Photo Tagging: Tag Selected Photo.
- Optionally enter a photographer tip, such as the known location or subject context. It starts blank each time. Review the camera's capture timestamp and uncheck Include capture time with the AI request if it is wrong or private.
- Check the destination and deployment in the cloud-processing consent dialog before continuing.
- Review the photo and editable suggestions. Choose which fields to apply. Existing title, caption, and AI category values are protected by unchecked Apply boxes until you explicitly choose replacement.
- Review City and Country / Region separately, then check their individual Apply boxes only if you want to save them. Edit the keyword list and choose Apply selected fields or Cancel.
There is no batch queue or automatic advance. Finish or cancel, select another photo, and run the command again. Changing the Library selection during processing does not change which photo the operation updates.
The optional tip is limited to 2,000 UTF-8 bytes. The capture timestamp is the camera's recorded time, not verified local time. Neither proves geography, lighting, season, or the identity of a subject. Check the suggestions against what you know.
Your metadata, your decisions
Keywords merge with existing tags rather than replacing them. Existing hierarchy, synonyms, and export settings are preserved. New keywords are top-level and exportable. The AI proposes up to 50 relevant terms; this is not an agency acceptance rule, and merging may leave more than 50 total tags.
Titles are limited to 200 UTF-8 bytes, captions to 2,000, and individual keywords to 100. Suggestions aim for useful coverage rather than padding. Verify relevance, factual claims, final keyword counts, and priority order before submitting to an agency.
The custom AI category is visible in the AI Photo Tagging Metadata view. It is not an Alamy or Dreamstime category and does not modify legacy IPTC Category. City and Country / Region use native Lightroom fields, preserve existing values during review, and are never automatically applied.
Location should come from context you supply, not a guess based on the image. No reverse geocoding is performed. Applying changes uses a named Lightroom Undo operation. If selected text changes while you are reviewing, the operation stops instead of silently overwriting it.
What is sent
Lightroom renders a temporary sRGB JPEG reflecting your edits, limited to 1024 by 1024 pixels without enlargement. Embedded JPEG metadata is stripped before the preview is sent over HTTPS. Originals, filenames, existing catalog titles, keywords, and GPS are not automatically included.
Your optional photographer tip and enabled capture time are sent separately. Stripping metadata does not anonymize image pixels. Faces, documents, signs, private locations, and other visible details still reach your cloud resource.
There is no Expolumi-operated backend, telemetry, prompt log, or response archive. Microsoft's service terms, data-processing, and abuse-monitoring policies apply. Disabling stored completions does not guarantee zero retention.
Temporary files are normally removed after rendering. A crash or deletion failure may leave plug-in temporary files on disk. Applying metadata updates the catalog; Lightroom's own automatic XMP-writing setting can independently write changes to disk. See privacy and data handling.
Prepare for publishing
The FTP plug-ins send original JPEGs unchanged. After reviewing AI metadata, explicitly save it into your finished JPEG or export a full-resolution JPEG with the desired metadata and import it for publishing. Inspect the file's embedded tags.
Never submit the reduced analysis preview. Categories, releases, and final submission remain agency-specific steps. AI cannot determine copyright, release requirements, or whether a photo will be accepted.
Costs & troubleshooting
Check usage and billing during your first trials. Budget alerts are not real-time hard spending caps. Canceled, failed, or timed-out requests may already have been processed and billed. Repeating a request is not deduplicated.
Only HTTP 429 throttling responses are retried automatically, up to three retries per photo, with bounded waits that can be canceled. Other HTTP errors, network failures, refusals, and invalid output stop the operation. Cancellation cannot recall a request already sent.
- Configure Foundry first: check the resource endpoint, deployment, saved key, and local encrypted storage.
- Access denied: check your resource key, authentication policy, network access, and firewall.
- Deployment not found: use the deployment name, not merely the model name, on the matching resource.
- Request rejected: check image input, strict structured-output support, request compatibility, and service health.
- Render or apply failed: check photo availability, disk access, catalog contention, and changed metadata.
Close Lightroom before replacing the complete plug-in folder. Forget the key before removal; removal does not undo catalog edits. Rotate compromised keys in Azure as well.
Automated checks cover core logic but do not establish native Lightroom rendering, UI, or live cloud behavior. Verify one authorized request, its cost, and the resulting metadata before continuing.
Third-party software
The plug-in includes dkjson by David Heiko Kolf under the MIT license, retained in its bundled source.
