Log inComing Soon

API

FLOGVIT.culling exposes a local REST API that gives you full control over the application. Automate your entire workflow, build custom integrations, or connect to external tools.

A TypeScript SDK is available as an npm package. You can also call the API from any language that supports HTTP requests.

Getting Started

The API runs on localhost when the app is open. No authentication is required — it's your machine, your data.

When the app is running, interactive API documentation is available at:

GET http://localhost:9100/api/v1/status

TypeScript SDK

npm install @flogvit/culling-sdk
import { CullingClient } from '@flogvit/culling-sdk';

const client = new CullingClient();

// Get current image info
const image = await client.currentImage();
console.log(image.filename, image.rating);

// Rate the current image
await client.setRating(4);

// Move to next
await client.next();

Images

List images

GET /api/v1/images

Returns all images in the current folder. Supports query parameters for filtering:

  • rating — Minimum star rating (1–5)
  • flag — Filter by flag (pick, reject, unflagged)
  • color — Filter by color label
  • type — Filter by file type (raw, jpeg, video)

Get current image

GET /api/v1/images/current

Returns full metadata for the currently selected image including EXIF, rating, flag, color label, and file path.

Set rating

PUT /api/v1/images/{id}/rating
{ "rating": 4 }

Set star rating (0–5). Use 0 to clear.

Set flag

PUT /api/v1/images/{id}/flag
{ "flag": "pick" }

Values: pick, reject, none.

Set color label

PUT /api/v1/images/{id}/color
{ "color": "red" }

Values: red, yellow, green, blue, purple, orange, pink, gray, none.

Auto-crop

POST /api/v1/images/{id}/autocrop
{ "subject": "person" }

Automatically crop around detected subjects. Currently supports person — more subjects coming soon.

Navigation

Go to next/previous

POST /api/v1/navigate/next
POST /api/v1/navigate/previous

Go to specific image

POST /api/v1/navigate/goto
{ "index": 42 }

Select images

POST /api/v1/navigate/select
{ "indices": [0, 3, 7] }

Metadata

Get EXIF

GET /api/v1/images/{id}/exif

Returns camera, lens, aperture, shutter speed, ISO, focal length, GPS coordinates, and more.

Get/set IPTC

GET /api/v1/images/{id}/iptc
PUT /api/v1/images/{id}/iptc
{
  "headline": "Concert at Rockefeller",
  "caption": "Lead singer during encore",
  "keywords": ["concert", "music", "live"],
  "city": "Oslo",
  "country": "Norway"
}

Upload

Upload to FTP

POST /api/v1/upload
{
  "image_id": "abc123",
  "profile": "VG"
}

Upload an image to a named FTP profile. Runs in the background.

Upload status

GET /api/v1/upload/status

Returns status of all active and recent uploads.

Denoise

Send to denoise

POST /api/v1/denoise
{
  "image_id": "abc123",
  "tool": "topaz"
}

Send an image to an external denoise tool. The result is automatically imported back when processing completes.

Import

Start import

POST /api/v1/import
{
  "source": "/Volumes/SD_CARD",
  "destination": "/Photos/2026/event",
  "profile": "default"
}

Start an import from a source path using a named import profile.

Import status

GET /api/v1/import/status

Returns progress, file count, speed, and ETA for active imports.

Application

Get app status

GET /api/v1/status

Returns application state: current folder, image count, filter state, view mode.

Open folder

POST /api/v1/folder/open
{ "path": "/Photos/2026/wedding" }

Set view mode

POST /api/v1/view
{ "mode": "grid" }

Values: grid, single, compare, nup.

Set filter

POST /api/v1/filter
{
  "min_rating": 3,
  "flag": "pick",
  "color": "red"
}

All fields are optional. Omit a field to not filter on it. Pass an empty object to clear all filters.

Webhooks / Events

The API supports Server-Sent Events for real-time notifications:

GET /api/v1/events

Events are emitted when:

  • An image is selected, rated, flagged, or labeled
  • Import starts, progresses, or completes
  • Upload starts or completes
  • Denoise completes

This lets you build reactive integrations that respond to user actions in real time.