diff --git a/.gitea/issue_template/bug_report.yml b/.gitea/issue_template/bug_report.yml index 75ad263..6b4d12c 100644 --- a/.gitea/issue_template/bug_report.yml +++ b/.gitea/issue_template/bug_report.yml @@ -17,11 +17,8 @@ body: label: Version description: What version of Photon are you running? You can find this in the footer of the app. options: - - 0.1.4 (Latest) - - 0.1.3 - - 0.1.2 - - 0.1.1 - - 0.1.0 + - 1.0.0 + - 0.1.4 validations: required: true - type: markdown diff --git a/.gitea/issue_template/enhancement.yml b/.gitea/issue_template/enhancement.yml index 0a38b2a..0b472db 100644 --- a/.gitea/issue_template/enhancement.yml +++ b/.gitea/issue_template/enhancement.yml @@ -17,11 +17,8 @@ body: label: Version description: What version of Photon are you running? You can find this in the footer of the app. options: - - 0.1.4 (Latest) - - 0.1.3 - - 0.1.2 - - 0.1.1 - - 0.1.0 + - 1.0.0 + - 0.1.4 validations: required: true - type: markdown diff --git a/.gitea/issue_template/feature.yml b/.gitea/issue_template/feature.yml index e0a4636..08065e3 100644 --- a/.gitea/issue_template/feature.yml +++ b/.gitea/issue_template/feature.yml @@ -17,11 +17,8 @@ body: label: Version description: What version of Photon are you running? You can find this in the footer of the app. options: - - 0.1.4 (Latest) - - 0.1.3 - - 0.1.2 - - 0.1.1 - - 0.1.0 + - 1.0.0 + - 0.1.4 validations: required: true - type: markdown diff --git a/README.md b/README.md index 0b3e372..3d27fc6 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,126 @@ # Photon Screenshot Dashboard -The PHP Screenshot Management Dashboard +![Photon Logo](/logo.png) -To deploy Photon, use the included `docker-compose-example.yml`. +![Version](https://img.shields.io/badge/version-v1.0.0-blue) +![Docker](https://img.shields.io/badge/docker-grey?logo=docker) -Ensure you have a data folder that contains your screenshots. Current supported mimetypes are `JPG`, `PNG`, `GIF` and `MP4`. +A modern, self-hosted PHP screenshot and media management dashboard with powerful organization features, sharing capabilities, and a clean web interface. -You can find the container image history [here](https://git.jrdn.dev/jordanwalster/-/packages/container/photon-dashboard/versions). +The project consists of three main components: + +1. **Photon Dashboard** (`photon`): Web interface for managing screenshots. +2. **Photon Worker** (`worker`): Background processing and file scanning. +3. **MariaDB Database** (`db`): Stores metadata and application data. + +Keep up-to-date on new releases by following the [changelog](./changelog.md). + +## Features + +- **Smart Organization**: Organize screenshots with folders and tags. +- **Advanced Search**: Find images quickly by name or content using OCR. +- **Easy Sharing**: Built-in public sharing URLs. +- **Media Support**: JPG, PNG, GIF, and MP4 (experimental) file support. +- **Bulk Operations**: Select and manage multiple files at once. +- **Sorting Options**: Sort by date, size, or filename. +- **Trash Management**: Safe deletion with trash functionality. +- **Background Processing**: Dedicated worker for compression and OCR processing. +- **Database Storage**: MariaDB backend for reliable data persistence. + +An external authentication proxy is recommended to protect your dashboard from unwanted eyes. + +## Quick Start + +1. **Clone the repository** + ```bash + git clone + cd photon-dashboard + ``` + +2. **Configure environment** + ```bash + cp .env.example .env + # Edit .env with your settings + ``` + +3. **Create data directory** + ```bash + mkdir data + # Copy your screenshots to ./data/ + ``` + +4. **Deploy with Docker Compose** + ```bash + docker-compose -f examples/compose-default.yml up -d + ``` + +5. **Access the dashboard** + - Open http://localhost:8090 in your browser + +## Configuration + +### Environment Variables + +Copy the `.env` file and customize these key settings: + +#### Dashboard Settings +- `PHOTON_PORT`: Web interface port (default: 8090) +- `USER_EMAIL`: Admin email address +- `DATA_PATH`: Path to your screenshots folder + +#### Worker Settings +- `SCAN_RATE`: File scanning interval in seconds (default: 10) + +#### Database Settings +- `MYSQL_DATABASE`: Database name used by Photon (defaults to photon). +- `MYSQL_USER`: Database user used by Photon. +- `MYSQL_PASSWORD`: Database password used by Photon user. +- `MYSQL_ROOT_PASSWORD`: Database root password. + +#### Domain Options +- `PHOTON_DOMAIN`: Domain used for dashboard. +- `PHOTON_SHARE_DOMAIN`: Optional subdomain for sharing links. +- `COOKIE_DOMAIN`: Required when adding a subdomain for sharing. + +### Deployment Options + +#### Standard Deployment +Use `examples/compose-default.yml` for simple deployments: +```bash +docker-compose -f examples/compose-default.yml up -d +``` + +#### Traefik – Custom Domains +Use `examples/compose-traefik.yml` for reverse proxy setups with custom domains. + +## Project Structure + +``` +photon-dashboard/ +├── examples/ +│ ├── compose-default.yml # Default example for basic usage. +│ ├── compose-traefik.yml # Traefik example for custom domain routing. +│ └── .env # Environment configuration +│ +└── changelog.md # Version history +``` + +## Updates + +Container images are available at: +- Dashboard: `git.jrdn.dev/jordanwalster/photon-dashboard:latest` +- Worker: `git.jrdn.dev/jordanwalster/photon-worker:latest` + +View version history: [Container Registry](https://git.jrdn.dev/jordanwalster/-/packages/container/photon-dashboard/versions) + +### Logs +```bash +# View photon logs +docker logs photon_dashboard + +# View worker logs +docker logs photon_worker + +# View database logs +docker logs photon_db +``` diff --git a/changelog.md b/changelog.md index e541079..69bed3c 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,65 @@ All notable changes to this project will be documented in this file. +## [v1.0.0] - 2026-04-30 + +> [!CAUTION] +> The nginx web container has been removed, share links now default to `/share/example.jpg`. To use custom domains please refer to the `examples/compose-traefik.yml` example. + +### Added +- Selected images counter. +- Sharing endpoint in photon container. +- Deselect all button. +- Active page indicator for tag pages. +- Context menu for image interactions. +- File metadata inside context menu. +- Context menu for tags in the sidebar (rename and delete actions). +- Sorting for images (date, size and name). +- Selection across multiple pages at a time for better management. +- Sticky pagination bar, prevents moving when item count is lower between pages. +- Ability to make images private, links will only work with a valid session. +- Favicon and logo to footer. +- Better backend reporting for uploads. +- New compose files for updated deployments. +- Ability to move items between folders. +- Animations on hover. +- GitHub button in footer linking to project. + +### Changed +- Environment variables `ADMIN_DOMAIN` and `SHARE_DOMAIN` replaced with `PHOTON_DOMAIN` and `PHOTON_SHARE_DOMAIN`. +- Search now acts as a filter on a given page context. +- File names now only available in the context menu. +- Image selection highlights border, shrinks and darkens image. +- Images now have rounded corners to match the design language. +- Compression now limits image dimensions to further decrease storage consumption. +- Backup file name now contains timestamp. +- Simplified backend functions for easier maintainability. +- Upload limits have been raised for mass-uploading. + +### Fixed +- Screenshots with special characters in the name cannot be selected by clicking. +- Restoring a file from trash will always go back to root folder regardless of original source. +- Image does not scale correctly when changing column count. +- Assigning tags after first page redirects you to the start. +- Renaming an image results in tags being lost - resulting in orphaned attachments. +- Renaming an image results in thumbnails being regenerated and creating duplicates. +- 'All Screenshots' in sidebar doesn't show subfolder count. +- Going to a folder by link doesn't show it as active in the sidebar +- Image counter for folders doesn't update on upload. +- Uploading an image with the same name as existing will replace it without confirmation. +- Image counters don't update on deletion. +- Newly created tags do not show up in the delete menu until a full-page refresh has occurred. +- Delete tag dropdown doesn't dynamically update if a tag has been deleted. + +### Removed +- Autocompletion on rename form for previously entered names. +- Secondary web container. +- Option for two columns. +- Menu button on images. +- URL scheme settings. +- Checkbox on images. +- SQLite to MySQL migration tool. + ## [v0.1.4] - 2026-04-24 > [!TIP] diff --git a/.env b/examples/.env.example similarity index 59% rename from .env rename to examples/.env.example index 74dea28..9b51598 100644 --- a/.env +++ b/examples/.env.example @@ -1,10 +1,15 @@ ### Photon Environment Variables PHOTON_PORT=8090 -SHARE_DOMAIN=localhost:8080 USER_EMAIL=photon@jrdn.dev -SHARE_URL_SCHEME=http DATA_PATH=./data +### Domain Options +PHOTON_DOMAIN=photon.local + +# Uncomment the below lines if you are using a custom subdomain for link sharing. +# PHOTON_SHARE_DOMAIN=share.photon.local +# COOKIE_DOMAIN=.photon.local + ### Photon Worker Environment Variables SCAN_RATE=10 @@ -14,4 +19,3 @@ MYSQL_DATABASE=photon MYSQL_USER=photon MYSQL_PASSWORD=changeme MYSQL_ROOT_PASSWORD=pleasechangeme - diff --git a/docker-compose-example.yml b/examples/compose-default.yml similarity index 82% rename from docker-compose-example.yml rename to examples/compose-default.yml index 2fe455e..1af5768 100644 --- a/docker-compose-example.yml +++ b/examples/compose-default.yml @@ -13,13 +13,6 @@ services: - ${PHOTON_PORT:-8090}:80 env_file: - .env - web: - container_name: public_web - image: nginx - ports: - - 8080:80 - volumes: - - ${DATA_PATH}:/usr/share/nginx/html:ro worker: container_name: photon_worker image: git.jrdn.dev/jordanwalster/photon-worker:latest @@ -34,6 +27,5 @@ services: - db:/var/lib/mysql env_file: - .env - volumes: - db: \ No newline at end of file + db: diff --git a/examples/compose-traefik.yml b/examples/compose-traefik.yml new file mode 100644 index 0000000..2376f06 --- /dev/null +++ b/examples/compose-traefik.yml @@ -0,0 +1,57 @@ +services: + # Photon services + photon: + container_name: photon_dashboard + image: git.jrdn.dev/jordanwalster/photon-dashboard:latest + volumes: + - ./db:/var/www/html/db # Only required if migrating from SQLite + - type: bind + source: ${DATA_PATH} + target: /var/www/html/data + bind: + propagation: rshared + env_file: + - .env + labels: + # Dashboard configuration + - "traefik.enable=true" + - "traefik.http.routers.photon.rule=Host(`${PHOTON_DOMAIN}`)" + - "traefik.http.routers.photon.service=photon" + - "traefik.http.services.photon.loadbalancer.server.port=80" + + # Custom domain for share links + - "traefik.http.routers.photon-share.rule=Host(`${PHOTON_SHARE_DOMAIN}`)" + - "traefik.http.routers.photon-share.service=photon-share" + - "traefik.http.middlewares.photon-share-path.addprefix.prefix=/share" + - "traefik.http.routers.photon-share.middlewares=photon-share-path" + - "traefik.http.services.photon-share.loadbalancer.server.port=80" + worker: + container_name: photon_worker + image: git.jrdn.dev/jordanwalster/photon-worker:latest + volumes: + - ${DATA_PATH}:/var/www/html/data + env_file: + - .env + + # Database + db: + container_name: photon_db + image: mariadb + volumes: + - db:/var/lib/mysql + env_file: + - .env + + # Reverse proxy + traefik: + container_name: traefik + image: traefik:v3 + command: + - "--providers.docker=true" + - "--entrypoints.web.address=:80" + ports: + - "80:80" + volumes: + - /var/run/docker.sock:/var/run/docker.sock +volumes: + db: diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..d3c0b73 Binary files /dev/null and b/logo.png differ