Compare commits

..
8 Commits
Author SHA1 Message Date
PiEgg a24af3006f 📝 Docs: prefix sponsor descriptions with brand names 2026-09-24 09:07:05 +08:00
PiEgg 99b0331561 📝 Docs: update sponsor table with Modelflare and Castaly 2026-09-23 16:08:55 +08:00
PiEgg d5543073ea ✨ Feature: rebuild picgo.app when a release is published (#1444)
* ✨ Feature: rebuild picgo.app when a release is published

The download page on picgo.app reads the installer list from the GitHub API at
build time, so a new release does not appear there until the site rebuilds.

Fires on `release: published` rather than on the tag push, because releases are
created as drafts here -- at tag time `releases/latest` still points at the
previous version, so the rebuild would pick up stale installers.

Needs a HOMEPAGE_DISPATCH_TOKEN secret with workflow scope on the homepage
repository; the existing GH_TOKEN is not reused so the two can be revoked
independently.

* 📦 Chore: allow builds for the native dependencies

pnpm 11 gates build scripts behind an explicit allowlist, so a fresh install
stopped partway and asked for `pnpm approve-builds`, which breaks any
non-interactive run including the husky pre-commit hook.

Records the approvals that were already implied by onlyBuiltDependencies. The
spacing change in supportedArchitectures is pnpm rewriting the file.
2026-09-01 20:01:23 +08:00
PiEgg 07ec7068a5 ⬆️ Upgrade: bump @picgo/bump-version to 3.0.0
3.0.0 ships as ESM and renamed the configs it exposes to consumers, so
the cz-customizable and commitlint paths gain their .cjs extensions.

It also stopped shipping contributor tooling as runtime dependencies,
which this repo was relying on: @commitlint/cli reached the commitlint
script only as a transitive dependency of bump-version 2, so the upgrade
would have removed the binary the commit-msg hook needs. It is now a
direct devDependency.

Drops the "husky" field, which has been dead config since c84d542 moved
this repo to husky 9 — v9 reads .husky/ and ignores it entirely. The
circular-dependency check it used to declare has been unhooked ever
since, so lint:dpdm moves to .husky/pre-commit where it actually runs.
Confirmed it both passes on the current tree and fails on a deliberately
introduced cycle, so it is a real gate rather than a no-op.
2026-08-22 22:58:01 +08:00
PiEgg d7d2c22994 📝 Docs: add AI-friendly section for skills and dsh plugin 2026-08-22 13:09:52 +08:00
PiEgg e21e92c0d3 📝 Docs: replace Warp sponsorship with NocoBase 2026-08-17 14:59:27 +08:00
PiEgg a0d5dfaed1 🐛 Fix(gui): make backgroundThrottling optional in window options type
#1435 removed `backgroundThrottling: false` from `defaultWebPreferences`, but
`IBrowserWindowOptions.webPreferences` still declared the field as required, so
`tsc` failed on all five window definitions.

Mark it optional rather than dropping it: omitting the field keeps Electron's
default (throttle when hidden), which is what #1435 intended, while individual
windows can still opt out explicitly if they ever need full-speed background
rendering.
2026-08-17 14:59:09 +08:00
WayneVoyagerandWayneVoyager 45fd078e4e 🐛 Fix(gui): 移除 backgroundThrottling: false 修复 macOS GPU 进程空转 (#1435)
Co-authored-by: WayneVoyager <hanghaiwang@tencent.com>
2026-08-14 16:13:01 +08:00
9 changed files with 684 additions and 832 deletions
+32
View File
@@ -0,0 +1,32 @@
name: Notify Homepage
# Releases are created as drafts, so a tag push is too early -- the download
# page reads releases/latest, which only reflects a release once it is
# published. Firing on `published` also covers the case where a draft sits for
# days before going live.
on:
release:
types: [published]
workflow_dispatch:
jobs:
rebuild-homepage:
name: Rebuild picgo.app
runs-on: ubuntu-latest
steps:
- name: Trigger homepage deploy
env:
GH_TOKEN: ${{ secrets.HOMEPAGE_DISPATCH_TOKEN }}
run: |
if [ -z "$GH_TOKEN" ]; then
echo "::error::HOMEPAGE_DISPATCH_TOKEN is not set"
exit 1
fi
# The homepage builds its download list from the GitHub API at build
# time, so it needs a rebuild to pick up a new release.
gh workflow run deploy.yml \
--repo PicGo/PicGo-Homepage \
--ref production
echo "Requested a production rebuild of picgo.app"
+1
View File
@@ -1 +1,2 @@
pnpm check pnpm check
pnpm run lint:dpdm
+56 -25
View File
@@ -1,28 +1,43 @@
<div align="center" markdown="1"> <div align="center">
<sup>Special thanks to:</sup> <h3>Special thanks to</h3>
<br> <table>
<a href="https://go.warp.dev/picgo"> <tr>
<img alt="Warp sponsorship" width="400" src="https://raw.githubusercontent.com/warpdotdev/brand-assets/refs/heads/main/Github/Sponsor/Warp-Github-LG-03.png"> <td align="center" valign="middle" width="50%">
</a> <a href="https://modelflare.dev/sign-up?partner=1GIMVVBLWP1V">
<img alt="Modelflare sponsorship" width="400" src="https://pics.picgo.app/m/ef1a160c-c9ce-4605-9b9c-b2d355cd2de4.png">
### [Warp, the intelligent terminal for developers](https://go.warp.dev/picgo) </a>
[Available for macOS, Linux, & Windows](https://go.warp.dev/picgo)<br> <h3><a href="https://modelflare.dev/sign-up?partner=1GIMVVBLWP1V">Modelflare</a></h3>
<p>Modelflare: Full strength, stable, nothing watered down. Global SOTA models at a lower cost.</p>
</div> </td>
<td align="center" valign="middle" width="50%">
<div align="center" markdown="1"> <a href="https://castaly.modelflare.dev/sign-up?partner=1GIMVVBLWP1V">
<sup>Sponsored by:</sup> <img alt="Castaly sponsorship" width="400" src="https://pics.picgo.app/m/284def41-2f23-47e6-9d64-7017d386a221.png">
<br> </a>
<a href="https://console.neon.tech/app/?promo=PicGo"> <h3><a href="https://castaly.modelflare.dev/sign-up?partner=1GIMVVBLWP1V">Castaly</a></h3>
<picture> <p>Castaly: Full strength, no upscaling. 40+ image and video models, including NSFW.</p>
<source media="(prefers-color-scheme: dark)" srcset="https://neon.com/brand/neon-logo-dark-color.svg"> </td>
<source media="(prefers-color-scheme: light)" srcset="https://neon.com/brand/neon-logo-light-color.svg"> </tr>
<img alt="Neon sponsorship" width="400" src="https://neon.com/brand/neon-logo-dark-color.svg"> <tr>
</picture> <td align="center" valign="middle" width="50%">
</a> <a href="https://www.nocobase.com/?utm_source=picgo">
<img alt="NocoBase sponsorship" width="400" src="https://static-docs.nocobase.com/Logo-Black.png">
### [Fast Postgres Databases for Teams and Agents](https://console.neon.tech/app/?promo=PicGo) </a>
<h3><a href="https://www.nocobase.com/?utm_source=picgo">NocoBase</a></h3>
<p>AI + No-Code Build reliable business systems</p>
</td>
<td align="center" valign="middle" width="50%">
<a href="https://console.neon.tech/app/?promo=PicGo">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://neon.com/brand/neon-logo-dark-color.svg">
<source media="(prefers-color-scheme: light)" srcset="https://neon.com/brand/neon-logo-light-color.svg">
<img alt="Neon sponsorship" width="400" src="https://neon.com/brand/neon-logo-dark-color.svg">
</picture>
</a>
<h3><a href="https://console.neon.tech/app/?promo=PicGo">Neon</a></h3>
<p>Fast Postgres Databases for Teams and Agents</p>
</td>
</tr>
</table>
</div> </div>
@@ -92,6 +107,20 @@ PicGo is built around a fast, low-friction image upload experience:
- **Even more possibilities**: image compression, watermarking, renaming, Markdown image migration, and more. - **Even more possibilities**: image compression, watermarking, renaming, Markdown image migration, and more.
- Explore plugins: [Awesome-PicGo](https://github.com/PicGo/Awesome-PicGo) - Explore plugins: [Awesome-PicGo](https://github.com/PicGo/Awesome-PicGo)
### 🤖 AI-friendly
More and more writing is handed off to AI. But the screenshots and charts it produces sit on your disk as `![](./chart.png)`, and they need to become real links before you publish. PicGo lets AI upload them too:
- **[PicGo Skills](https://github.com/PicGo/skills)**: official Agent Skills that teach AI when and how to upload. Works with any AI tool that supports the skills format.
```bash
npx skills@latest add PicGo/skills
```
- **[DeepSeek Harness plugin](https://github.com/PicGo/dsh-plugin)**: install it in [dsh](https://github.com/deepseek-ai/deepseek-harness) and your agent can upload to your image host on its own.
```bash
dsh plugin --profile web add @picgo/dsh-plugin
```
Both reuse the image hosts and plugins you already configured in PicGo—nothing to set up twice. Read more in [this post](https://picgo.app/blog/2026/picgo-deepseek-harness-plugin/).
### 🛠 Developer-friendly ### 🛠 Developer-friendly
- **HTTP API**: upload via HTTP requests (v2.2.0+), making it easy to integrate with other tools. - **HTTP API**: upload via HTTP requests (v2.2.0+), making it easy to integrate with other tools.
- **Open source**: fully open-source and transparent. - **Open source**: fully open-source and transparent.
@@ -163,6 +192,8 @@ Electron binaries are stored under `~/.electron/`. If you need to refresh them,
- [vs-picgo](https://github.com/PicGo/vs-picgo): PicGo for VS Code. - [vs-picgo](https://github.com/PicGo/vs-picgo): PicGo for VS Code.
- [flutter-picgo](https://github.com/PicGo/flutter-picgo): mobile app (Android & iOS). - [flutter-picgo](https://github.com/PicGo/flutter-picgo): mobile app (Android & iOS).
- [PicHoro](https://github.com/Kuingsmile/PicHoro): another mobile app compatible with PicGo config (Android only for now). - [PicHoro](https://github.com/Kuingsmile/PicHoro): another mobile app compatible with PicGo config (Android only for now).
- [skills](https://github.com/PicGo/skills): official Agent Skills that teach AI to upload with PicGo.
- [dsh-plugin](https://github.com/PicGo/dsh-plugin): PicGo plugin for DeepSeek Harness.
## Sponsorship ## Sponsorship
+56 -25
View File
@@ -1,28 +1,43 @@
<div align="center" markdown="1"> <div align="center">
<sup>Special thanks to:</sup> <h3>Special thanks to</h3>
<br> <table>
<a href="https://go.warp.dev/picgo"> <tr>
<img alt="Warp sponsorship" width="400" src="https://raw.githubusercontent.com/warpdotdev/brand-assets/refs/heads/main/Github/Sponsor/Warp-Github-LG-03.png"> <td align="center" valign="middle" width="50%">
</a> <a href="https://modelflare.dev/zh/sign-up?partner=1GIMVVBLWP1V">
<img alt="Modelflare sponsorship" width="400" src="https://pics.picgo.app/m/ef1a160c-c9ce-4605-9b9c-b2d355cd2de4.png">
### [Warp, the intelligent terminal for developers](https://go.warp.dev/picgo) </a>
[Available for macOS, Linux, & Windows](https://go.warp.dev/picgo)<br> <h3><a href="https://modelflare.dev/zh/sign-up?partner=1GIMVVBLWP1V">Modelflare</a></h3>
<p>Modelflare: 满血稳定不掺水,低成本享受全球 SOTA 模型。</p>
</div> </td>
<td align="center" valign="middle" width="50%">
<div align="center" markdown="1"> <a href="https://castaly.modelflare.dev/zh/sign-up?partner=1GIMVVBLWP1V">
<sup>Sponsored by:</sup> <img alt="Castaly sponsorship" width="400" src="https://pics.picgo.app/m/284def41-2f23-47e6-9d64-7017d386a221.png">
<br> </a>
<a href="https://console.neon.tech/app/?promo=PicGo"> <h3><a href="https://castaly.modelflare.dev/zh/sign-up?partner=1GIMVVBLWP1V">Castaly</a></h3>
<picture> <p>Castaly: 满血不超分,含 NSFW 在内 40+图片视频模型。</p>
<source media="(prefers-color-scheme: dark)" srcset="https://neon.com/brand/neon-logo-dark-color.svg"> </td>
<source media="(prefers-color-scheme: light)" srcset="https://neon.com/brand/neon-logo-light-color.svg"> </tr>
<img alt="Neon sponsorship" width="400" src="https://neon.com/brand/neon-logo-dark-color.svg"> <tr>
</picture> <td align="center" valign="middle" width="50%">
</a> <a href="https://www.nocobase.com/?utm_source=picgo">
<img alt="NocoBase sponsorship" width="400" src="https://static-docs.nocobase.com/Logo-Black.png">
### [Fast Postgres Databases for Teams and Agents](https://console.neon.tech/app/?promo=PicGo) </a>
<h3><a href="https://www.nocobase.com/?utm_source=picgo">NocoBase</a></h3>
<p>AI + No-Code Build reliable business systems</p>
</td>
<td align="center" valign="middle" width="50%">
<a href="https://console.neon.tech/app/?promo=PicGo">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://neon.com/brand/neon-logo-dark-color.svg">
<source media="(prefers-color-scheme: light)" srcset="https://neon.com/brand/neon-logo-light-color.svg">
<img alt="Neon sponsorship" width="400" src="https://neon.com/brand/neon-logo-dark-color.svg">
</picture>
</a>
<h3><a href="https://console.neon.tech/app/?promo=PicGo">Neon</a></h3>
<p>Fast Postgres Databases for Teams and Agents</p>
</td>
</tr>
</table>
</div> </div>
--- ---
@@ -92,6 +107,20 @@ PicGo 打造了全方位的上传体验,让“传图”这件事变得前所
- **更多可能**:支持图片压缩、水印、重命名、Markdown 图片迁移等功能插件。 - **更多可能**:支持图片压缩、水印、重命名、Markdown 图片迁移等功能插件。
- 探索更多插件:[Awesome-PicGo](https://github.com/PicGo/Awesome-PicGo) - 探索更多插件:[Awesome-PicGo](https://github.com/PicGo/Awesome-PicGo)
### 🤖 AI 友好
写文档的活儿越来越多地交给了 AI。但 AI 生成的截图、图表存在本地,`![](./chart.png)`,发布前需要转成可访问链接。PicGo 让 AI 也能轻松传图:
- **[PicGo Skills](https://github.com/PicGo/skills)**:官方 Agent Skills 集合,教会 AI 什么时候该传图、怎么传。适用于任何支持 skills 格式的 AI 工具。
```bash
npx skills@latest add PicGo/skills
```
- **[DeepSeek Harness 插件](https://github.com/PicGo/dsh-plugin)**:在 [dsh](https://github.com/deepseek-ai/deepseek-harness) 里装上它,AI 就能自己把图传到你的图床。
```bash
dsh plugin --profile web add @picgo/dsh-plugin
```
两者都会复用你在 PicGo 里已经配好的图床和插件,不用重新配置一遍。详见[这篇介绍](https://picgo.app/blog/2026/picgo-deepseek-harness-plugin/)。
### 🛠 开发者友好 ### 🛠 开发者友好
- **HTTP API**:支持通过 HTTP 请求调用 PicGo 上传 (v2.2.0+),方便与其他工具集成。 - **HTTP API**:支持通过 HTTP 请求调用 PicGo 上传 (v2.2.0+),方便与其他工具集成。
- **开源透明**:代码完全开源,安全可靠。 - **开源透明**:代码完全开源,安全可靠。
@@ -163,6 +192,8 @@ pnpm run build
- [vs-picgo](https://github.com/PicGo/vs-picgo):PicGo 的 VS Code 版。 - [vs-picgo](https://github.com/PicGo/vs-picgo):PicGo 的 VS Code 版。
- [flutter-picgo](https://github.com/PicGo/flutter-picgo):PicGo 的手机版 App(支持 Android 和 iOS )。 - [flutter-picgo](https://github.com/PicGo/flutter-picgo):PicGo 的手机版 App(支持 Android 和 iOS )。
- [PicHoro](https://github.com/Kuingsmile/PicHoro):另一款支持 PicGo 配置的手机版 App(暂时只支持 Android)。 - [PicHoro](https://github.com/Kuingsmile/PicHoro):另一款支持 PicGo 配置的手机版 App(暂时只支持 Android)。
- [skills](https://github.com/PicGo/skills):PicGo 官方 Agent Skills,让 AI 学会用 PicGo 传图。
- [dsh-plugin](https://github.com/PicGo/dsh-plugin):PicGo 的 DeepSeek Harness 插件。
## 赞助 ## 赞助
+4 -8
View File
@@ -99,9 +99,10 @@
"devDependencies": { "devDependencies": {
"@aws-sdk/client-s3": "^3.276.0", "@aws-sdk/client-s3": "^3.276.0",
"@aws-sdk/lib-storage": "^3.276.0", "@aws-sdk/lib-storage": "^3.276.0",
"@commitlint/cli": "^21.2.2",
"@eslint/js": "^9.39.1", "@eslint/js": "^9.39.1",
"@molunerfinn/vite-plugin-electron-renderer": "^0.14.7", "@molunerfinn/vite-plugin-electron-renderer": "^0.14.7",
"@picgo/bump-version": "^2.0.0", "@picgo/bump-version": "^3.0.0",
"@stylistic/eslint-plugin": "^5.6.1", "@stylistic/eslint-plugin": "^5.6.1",
"@tailwindcss/typography": "^0.5.19", "@tailwindcss/typography": "^0.5.19",
"@tailwindcss/vite": "^4.2.1", "@tailwindcss/vite": "^4.2.1",
@@ -160,7 +161,7 @@
}, },
"commitlint": { "commitlint": {
"extends": [ "extends": [
"./node_modules/@picgo/bump-version/commitlint-picgo" "./node_modules/@picgo/bump-version/commitlint-picgo/index.cjs"
] ]
}, },
"config": { "config": {
@@ -168,12 +169,7 @@
"path": "./node_modules/cz-customizable" "path": "./node_modules/cz-customizable"
}, },
"cz-customizable": { "cz-customizable": {
"config": "./node_modules/@picgo/bump-version/.cz-config.js" "config": "./node_modules/@picgo/bump-version/.cz-config.cjs"
}
},
"husky": {
"hooks": {
"commit-msg": "npm run lint:dpdm && commitlint -E HUSKY_GIT_PARAMS"
} }
} }
} }
+522 -769
View File
File diff suppressed because it is too large Load Diff
+10 -2
View File
@@ -1,3 +1,11 @@
allowBuilds:
core-js: true
electron: true
electron-winstaller: true
esbuild: true
msw: true
vue-demi: true
onlyBuiltDependencies: onlyBuiltDependencies:
- core-js - core-js
- ejs - ejs
@@ -8,5 +16,5 @@ onlyBuiltDependencies:
- vue-demi - vue-demi
supportedArchitectures: supportedArchitectures:
cpu: [x64, arm64] cpu: [ x64, arm64 ]
os: [current] os: [ current ]
+1 -2
View File
@@ -25,8 +25,7 @@ const defaultWebPreferences = {
preload: path.join(__dirname, '../preload/index.js'), preload: path.join(__dirname, '../preload/index.js'),
nodeIntegration: false, nodeIntegration: false,
contextIsolation: true, contextIsolation: true,
nodeIntegrationInWorker: false, nodeIntegrationInWorker: false
backgroundThrottling: false
} }
const handleWindowParams = (windowURL: string) => { const handleWindowParams = (windowURL: string) => {
+2 -1
View File
@@ -144,7 +144,8 @@ interface IBrowserWindowOptions {
nodeIntegration: boolean, nodeIntegration: boolean,
nodeIntegrationInWorker: boolean, nodeIntegrationInWorker: boolean,
contextIsolation: boolean, contextIsolation: boolean,
backgroundThrottling: boolean // 不传即沿用 Electron 默认值(true,窗口不可见时降频);仅在某个窗口确实需要后台全速渲染时才显式关闭。
backgroundThrottling?: boolean
webSecurity?: boolean webSecurity?: boolean
}, },
vibrancy?: string | any, vibrancy?: string | any,