- 统一图片、视频和文件的上传策略,支持文件大小、格式和限流配置 - 新上传的图片、视频和文件默认保存到本地磁盘,并支持修改默认存储后端 - 图库、视频库和文件库新增搜索与批量删除功能 - 更新视频与文件 API 文档,并完善服务端扩展名和内容类型校验 - 完善备份恢复统计,分别展示媒体记录和存储对象进度 - 完善用户级清空存储流程,清理当前用户的媒体、任务和缓存 - 修复清空存储后最近任务残留以及媒体逻辑遗漏视频和文件的问题 - 增加站点同步异常恢复和超时兜底处理 - 缩略图 FFmpeg 限制为单线程并增加 10 秒超时保护 - 低内存服务器开启 HLS 转码时显示风险提示 - 完善 m3u8 临时合并文件的下载后、到期和启动时清理 - 更新中英文更新日志,并将版本号提升至 1.5.0
253 lines
7.9 KiB
Markdown
253 lines
7.9 KiB
Markdown
# Changelog
|
|
|
|
Version history and notable changes. The full log is also in the repo root [CHANGELOG.md](https://github.com/O96u/PicHost/blob/main/CHANGELOG.md).
|
|
|
|
---
|
|
|
|
## [1.5.0] — 2026-10-17
|
|
|
|
### Added
|
|
|
|
- Search and batch deletion for the image, video, and file libraries
|
|
- Unified upload policy for all media with configurable size, format, and rate limits
|
|
- Default storage backend selection for newly uploaded images, videos, and files
|
|
- High-risk storage clearing with typed confirmation, scoped to the current user
|
|
- Low-memory warning when enabling HLS transcoding
|
|
|
|
### Improved
|
|
|
|
- Backup and restore progress now reports media records and storage objects separately
|
|
- Video uploads are limited to complete container formats with server-side validation
|
|
- Thumbnail FFmpeg processing is single-threaded and protected by a timeout
|
|
- Temporary m3u8-to-MP4 files are cleaned after download, on expiry, and during startup
|
|
|
|
### Fixed
|
|
|
|
- Stale recent tasks after clearing storage and media logic that only covered images
|
|
- Recovery fallback for interrupted site synchronization
|
|
|
|
## [1.4.4] — 2026-10-10
|
|
|
|
### Fixed
|
|
|
|
- Cap login verification supports hashwx challenges and still accepts older SHA-256 site keys
|
|
|
|
## [1.4.3] — 2026-10-09
|
|
|
|
### Added
|
|
|
|
- **Telegram storage backend**: store images in a channel or group; public URLs stay on PicHost; optional API proxy
|
|
|
|
## [1.4.2] — 2026-09-23
|
|
|
|
### Fixed
|
|
|
|
- Gallery batch tagging and upload token auth (incl. legacy `API_UPLOAD_TOKEN`)
|
|
|
|
### Improved
|
|
|
|
- Single API token per account; upload `tagNames` only; tag management sort/mobile layout; API doc table layout
|
|
|
|
## [1.4.1] — 2026-09-16
|
|
|
|
### Added
|
|
|
|
- **Upload policy (Settings → Basic)**: max size, allowed formats, rate limits, preserve originals; env override
|
|
- **Upload API**: optional `tagNames` for tagging by name (create or reuse)
|
|
|
|
### Improved
|
|
|
|
- Configurable login rate limits; settings layout updates
|
|
|
|
## [1.4.0] — 2026-09-09
|
|
|
|
### Added
|
|
|
|
- **Tags**: per-user colored tags; Settings management; batch tagging on upload/gallery; OR / AND gallery filters
|
|
- **Activity log**: login, delete, settings, tag operations; date and user filters
|
|
- **API**: tag and tagging endpoints; upload `tagIds`; list/stats tag filters
|
|
|
|
### Docs
|
|
|
|
- Screenshots and README updated for v1.4 UI
|
|
|
|
## [1.3.0] — 2026-09-07
|
|
|
|
### Added
|
|
|
|
- **Site backup / restore / cross-backend sync** with job center; CLI `backup-export`, `backup-restore`, `storage-sync`
|
|
|
|
## [1.2.8] — 2026-09-04
|
|
|
|
### Improved
|
|
|
|
- **Dual-domain**: confirm dialog on save/setup with lockout risks and `clear-domains` recovery; no longer blocks save based on current Host
|
|
|
|
### Added
|
|
|
|
- **Ops CLI**: `clear-domains` clears site/image URL settings from DB (`docker exec pichost clear-domains`)
|
|
|
|
### Docs
|
|
|
|
- FAQ and dual-domain / reverse-proxy guides updated with recovery steps
|
|
|
|
## [1.2.7] — 2026-09-03
|
|
|
|
### Added
|
|
|
|
- **Login verification**: slider, Cloudflare Turnstile, or Cap on login/register; configure under Settings → Access
|
|
- **Ops CLI**: `slider` resets verification to the local slider (`docker exec pichost slider`)
|
|
|
|
### Improved
|
|
|
|
- Login captcha reloads correctly after logout
|
|
|
|
## [1.2.6] — 2026-09-01
|
|
|
|
### Added
|
|
|
|
- **Admin UI**: redesigned Settings, API, Gallery, and Storage pages; API page includes live debugging
|
|
- **Gallery filter**: filter by storage backend
|
|
- **Storage IDs**: new R2 / COS / OSS / S3 backends get `r2-*`, `cos-*`, `oss-*`, or `s3-*` prefixes
|
|
|
|
### Improved
|
|
|
|
- Activity log table styling and path truncation
|
|
- Storage backend card metadata layout
|
|
- Docs site and README screenshots updated
|
|
|
|
## [1.2.5] — 2026-08-31
|
|
|
|
### Added
|
|
|
|
- **Gallery page**: nav “Stats” renamed to “Gallery” (`/gallery`); click a thumbnail for a detail modal (full image, dimensions, upload source, storage path, link copy)
|
|
- **List actions**: select all / invert selection; single-image delete moved into the detail modal
|
|
- **Upload source**: gallery API returns web / API upload source (from activity logs)
|
|
|
|
### Improved
|
|
|
|
- README tech stack section
|
|
|
|
### Removed
|
|
|
|
- `/stats` route (no compatibility redirect)
|
|
|
|
## [1.2.4] — 2026-08-31
|
|
|
|
### Fix
|
|
|
|
- **Empty referer whitelist still blocked hotlinks**: with no Referer whitelist configured, direct browser access worked but embedded images on blogs/forums returned 403; protection now runs only when a whitelist is configured
|
|
|
|
## [1.2.3] — 2026-08-30
|
|
|
|
### Fix
|
|
|
|
- **Short links + date-based storage**: bare filename URLs (e.g. `https://host/xxx.webp`) no longer map to flat `images/xxx.webp`; SQLite index resolves the full `images/YYYY/MM/xxx.webp` key so thumbnails and short links work again
|
|
|
|
---
|
|
|
|
## [1.2.2] — 2026-08-30
|
|
|
|
> **Restart the service** after upgrading so middleware and API updates take effect.
|
|
|
|
### Dual-domain settings & Host isolation
|
|
|
|
#### Fixes
|
|
|
|
| Issue | Description |
|
|
| ----- | ----------- |
|
|
| Site URL cleared by mistake | Saving Settings could write an empty `site_base_url` when disabling dual-domain or editing only the image URL |
|
|
| Config vs effective URL mixed | `GET /api/settings` used to blend DB values with `request.origin`, confusing the Settings UI |
|
|
| Third-host bypass | Unlisted hosts (`pages.dev`, bare IP, old image domains) were not blocked by middleware |
|
|
|
|
#### Improvements
|
|
|
|
**Settings API (`GET /api/settings`)**
|
|
|
|
| Field | Meaning |
|
|
| ----- | ------- |
|
|
| `siteBaseUrl` / `imageBaseUrl` | **Configured** values (DB → env), no request fallback |
|
|
| `effectiveSiteBaseUrl` / `effectiveImageBaseUrl` | **Link generation**, falls back to request origin when unset |
|
|
| `runtime.currentOrigin` | Detected access URL (display only, not saved) |
|
|
| `runtime.hostRole` | `site` / `image` / `unknown` / `single` |
|
|
|
|
**Save API (`PATCH /api/settings`)**
|
|
|
|
- New body field `domainSeparation` (`true` / `false`)
|
|
- `domainSeparation: true` requires both URLs with different hostnames
|
|
- `domainSeparation: false` allows clearing the site URL
|
|
- Without `domainSeparation`, cannot clear `siteBaseUrl` while dual-domain is active
|
|
|
|
**Settings / setup UI**
|
|
|
|
- Form uses configured values; “Active” line shows `effective*`
|
|
- Shows detected access URL; **no longer** auto-fills `window.location.origin`
|
|
- “Use detected URL” button (opt-in)
|
|
- Confirmation modal when disabling dual-domain
|
|
- Warning when `hostRole === 'unknown'` with dual-domain on
|
|
|
|
**Host middleware**
|
|
|
|
- When dual-domain is on, unlisted hosts get **404** at the app layer (all methods)
|
|
- `localhost` / `127.0.0.1` exempt in development
|
|
- Complements Nginx `default_server` — use both layers in production
|
|
|
|
#### Docs
|
|
|
|
- Rewrote [Cloudflare deployment](./cloudflare-deployment.md)
|
|
- Updated [Dual-domain separation](./domain-separation.md) for third-host blocking
|
|
- Added this changelog page
|
|
|
|
#### Upgrade notes
|
|
|
|
- **No** database migration or CLI step
|
|
- If the site URL was cleared earlier: re-enter it in **Settings**, or set `SITE_BASE_URL` in env and restart
|
|
- Production: match proxy `server_name` to Settings; keep a default server block
|
|
|
|
---
|
|
|
|
## [1.2.1] — 2026-08-29
|
|
|
|
### Added
|
|
|
|
- Slide puzzle login captcha
|
|
- VitePress docs site on GitHub Pages
|
|
- `npm run docs:dev` / `docs:build` / `docs:preview`
|
|
|
|
### Fixed
|
|
|
|
- Gallery not refreshing after delete on stats page
|
|
- Pagination jump with `type="number"` input
|
|
- Copy-link format preference not persisting off home route
|
|
- Captcha UI alignment
|
|
|
|
### Improved
|
|
|
|
- README trimmed; details moved to docs
|
|
- Dual-domain docs: unknown Host risk, Cloudflare guide
|
|
|
|
---
|
|
|
|
## [1.2.0] — 2026-08-28
|
|
|
|
### Changed
|
|
|
|
- All images under `data/images/`; parallel top-level folders beside `images` are no longer used
|
|
|
|
### Added
|
|
|
|
- Startup index sync (disk scan, legacy key normalization, orphan cleanup)
|
|
|
|
---
|
|
|
|
## [1.1.x] summary
|
|
|
|
| Version | Highlights |
|
|
| ------- | ---------- |
|
|
| 1.1.5 | API upload preview fix; file existence check before serve |
|
|
| 1.1.4 | Date-based storage paths; site host blocks image URLs |
|
|
| 1.1.3 | Dual-domain (`SITE_BASE_URL` / `IMAGE_BASE_URL`); Host middleware |
|
|
| 1.1.0 | Multi storage backends (S3 / R2) |
|
|
|
|
Older entries: [GitHub CHANGELOG](https://github.com/O96u/PicHost/blob/main/CHANGELOG.md).
|