Web viewer displays uploaded photos with the wrong local capture time

Hello,

I would like to report a timezone handling issue observed on the community-managed Panoramax Taiwan instance.

(This bug report was drafted with the assistance of Codex)

Environment

  • Instance: https://panoramax.osm.tw
  • API version reported by the instance: 2.13.0
  • Upload client: panoramax_cli 1.4.1
  • Capture location: New Zealand
  • Capture timezone: Pacific/Auckland / +12:00
  • Tested on: 2026-08-25

Input

Filename:

2026-08-14T18-06-32+1200_f00157.jpg

The accompanying panoramax.csv contains:

file,capture_time
2026-08-14T18-06-32+1200_f00157.jpg,2026-08-14T18:06:32+12:00

The JPEG also contains:

Exif.Photo.OffsetTimeOriginal = +12:00
Xmp.exif.DateTimeOriginal = 2026-08-14T18:06:32.00+12:00

Upload command:

panoramax_cli upload \
  --api-url https://panoramax.osm.tw \
  --split-distance 200 \
  MIO

Actual result

The uploaded photo is:

https://panoramax.osm.tw/?focus=pic&pic=13631122-4b16-421b-b256-5d1f1a812bb3

The API item is:

https://panoramax.osm.tw/api/collections/4c56038b-669d-4ee0-973f-965ec1fe52c7/items/13631122-4b16-421b-b256-5d1f1a812bb3

It returns:

{
  "datetime": "2026-08-14T06:06:32+00:00",
  "datetimetz": "2026-08-14T06:06:32+00:00"
}

The original timezone is still present in the EXIF metadata returned by the API, but it is not preserved in datetimetz.

The Web viewer therefore displays the capture time as GMT+00 instead of the local New Zealand time.

Expected result

It is acceptable for datetime to be normalized to UTC:

2026-08-14T06:06:32+00:00

However, based on the Panoramax API documentation and changelog, datetimetz should preserve the original timezone:

2026-08-14T18:06:32+12:00

The viewer should then display the local capture time, approximately 18:06:32 GMT+12.

Reproduction

curl -fsSL \
  'https://panoramax.osm.tw/api/collections/4c56038b-669d-4ee0-973f-965ec1fe52c7/items/13631122-4b16-421b-b256-5d1f1a812bb3' \
  | jq '.properties | {
    datetime,
    datetimetz,
    original: .exif["Xmp.exif.DateTimeOriginal"],
    offset: .exif["Exif.Photo.OffsetTimeOriginal"]
  }'

Additional notes

The official deployment documentation recommends keeping the PostgreSQL database timezone set to UTC.

Could you please clarify:

  1. Should the server preserve the input timezone in datetimetz?
  2. Is this behavior fixed in a newer server version?
  3. Should the Web viewer derive the local timezone from the picture coordinates when datetimetz is UTC?

Relevant documentation:

  • CLI external metadata: https://docs.panoramax.fr/cli/USAGE/#external-metadata
  • API 2.6.0 changelog (datetimetz): https://gitlab.com/panoramax/server/api/-/tags/2.6.0
  • Database timezone setup: https://docs.panoramax.fr/backend/install/database_setup/

Thank you.

this is how the testcase shows in webview as 06:00 instead of 18:00



Hi, thanks for your feedback. The issue seems to come from the API, which doesn’t preserve original date/time with timezone info. It’s weird because the Python library “tag reader” we use does return the good date with timezone… I opened an issue here, we will look into it Datetimetz not preserved (#357) · Issues · Panoramax / Server / API · GitLab

1 Like

Hi Adrien, does the interface display issue also come from the API? The two images above also show 06:00 am, which was incorrectly timed (without +12:00).

In theory yes, the viewer only reflects what’s API is sending, and should use the datetimetz field to display a meaningful info on the capture date (sunlight will be relative to local timezone, not UTC). After we fix the API, I will make sure viewer reflects info correctly as well.

So the issue was because a short name for the timezone was used somewhere in the process (NZST) and it was not recognized by python-dateutil. I made a pull request to fix this https://gitlab.com/panoramax/server/api/-/merge_requests/535 This will be released and deployed in coming weeks :wink:

1 Like

Hi, I noticed an issue with the PR that may make the time zone more confusing.

In basic, the TZ short name to IANA zone is not a one-to-one mapping.
We are from CST, Asia/Taipei (UTC+8), and this map will bring us to America/Chicago (UTC-6)