Three things: a phone new enough, an Opensolr account, and a few permissions. The plan decides how much of the experience you get.
API level 26. The app is a regular APK, installed from GitHub.
The app signs in with it and creates the phone's index in it. Create one.
Every phone uses one Opensolr Index. If the plan's index allowance is full, the app says so and links to the plans.
Sync and search talk to Opensolr. Scheduled syncs wait for a connection by themselves.
Photos are embedded; search matches meaning and words.
Each new photo uses a tenth of a request, so ten photos cost one; the words, the search vector and the text printed in the photo are all inside that tenth. A typed search by meaning uses 1. Photos already indexed never cost again. See plan limits.
Hold and serve the photo descriptions. When either runs out, the index pauses until you upgrade or the month resets.
READ_MEDIA_IMAGES (or storage access on Android 12 and older), to find and read the photos in your folders.
ACCESS_MEDIA_LOCATION. Without it Android removes GPS data from photos before the app sees them, and photos are indexed without a place.
ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION and ACCESS_BACKGROUND_LOCATION, asked only if you turn on Locate new photos, so a new photo without a position of its own can take the phone's position, also when it is synced in the background. The app never asks for it otherwise.
Sync progress and plan alerts.
Talking to Opensolr.
So Android does not stop a long sync half way.