Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 71cb22236c | |||
| ec244e47f2 | |||
| 78fe83c3dc | |||
| af92f6ee6f | |||
| 4392f19827 | |||
| 24cf7ef881 | |||
| 880891c6bd | |||
| 30e018d583 | |||
| eb858a88cc | |||
| 5df3a21a71 | |||
| 307f4f34a5 | |||
| 123a86e6b8 | |||
| 5111b42f52 | |||
| 036b595170 | |||
| a5fc4a67a3 | |||
| e2ff356cbf | |||
| ed8ff1dd66 | |||
| ecf6a6fe62 | |||
| c0bb3430bb | |||
| 073803d05a | |||
| f99b483bce | |||
| e0c0ac7c45 | |||
| 2b3083143d | |||
| afd65d3bcb | |||
| 120f3f3b67 | |||
| 59da5d315d | |||
| 35321a56b8 | |||
| ea7cec2777 | |||
| a6a4ceceb8 | |||
| f63779e5d3 | |||
| 14964be220 | |||
| 9b3813cde0 | |||
| 5824678ff9 | |||
| 77e48ed460 | |||
| 586671a52a | |||
| ce6bcd2f88 | |||
| a78534b3b4 | |||
| 6827099f44 | |||
| 76454300f2 |
@@ -0,0 +1,28 @@
|
||||
name: Bug Report
|
||||
about: File a bug report
|
||||
title: "[Bug] ..."
|
||||
labels: "Kind/Bug"
|
||||
body:
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What happened?
|
||||
description: Describe the bug and what the expected behaviour was.
|
||||
placeholder: A bug happened!
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of Photon are you running? You can find this in the footer of the app.
|
||||
options:
|
||||
- 1.0.0
|
||||
- 0.1.4
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This issue was created using the bug report template.
|
||||
visible: [content]
|
||||
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: true
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Enhancement Request
|
||||
about: Suggest a way things could be improved
|
||||
title: "[Enhancement] ..."
|
||||
labels: "Kind/Enhancement"
|
||||
body:
|
||||
- type: textarea
|
||||
id: idea
|
||||
attributes:
|
||||
label: What is your idea?
|
||||
description: Describe the feature you would like to see. Attach any screenshots or mockups if you have them.
|
||||
placeholder: I would like to see...
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of Photon are you running? You can find this in the footer of the app.
|
||||
options:
|
||||
- 1.0.0
|
||||
- 0.1.4
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This issue was created using the feature template.
|
||||
visible: [content]
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Feature Request
|
||||
about: Suggest an idea for this project
|
||||
title: "[Feature] ..."
|
||||
labels: "Kind/Feature"
|
||||
body:
|
||||
- type: textarea
|
||||
id: idea
|
||||
attributes:
|
||||
label: What is your idea?
|
||||
description: Describe the feature you would like to see. Attach any screenshots or mockups if you have them.
|
||||
placeholder: I would like to see...
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of Photon are you running? You can find this in the footer of the app.
|
||||
options:
|
||||
- 1.0.0
|
||||
- 0.1.4
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This issue was created using the feature template.
|
||||
visible: [content]
|
||||
@@ -0,0 +1,18 @@
|
||||
name: main
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+.[0-9]+.[0-9]+'
|
||||
|
||||
jobs:
|
||||
generate-json:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Setup environment
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Update README version
|
||||
run: |
|
||||
CURRENT_TAG=$(git describe --tags --abbrev=0)
|
||||
sed -i "s#version-[0-9]*\.[0-9]*\.[0-9]*-#version-$CURRENT_TAG-#g" README.md
|
||||
@@ -1,37 +1,107 @@
|
||||
# Photon Screenshot Dashboard
|
||||
|
||||
The PHP Screenshot Management Dashboard
|
||||

|
||||
|
||||
To deploy Photon, use the included `docker-compose-example.yml`.
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
Ensure you have a data folder that contains your screenshots. Current supported mimetypes are `JPG`, `PNG`, `GIF` and `MP4`.
|
||||
|
||||
```
|
||||
services:
|
||||
photon:
|
||||
container_name: photon_dashboard
|
||||
image: git.jrdn.dev/jordanwalster/photon-dashboard:latest
|
||||
ports:
|
||||
- 8090:80
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ./data
|
||||
target: /var/www/html/data
|
||||
bind:
|
||||
propagation: rshared
|
||||
environment:
|
||||
ADMIN_DOMAIN: photon.jrdn.dev
|
||||
SHARE_DOMAIN: ss.example.com
|
||||
USER_EMAIL: me@example.com
|
||||
A modern, self-hosted PHP screenshot and media management dashboard with powerful organization features, sharing capabilities, and a clean web interface.
|
||||
|
||||
The project consists of three main components:
|
||||
|
||||
1. **Photon Dashboard** (`photon`): Web interface for managing screenshots.
|
||||
2. **Photon Worker** (`worker`): Background processes (OCR and thumbnail generation).
|
||||
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 <repository-url>
|
||||
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
|
||||
|
||||
### Deployment Options
|
||||
|
||||
#### Standard Deployment
|
||||
Use `examples/compose-default.yml` for simple deployments:
|
||||
```bash
|
||||
docker-compose -f examples/compose-default.yml up -d
|
||||
```
|
||||
|
||||
There are additional environment variables that can be set to enable experimental features (defaults are set to false):
|
||||
#### Traefik – Custom Domains
|
||||
Use `examples/compose-traefik.yml` for reverse proxy setups, authentication and custom domains.
|
||||
|
||||
## Project Structure
|
||||
|
||||
| Environment Variable | Values | Default | Description |
|
||||
| -------------------- |:-----------------:|:-------:| ---------------------------------- |
|
||||
| TAGS_ENABLED | `true` \| `false` | false | Enables the tagging functionality |
|
||||
| SEARCH_ENABLED | `true` \| `false` | false | Enables screenshot search |
|
||||
| PAGE_LIMIT | `int` | 24 | Override the default page limit |
|
||||
```
|
||||
photon-dashboard/
|
||||
├── examples/
|
||||
│ ├── compose-default.yml # Default example for basic usage.
|
||||
│ ├── compose-traefik.yml # Traefik example for custom domain routing.
|
||||
│ └── .env.example # Environment configuration
|
||||
│
|
||||
└── changelog.md # Version history
|
||||
```
|
||||
|
||||
You can find the container image history [here](https://git.jrdn.dev/jordanwalster/-/packages/container/photon-dashboard/versions).
|
||||
## Updates
|
||||
|
||||
Container images are available at:
|
||||
- Dashboard: `git.jrdn.dev/photon/photon-dashboard:latest`
|
||||
- Worker: `git.jrdn.dev/photon/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
|
||||
```
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# Photon Dashboard - QA Testing Matrix
|
||||
|
||||

|
||||
|
||||
This document outlines the test plan for the Photon Dashboard application to ensure all features are working as expected.
|
||||
|
||||
| Feature | Test Case | Expected Result |
|
||||
| :--- | :--- | :--- |
|
||||
| **Image Upload** | Upload a single JPG image. | Image appears in the main gallery. |
|
||||
| | Upload multiple images (JPG, PNG, GIF) at once. | All images appear in the main gallery. |
|
||||
| | Upload an image into a specific folder. | Image appears inside the selected folder. |
|
||||
| | Attempt to upload an unsupported file type (e.g., .txt). | An error message is displayed, and the file is not uploaded. |
|
||||
| **Image Deletion** | Send a single image to the trash. | Image is removed from the main gallery and appears in the Trash view. |
|
||||
| | Send multiple selected images to the trash. | All selected images are moved to the Trash view. |
|
||||
| | Permanently delete an image from the trash. | Image is permanently removed and cannot be restored. |
|
||||
| | Permanently delete multiple images from the trash. | All selected images are permanently removed. |
|
||||
| | Empty the entire trash. | All images in the trash are permanently deleted. |
|
||||
| **Image Restoration** | Restore a single image from the trash. | Image is moved back to its original location in the gallery. |
|
||||
| | Restore multiple selected images from the trash. | All selected images are moved back to their original locations. |
|
||||
| | Restore all images from the trash. | All images are moved back to their original locations. |
|
||||
| **Image Renaming** | Rename an image with a valid name. | The image's name is updated in the gallery and on the filesystem. |
|
||||
| | Attempt to rename an image with special characters or an empty name. | An error is shown, and the name is not changed. |
|
||||
| **Image Privacy** | Make a single image private. | The image is marked as private and is only visible when the 'Private' filter is active. |
|
||||
| | Make multiple selected images private. | All selected images are marked as private. |
|
||||
| | Make a private image public. | The image is no longer marked as private. |
|
||||
| **Tagging** | Create a new tag. | The new tag appears in the tags sidebar. |
|
||||
| | Assign a single tag to an image. | The tag is associated with the image. Filtering by this tag shows the image. |
|
||||
| | Assign multiple tags to an image. | All selected tags are associated with the image. |
|
||||
| | Assign a tag to multiple selected images. | The tag is associated with all selected images. |
|
||||
| | Remove a tag from an image. | The tag is no longer associated with the image. |
|
||||
| | Delete a tag. | The tag is removed from the system and from all images it was assigned to. |
|
||||
| **Folder Management** | Create a new folder. | The new folder appears in the folders sidebar. |
|
||||
| | Rename a folder. | The folder's name is updated in the sidebar and on the filesystem. |
|
||||
| | Move images to a folder. | The selected images are moved into the target folder. |
|
||||
| | Delete a folder. | The folder is removed. An appropriate prompt should handle what happens to the images inside. |
|
||||
| **Image Download** | Download a single image. | The original, full-resolution image is downloaded. |
|
||||
| | Download multiple selected images. | A ZIP file containing the selected images is created and downloaded. |
|
||||
| | Download a folder as a ZIP file. | A ZIP file containing all images in the folder is downloaded. |
|
||||
| **Background Tasks** | Verify image caching. | Thumbnails are generated and stored in `data/.cache/`. Subsequent loads are faster. |
|
||||
| | Verify update check. | The application correctly checks for new versions on startup. |
|
||||
| **UI & Layout** | Toggle sidebar visibility (Folders/Tags). | The corresponding sidebar section expands or collapses. The state is saved in cookies. |
|
||||
| | Change number of columns. | The gallery grid updates to show the selected number of columns. The state is saved in cookies. |
|
||||
| | Responsive Design - Mobile View | The layout adapts to a small screen, and all functionality is accessible. |
|
||||
| | Responsive Design - Tablet View | The layout adapts to a medium screen. |
|
||||
|
||||
+243
-8
@@ -2,12 +2,247 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [v0.0.9] - 2025-04-21
|
||||
## [v1.1.2] - 2026-07-31
|
||||
|
||||
### Added
|
||||
- Apple Touch Icon for bookmarked pages.
|
||||
- Private image thumbnail when sent into social chats.
|
||||
- Additional format for thumbnail extraction to support format `YYYY-MM-DD_HH-MM-SS`.
|
||||
- Support for creating API keys.
|
||||
|
||||
### Fixed
|
||||
- Occasional redirection to a previous page when deleting or restoring images.
|
||||
- Assign tags field remembers existing tags.
|
||||
- Allowing removal of tags from an image.
|
||||
- MP4 files unplayable from share URL.
|
||||
- Trash multiple selected files failing on folders with spaces.
|
||||
|
||||
## [v1.1.1] - 2026-05-04
|
||||
|
||||
### Fixed
|
||||
- Crowded button layout when selecting items on mobile.
|
||||
- Alignment of grid when display is between 1200px - 992px.
|
||||
- Generating thumbnails task showing as hanging despite succeeding.
|
||||
|
||||
## [v1.1.0] - 2026-05-04
|
||||
|
||||
### Added
|
||||
- Mobile-first UI with two offcanvas sidebars for page navigation and quick actions.
|
||||
- Context menu on long-press for images.
|
||||
- Breakdown for storage in sidebar.
|
||||
- Ability to scroll sidebar if content starts to overflow.
|
||||
- Custom scroll bars.
|
||||
- Redirection to 'All Screenshots' from a deleted folder or tag when currently using that page.
|
||||
|
||||
### Changed
|
||||
- Disabled cache on shared links to prevent newly private links from being cached on client systems.
|
||||
- Delete tag/folder context menu buttons no longer trigger modal.
|
||||
- Sidebar folder icons (both parent and child).
|
||||
- Grid layout on mobile shows two in a row instead of a single image.
|
||||
- Extended cache period on thumbnails to ensure rapid page loads.
|
||||
- Made text in sidebar bold.
|
||||
- Default page limit set to 24 (Override with `PAGE_LIMIT`).
|
||||
- Headers are sticky to keep controls visible when scrolling.
|
||||
- Disabled text selection on pagination bar.
|
||||
|
||||
### Fixed
|
||||
- File timestamps updating after moving folders or renaming.
|
||||
- Trash icon not appearing when folder empty.
|
||||
- Scrolling twice if window height was not tall enough to fit all elements.
|
||||
|
||||
## [v1.0.3] - 2026-05-02
|
||||
|
||||
### Added
|
||||
- Private Sidebar button for easier viewing of images set to private.
|
||||
- Make private button to multi-select actions.
|
||||
- Download button to multi-select actions.
|
||||
- Hold shift to select.
|
||||
- Select all (on page) button.
|
||||
- New version available message in footer.
|
||||
- Generate thumbnail endpoint.
|
||||
- Feedback button to footer.
|
||||
|
||||
### Changed
|
||||
- Updated icon library to latest.
|
||||
- Upgraded to PHP 8.5.
|
||||
- Icon for active tags now shows a tag (due to icon library updates).
|
||||
- Moved changelog link into version number.
|
||||
|
||||
### Fixed
|
||||
- Bug where images with capitalised extensions could not be trashed by using "Empty trash" button.
|
||||
|
||||
## [v1.0.2] - 2026-05-01
|
||||
|
||||
### Added
|
||||
- Counter when force generating thumbnails.
|
||||
- Context menu for folders in the sidebar (rename and delete actions).
|
||||
- Confirm permanently delete popups.
|
||||
- Restore database backup tool to recover OCR and tags.
|
||||
|
||||
### Fixed
|
||||
- Database export includes numeric array indices as column names, corrupting the backup.
|
||||
- OCR results not showing within folder context.
|
||||
- OCR results not showing for images in folders from within a tag context.
|
||||
|
||||
## [v1.0.1] - 2026-04-30
|
||||
|
||||
### Added
|
||||
- Clear search function on page type switch.
|
||||
- Remove tags and Move Folder options to Actions dropdown when searching.
|
||||
|
||||
### Changed
|
||||
- Image caching now has a time limit and processing is limited to 50 items at a time to prevent resource exhaustion.
|
||||
- Colours in actions dropdown more muted.
|
||||
|
||||
### Fixed
|
||||
- Missing protocol on copy to clipboard.
|
||||
- Space handling on next page when using folders.
|
||||
- Space handling when using search in folders.
|
||||
- Database doesn't update structure when attempting to make an image private.
|
||||
- Attempted database update when images don't yet exist in the table.
|
||||
- Restore & Permanently delete selected buttons not working.
|
||||
|
||||
## [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]
|
||||
> Web container is being removed in the next update, update your compose files on the next update.
|
||||
|
||||
### Added
|
||||
- Folders for better file management, items in folders can also have tags.
|
||||
- Ability to untag selected images instead of removing tags one at a time.
|
||||
|
||||
### Changed
|
||||
- Upload destination can now be selected when there are new folders.
|
||||
|
||||
### Fixed
|
||||
- Bug where pagination would display pages that don't exist.
|
||||
|
||||
## [v0.1.3] - 2025-05-03
|
||||
|
||||
### Added
|
||||
- Upload button for uploading via web dashboard.
|
||||
|
||||
### Changed
|
||||
- Column dropdown is now a button that switches between options.
|
||||
- Some old icons have been switched to FontAwesome icons.
|
||||
- Sidebar remaining open flag is now set by a cookie instead of a session token.
|
||||
|
||||
### Fixed
|
||||
- Page refresh loop when changing column count.
|
||||
- Scrollbar failing to show after page content changes.
|
||||
- Bug where images with capitalised file extensions do not appear in the grid.
|
||||
- Unable to use multi select actions on images with spaces in their names.
|
||||
|
||||
### Removed
|
||||
- `TAGS_ENABLED`, `SEARCH_ENABLED` and `TRASH_ENABLED` environment variables, these are now permanently enabled.
|
||||
|
||||
## [v0.1.2] - 2025-04-29
|
||||
|
||||
> [!WARNING]
|
||||
> This introduces a breaking change that requires the latest version of the photon-worker container image.
|
||||
|
||||
### Added
|
||||
- Image compression worker function, decreasing page load times.
|
||||
|
||||
## [v0.1.1] - 2025-04-28
|
||||
|
||||
### Fixed
|
||||
- Columns not updating when selected in dropdown.
|
||||
- Icons missing from context menu on search page.
|
||||
|
||||
### Changed
|
||||
- Version numbers are now taken from container image.
|
||||
|
||||
## [v0.1.0] - 2025-04-27
|
||||
|
||||
### Fixed
|
||||
- Sharing URL Scheme set to `https` regardless of setting in environment variables.
|
||||
- Search not clearing the first two characters after emptying search field.
|
||||
- Error handing for existing tag names.
|
||||
- Double click bug on modals.
|
||||
- Permanently deleting images did not remove from db
|
||||
- Pagination on tagged pages showed in the corner.
|
||||
|
||||
### Changed
|
||||
- Upgraded to PHP 8.
|
||||
- Database engine now using MySQL.
|
||||
- Mandatory setting for admin url removed.
|
||||
|
||||
### Added
|
||||
- Search by image content using OCR via worker container.
|
||||
- Button for applying actions to multiple images at a time.
|
||||
- Automatic migration tool for SQLite to MySQL
|
||||
- Tag not found page for nonexistent tags.
|
||||
- Custom time zone environment variable.
|
||||
- Form validation using JS for frontend.
|
||||
- Messaging for no OCR table.
|
||||
- Icons on context menu.
|
||||
|
||||
### Removed
|
||||
- Image format being shown in corner.
|
||||
|
||||
## [v0.0.9] - 2025-04-21
|
||||
|
||||
### Added
|
||||
- Introduced search functionality.
|
||||
- Rename tag button.
|
||||
- Restore all button for trashed images.
|
||||
|
||||
### Changed
|
||||
- Pages no longer use query strings and instead use paths.
|
||||
@@ -16,10 +251,10 @@ All notable changes to this project will be documented in this file.
|
||||
- File format shown in badge.
|
||||
- Links are now path based instead of query string based.
|
||||
|
||||
### Added
|
||||
- Introduced search functionality.
|
||||
- Rename tag button.
|
||||
- Restore all button for trashed images.
|
||||
### Fixed
|
||||
- Occasional redirection to a previous page when deleting or restoring images.
|
||||
- Assign tags field remembers existing tags.
|
||||
- Allowing removal of tags from an image.
|
||||
|
||||
## [v0.0.8] - 2025-01-30
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
services:
|
||||
photon:
|
||||
container_name: photon_dashboard
|
||||
image: git.jrdn.dev/jordanwalster/photon-dashboard:latest
|
||||
ports:
|
||||
- 8090:80
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ./data
|
||||
target: /var/www/html/data
|
||||
bind:
|
||||
propagation: rshared
|
||||
environment:
|
||||
ADMIN_DOMAIN: photon.jrdn.dev
|
||||
SHARE_DOMAIN: ss.example.com
|
||||
USER_EMAIL: me@example.com
|
||||
TAGS_ENABLED: false
|
||||
SEARCH_ENABLED: false
|
||||
@@ -0,0 +1,25 @@
|
||||
### Photon Environment Variables
|
||||
PHOTON_PORT=8090
|
||||
USER_EMAIL=photon@jrdn.dev
|
||||
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
|
||||
|
||||
### Basic Auth Credentials (for Traefik) Use htpasswd to generate the password hash.
|
||||
BASIC_AUTH_USER=admin
|
||||
BASIC_AUTH_PASSWORD='$apr1$LbKLWjeg$i69pFbEbwQ61CtsjWGq/D0'
|
||||
|
||||
### Photon Worker Environment Variables
|
||||
SCAN_RATE=10
|
||||
|
||||
### Database Environment Variables
|
||||
MYSQL_HOST=db
|
||||
MYSQL_DATABASE=photon
|
||||
MYSQL_USER=photon
|
||||
MYSQL_PASSWORD=changeme
|
||||
MYSQL_ROOT_PASSWORD=pleasechangeme
|
||||
@@ -0,0 +1,31 @@
|
||||
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
|
||||
ports:
|
||||
- ${PHOTON_PORT:-8090}:80
|
||||
env_file:
|
||||
- .env
|
||||
worker:
|
||||
container_name: photon_worker
|
||||
image: git.jrdn.dev/jordanwalster/photon-worker:latest
|
||||
volumes:
|
||||
- ${DATA_PATH}:/var/www/html/data
|
||||
env_file:
|
||||
- .env
|
||||
db:
|
||||
container_name: photon_db
|
||||
image: mariadb
|
||||
volumes:
|
||||
- db:/var/lib/mysql
|
||||
env_file:
|
||||
- .env
|
||||
volumes:
|
||||
db:
|
||||
@@ -0,0 +1,60 @@
|
||||
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"
|
||||
# Basic auth for dashboard (Replace this with your own credentials).
|
||||
- "traefik.http.middlewares.photon-basic-auth.basicauth.users=${BASIC_AUTH_USER}:${BASIC_AUTH_PASSWORD}"
|
||||
- "traefik.http.routers.photon.middlewares=photon-basic-auth"
|
||||
|
||||
# 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:
|
||||
Reference in New Issue
Block a user