Skip to content

Configuration

Config file

config.yaml is a first-run seed. Values are written to the SQLite database on the initial start. After that the database is the source of truth — changes to config.yaml are ignored unless you delete the database.

All settings are also editable live from the Settings page in the web UI.


Top-level sections

database:
  driver: sqlite          # sqlite | postgres | mssql
  dsn: ./canon-proxy.db   # file path for sqlite; full DSN for others

web:
  listen: ":9090"         # address for the web UI / REST API

Camera

camera:
  host: "192.168.2.70"   # IP address of the camera
  port: 15740             # PTP/IP port — do not change for Canon
  poll_interval: 5s       # how often to check for new images

GUID pairing

The camera enforces GUID-based pairing. The GUID is embedded in the binary at compile time. Once paired, a different client GUID (even one byte different) results in InitFail 0x00000001. Do not modify the GUID unless you intend to re-pair.


Upload

upload:
  workers: 1              # parallel upload workers
  backend: smb            # smb | ftp | s3 | azure | gcs
Field Description
workers Number of concurrent upload goroutines
backend Which storage backend to use

Backends

SMB

backends:
  smb:
    host: "192.168.2.9"
    share: "photos"
    username: "user"
    password: "secret"
    path: "/uploads"

FTP

backends:
  ftp:
    host: "ftp.example.com"
    port: 21
    username: "user"
    password: "secret"
    tls: false
    path: "/uploads"

AWS S3

backends:
  s3:
    bucket: "my-bucket"
    region: "eu-west-1"
    prefix: "camera/"
    access_key: "AKIA..."
    secret_key: "..."

Azure Blob Storage

backends:
  azure:
    account: "mystorageaccount"
    container: "photos"
    prefix: "camera/"
    sas_token: "..."

Google Cloud Storage

backends:
  gcs:
    bucket: "my-gcs-bucket"
    credentials_file: "/secrets/gcs-key.json"
    prefix: "camera/"

Database

database:
  driver: sqlite                   # sqlite (default) | postgres | mssql
  dsn: ./canon-proxy.db            # SQLite: relative path
  # dsn: "host=db user=cp password=secret dbname=canon sslmode=disable"

Note

Changing the driver after first run requires migrating data. For most home-lab deployments SQLite is sufficient.


Environment variable overrides

Environment variable overrides are not currently implemented.

Use the Settings page (persisted in SQLite) or provide values in config.yaml on first run.