Astrophotography is the Smithflix-hosted Astro site for Adam Smith's deep-sky and widefield image catalog. As of 2026-05-03, it runs as a Node/Astro server-side rendered service so catalog edits and generated image derivatives are visible immediately without a site rebuild.
The hidden management UI is available at /manage/. It is intentionally unauthenticated and unlinked from navigation or sitemap.
This page covers the Astro runtime, catalog CMS, Seestar inventory scan, and published-media layout. The source Seestar archive remains read-only to the CMS.
astrosmithflix-astro:runtime, built from /home/adam/astrophotography-siteffmpeg/ffprobe for video poster extraction and MP4 playback derivatives18081:18081astro.better-than.tvhttp://192.168.0.113:180813637 (astro.better-than.tv, Let's Encrypt R13, expires 2026-08-02 00:06:47 UTC)/home/adam/astrophotography-site/srv/docker/astro/data/catalog.json/srv/docker/astro/data/backups/catalog.<timestamp>.json/srv/docker/astro/data/inventory.json/srv/docker/astro/data/video-previews/srv/docker/astro/curated/media/...: /srv/docker/astro/media/home/adam/Pictures1001 (astro container user) has recursive read/traverse access on /home/adam/Pictures/seestar; default ACLs on that tree should give future imported phone/telescope files CMS-readable permissions without making them world-readable. Some phone syncs preserve 0600 modes and can collapse the ACL mask to ---, so /home/adam/scripts/fix-seestar-astro-acls.sh reapplies both u:1001:rX and m::rX./home/adam/Pictures/astrophotography/opt/stacks/server/compose.yaml/opt/stacks/server/compose.yaml.bak.20260503-astro-runtime4/messier/m101/ still identify the object, not a single image.images[] entries with mediaType (image or video), source path, curated source path, optional FITS path for still images, capture metadata when available, title/caption/alt, published flag, primary flag, and generated media paths.Published Images object grid so new published CMS assignments are visible from / immediately; collection/type tiles remain navigation summaries./manage/ keeps taxonomy management separate from image assignment: collections and categories are created in the Catalog Setup panel and image assignment uses catalog-backed selections, not free-text IDs.Messier, Milky Way, and Solar System; categories are object classes such as Galaxies, Clusters, Planets, Moons, and Comets. The old public Types label was removed in favor of Categories; widefields is not used as a category/type.Clusters intentionally covers both open clusters and globular clusters.MW-WINTER-20260314 winter Milky Way mosaic catalog object was removed from the live catalog on 2026-05-04; source archive files were not deleted./manage/ supports batch assignment: clicking inventory cards toggles a multi-select state, the toolbar shows the selected count and a clear-selection control, and publishing applies the same object/taxonomy/published settings to every selected file. When creating a new object in a batch, the first publish creates the object and subsequent selected files attach to that new object./manage/ scans and previews common video files (.mp4, .mov, .m4v, .avi, .webm, .mpg, .mpeg) alongside JPG/PNG files. Publishing a video copies the source, uses ffmpeg to create a poster frame and H.264/AAC playback.mp4, and generates poster-based tile, mosaic, and Open Graph images./manage/ uses GET /api/manage/video-preview to create a cached browser-friendly MP4 under /srv/docker/astro/data/video-previews, then draws decoded frames into a canvas so Chrome reliably shows playback in the right-side editor panel.Assigned when that exact Seestar visual file is already attached to an image entry, and Object exists when the target folder maps to an existing catalog object but that exact file has not been assigned./api/catalog reads the runtime catalog on request./api/manage/inventory reads the cached Seestar inventory; /api/manage/rescan refreshes it./api/manage/video-preview normalizes source videos into cached H.264/AAC MP4 previews for the CMS selected-media panel and supports byte-range streaming./api/manage/publish-image copies the selected source media, generates image or video derivatives, writes a catalog backup, atomically replaces the catalog, and returns a refreshed inventory snapshot so CMS assignment badges update immediately./api/manage/set-primary switches the primary image for an object./api/manage/taxonomy adds collection/category records and rejects duplicate IDs.http://127.0.0.1:18081/health.txthttps://astro.better-than.tv/ returns 200 OK as of 2026-05-04301 Moved Permanently as of 2026-05-04openssl s_client -connect astro.better-than.tv:443 -servername astro.better-than.tv </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -datescurl -I -H 'Host: astro.better-than.tv' http://127.0.0.1/astro.better-than.tv -> 192.168.0.113:18081 behind NPM./manage/ has no authentication by user preference.security.checkOrigin is disabled in /home/adam/astrophotography-site/astro.config.mjs so unauthenticated same-site CMS POST endpoints such as /api/manage/rescan are not blocked by Astro's generic cross-site form guard behind NPM. Management endpoints remain hidden only by URL and are not access-list protected./srv/docker/astro/data, /srv/docker/astro/curated, and /srv/docker/astro/media.docker compose --env-file /opt/stacks/server/.env -f /opt/stacks/server/compose.yaml config --quietdocker compose --env-file /opt/stacks/server/.env -f /opt/stacks/server/compose.yaml build astrodocker compose --env-file /opt/stacks/server/.env -f /opt/stacks/server/compose.yaml up -d astrodocker run --rm --user 1000:1000 -v /home/adam/astrophotography-site:/app -v /home/adam/Pictures:/home/adam/Pictures:ro -v /tmp:/tmp -w /app -e ASTRO_CATALOG_PATH=/tmp/astro-data/catalog.json -e ASTRO_CURATED_IMAGE_ROOT=/tmp/astro-curated -e ASTRO_MEDIA_ROOT=/tmp/astro-media -e ASTRO_INVENTORY_PATH=/tmp/astro-data/inventory.json -e ASTRO_BACKUP_ROOT=/tmp/astro-data/backups node:22-alpine npm run checkdocker logs astro/home/adam/scripts/fix-seestar-astro-acls.shseestar-astro-acls.path and seestar-astro-acls.timer watch /home/adam/Pictures/seestar/phone/stacked and also run every two minutes to catch sync tools that chmod files after creating them. Inspect with systemctl --user status seestar-astro-acls.path seestar-astro-acls.timer./home/adam/.local/bin/siril -> /home/adam/Applications/Siril-1.4.2-x86_64.AppImage./home/adam/.config/siril/config.1.4.ini./home/adam/Applications/StarNetv2CLI_linux, installed from the official Linux command-line package StarNetv2CLI_linux.zip./home/adam/Applications/StarNetv2CLI_linux/starnet-siril. This wrapper sets LD_LIBRARY_PATH for the bundled TensorFlow/libtiff libraries and runs from the install directory so starnet2_weights.pb is found./home/adam/Applications/StarNetv2CLI_linux/starnet2_weights.pb./home/adam/Applications/StarNetv2CLI_linux/starnet-siril /home/adam/Applications/StarNetv2CLI_linux/rgb_test5.tif /tmp/starnet_rgb_test_starless.tif.http://127.0.0.1:18081/health.txt and expects ok.docker ps --filter name=astro.curl http://127.0.0.1:18081/messier/m101/.curl http://127.0.0.1:18081/api/manage/inventory./srv/docker/astro is inside the documented Duplicati /srv/docker source scope./srv/docker/astro/data/catalog.json, /srv/docker/astro/curated, and /srv/docker/astro/media; these are now runtime data, not disposable static output. Video playback derivatives and posters live under /srv/docker/astro/media./srv/docker/astro/data/video-previews is a regenerateable CMS cache. It is covered by /srv/docker backups but can be deleted if space cleanup is needed; the CMS will recreate previews from the read-only Seestar source videos./home/adam/Pictures/seestar is the original read-only capture archive and must be preserved separately from CMS published-media derivatives./home/adam/astrophotography-site and restart astro./manage/ loads but inventory is stale, use the Rescan button or call POST /api/manage/rescan with JSON content type. New files can be hidden by the CMS Suggested object filter when no matching catalog object exists yet.EACCES in docker logs astro, check Seestar source ACLs with getfacl -p /home/adam/Pictures/seestar/<folder> and restore access with /home/adam/scripts/fix-seestar-astro-acls.sh. The important detail is the ACL mask: files can show user:dockeruser:r-- while mask::--- makes the effective permission unavailable to the container./srv/docker/astro/media and the images[].media paths in /srv/docker/astro/data/catalog.json.astro container image includes ffmpeg and ffprobe with docker exec astro sh -lc 'ffmpeg -version | head -1 && ffprobe -version | head -1'./srv/docker/astro/data, /srv/docker/astro/curated, and /srv/docker/astro/media; they should be writable by UID/GID 1001:1001.curl http://127.0.0.1:18081/health.txt works, inspect NPM host id 36, DNS, and TLS certificate id 37.2026-05-03.37, HTTP-to-HTTPS redirect, and OpenSSL certificate subject/issuer/dates verified 2026-05-04.2026-05-04.2026-05-04.1001, ACL mask repair, CMS rendering of phone/stacked JPGs, and automatic seestar-astro-acls.path/seestar-astro-acls.timer coverage verified 2026-05-04.