From 925f3d10dda7ae1f7077e5bc24b121eff01ffc7f Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Fri, 3 Jul 2026 23:37:02 +0800 Subject: [PATCH] Add infinite-canvas app (#4504) --- apps/infinite-canvas/0.4.0/.env.sample | 2 + apps/infinite-canvas/0.4.0/data.yml | 19 ++++++ apps/infinite-canvas/0.4.0/data/.gitkeep | 0 apps/infinite-canvas/0.4.0/docker-compose.yml | 24 ++++++++ apps/infinite-canvas/0.4.0/scripts/init.sh | 4 ++ .../0.4.0/scripts/uninstall.sh | 4 ++ apps/infinite-canvas/0.4.0/scripts/upgrade.sh | 4 ++ apps/infinite-canvas/README.md | 56 ++++++++++++++++++ apps/infinite-canvas/data.yml | 31 ++++++++++ apps/infinite-canvas/latest/.env.sample | 2 + apps/infinite-canvas/latest/data.yml | 19 ++++++ apps/infinite-canvas/latest/data/.gitkeep | 0 .../infinite-canvas/latest/docker-compose.yml | 24 ++++++++ apps/infinite-canvas/latest/scripts/init.sh | 4 ++ .../latest/scripts/uninstall.sh | 4 ++ .../infinite-canvas/latest/scripts/upgrade.sh | 4 ++ apps/infinite-canvas/logo.png | Bin 0 -> 715 bytes 17 files changed, 201 insertions(+) create mode 100644 apps/infinite-canvas/0.4.0/.env.sample create mode 100644 apps/infinite-canvas/0.4.0/data.yml create mode 100644 apps/infinite-canvas/0.4.0/data/.gitkeep create mode 100644 apps/infinite-canvas/0.4.0/docker-compose.yml create mode 100755 apps/infinite-canvas/0.4.0/scripts/init.sh create mode 100755 apps/infinite-canvas/0.4.0/scripts/uninstall.sh create mode 100755 apps/infinite-canvas/0.4.0/scripts/upgrade.sh create mode 100644 apps/infinite-canvas/README.md create mode 100644 apps/infinite-canvas/data.yml create mode 100644 apps/infinite-canvas/latest/.env.sample create mode 100644 apps/infinite-canvas/latest/data.yml create mode 100644 apps/infinite-canvas/latest/data/.gitkeep create mode 100644 apps/infinite-canvas/latest/docker-compose.yml create mode 100755 apps/infinite-canvas/latest/scripts/init.sh create mode 100755 apps/infinite-canvas/latest/scripts/uninstall.sh create mode 100755 apps/infinite-canvas/latest/scripts/upgrade.sh create mode 100644 apps/infinite-canvas/logo.png diff --git a/apps/infinite-canvas/0.4.0/.env.sample b/apps/infinite-canvas/0.4.0/.env.sample new file mode 100644 index 000000000..b900d8df1 --- /dev/null +++ b/apps/infinite-canvas/0.4.0/.env.sample @@ -0,0 +1,2 @@ +PANEL_APP_PORT_HTTP=3000 +CONTAINER_NAME=infinite-canvas diff --git a/apps/infinite-canvas/0.4.0/data.yml b/apps/infinite-canvas/0.4.0/data.yml new file mode 100644 index 000000000..828a8465b --- /dev/null +++ b/apps/infinite-canvas/0.4.0/data.yml @@ -0,0 +1,19 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 访问端口 + label: + en: Web Port + zh: Web 访问端口 + zh-Hant: Web 存取埠 + ja: Web ポート + ko: Web 포트 + ru: Веб-порт + ms: Port Web + pt-br: Porta Web + required: true + rule: paramPort + type: number diff --git a/apps/infinite-canvas/0.4.0/data/.gitkeep b/apps/infinite-canvas/0.4.0/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/infinite-canvas/0.4.0/docker-compose.yml b/apps/infinite-canvas/0.4.0/docker-compose.yml new file mode 100644 index 000000000..8235532fb --- /dev/null +++ b/apps/infinite-canvas/0.4.0/docker-compose.yml @@ -0,0 +1,24 @@ +services: + infinite-canvas: + image: "ghcr.io/basketikun/infinite-canvas:v0.4.0" + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + healthcheck: + test: + - CMD-SHELL + - >- + node -e "require('http').get('http://127.0.0.1:3000', r => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))" + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/infinite-canvas/0.4.0/scripts/init.sh b/apps/infinite-canvas/0.4.0/scripts/init.sh new file mode 100755 index 000000000..aacfc578b --- /dev/null +++ b/apps/infinite-canvas/0.4.0/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +echo "[infinite-canvas:init] server data is stored in browser local storage by default." diff --git a/apps/infinite-canvas/0.4.0/scripts/uninstall.sh b/apps/infinite-canvas/0.4.0/scripts/uninstall.sh new file mode 100755 index 000000000..024242bb3 --- /dev/null +++ b/apps/infinite-canvas/0.4.0/scripts/uninstall.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +docker-compose down --volumes diff --git a/apps/infinite-canvas/0.4.0/scripts/upgrade.sh b/apps/infinite-canvas/0.4.0/scripts/upgrade.sh new file mode 100755 index 000000000..73d5bd9e9 --- /dev/null +++ b/apps/infinite-canvas/0.4.0/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +echo "[infinite-canvas:upgrade] no server-side data migration is required for this version." diff --git a/apps/infinite-canvas/README.md b/apps/infinite-canvas/README.md new file mode 100644 index 000000000..66f69b043 --- /dev/null +++ b/apps/infinite-canvas/README.md @@ -0,0 +1,56 @@ +# Infinite Canvas + +## 产品介绍 +Infinite Canvas 是一个开源 AI 创作无限画布,支持文生图、图生图、参考图编辑、文本问答、音频和视频生成等创作流程。 + +## 主要功能 +- 无限画布式创作空间 +- OpenAI 兼容接口配置 +- 文生图、图生图、参考图编辑和文本问答 +- 音频、视频生成工作流 +- 浏览器本地保存画布、素材、生成记录和 AI API Key + +## 访问说明 +安装完成后,访问: + +```text +http://服务器IP:端口 +``` + +首次打开后进入右上角配置,填入自己的 OpenAI 兼容 `Base URL` 和 `API Key`。 + +如果使用 New API,可在 New API 的聊天设置中配置跳转地址: + +```text +http://服务器IP:端口?apiKey={key}&baseUrl={address} +``` + +当前主应用镜像只启动 Next.js。画布、素材、生成记录和 AI API Key 默认保存在浏览器本地;第三方提示词由 Next.js 路由拉取后缓存在运行实例内存里,不需要额外挂载数据目录。 + +## 安全提示 +维护侧已对当前 `latest` / `0.4.0` 对应的上游镜像 `ghcr.io/basketikun/infinite-canvas:v0.4.0` 做过 Trivy 扫描,报告为 `Critical=3`、`High=17`、`Total=178`。其中 Critical 主要来自 Debian 基础层 `perl-base`、`zlib1g`,当前没有可直接应用的上游修复版本。 + +在 `--ignore-unfixed` 视角下,Critical 会消失,但仍有 `High=9`,主要集中在 `next 16.2.3`、`picomatch 4.0.3`、`sigstore 3.1.0`,需要上游更新依赖并重新构建镜像后才能消除。 + +因此当前版本更适合部署在可信内网或受控环境中,并应尽快跟进上游镜像更新。若对暴露面更敏感,建议在网关或反向代理层额外限制访问来源。 + +## Introduction +Infinite Canvas is an open-source infinite canvas for AI creation. It supports text-to-image, image-to-image, reference image editing, text chat, audio generation, and video generation workflows. + +## Features +- Infinite canvas workspace +- OpenAI-compatible endpoint configuration +- Text-to-image, image-to-image, reference image editing, and text chat +- Audio and video generation workflows +- Browser-local storage for canvases, assets, generation history, and AI API keys + +## Security Note +The current upstream image used by `latest` and `0.4.0` was scanned with Trivy and the report contains `Critical=3`, `High=17`, and `Total=178` findings. The Critical items are mainly in the Debian base layer (`perl-base`, `zlib1g`) and currently have no upstream fixed package available. + +With `--ignore-unfixed`, the Critical findings drop out, but `High=9` remains, mainly in `next 16.2.3`, `picomatch 4.0.3`, and `sigstore 3.1.0`. Those require an upstream dependency refresh and image rebuild. + +Deploy this app in a trusted network or otherwise controlled environment, and update promptly when the upstream image is refreshed. + +## 参考资料 +- 源码: +- Docker 部署文档: diff --git a/apps/infinite-canvas/data.yml b/apps/infinite-canvas/data.yml new file mode 100644 index 000000000..2928e750b --- /dev/null +++ b/apps/infinite-canvas/data.yml @@ -0,0 +1,31 @@ +name: Infinite Canvas +tags: + - 工具 +title: 开源 AI 创作无限画布 +description: 开源 AI 创作无限画布 +additionalProperties: + key: infinite-canvas + name: Infinite Canvas + tags: + - Tool + shortDescZh: 开源 AI 创作无限画布 + shortDescEn: Open-source infinite canvas for AI creation + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/basketikun/infinite-canvas + github: https://github.com/basketikun/infinite-canvas + document: https://github.com/basketikun/infinite-canvas/blob/main/docs/content/docs/overview/docker.mdx + architectures: + - amd64 + - arm64 + description: + en: Open-source infinite canvas for AI creation. + zh: 开源 AI 创作无限画布。 + zh-Hant: 開源 AI 創作無限畫布。 + ja: AI 制作用のオープンソース無限キャンバス。 + ko: AI 창작을 위한 오픈소스 무한 캔버스입니다. + ru: Открытая бесконечная доска для AI-творчества. + ms: Kanvas tanpa had sumber terbuka untuk penciptaan AI. + pt-br: Canvas infinito open source para criação com IA. diff --git a/apps/infinite-canvas/latest/.env.sample b/apps/infinite-canvas/latest/.env.sample new file mode 100644 index 000000000..b900d8df1 --- /dev/null +++ b/apps/infinite-canvas/latest/.env.sample @@ -0,0 +1,2 @@ +PANEL_APP_PORT_HTTP=3000 +CONTAINER_NAME=infinite-canvas diff --git a/apps/infinite-canvas/latest/data.yml b/apps/infinite-canvas/latest/data.yml new file mode 100644 index 000000000..828a8465b --- /dev/null +++ b/apps/infinite-canvas/latest/data.yml @@ -0,0 +1,19 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 访问端口 + label: + en: Web Port + zh: Web 访问端口 + zh-Hant: Web 存取埠 + ja: Web ポート + ko: Web 포트 + ru: Веб-порт + ms: Port Web + pt-br: Porta Web + required: true + rule: paramPort + type: number diff --git a/apps/infinite-canvas/latest/data/.gitkeep b/apps/infinite-canvas/latest/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/infinite-canvas/latest/docker-compose.yml b/apps/infinite-canvas/latest/docker-compose.yml new file mode 100644 index 000000000..f5cb38c6a --- /dev/null +++ b/apps/infinite-canvas/latest/docker-compose.yml @@ -0,0 +1,24 @@ +services: + infinite-canvas: + image: "ghcr.io/basketikun/infinite-canvas:latest" + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + healthcheck: + test: + - CMD-SHELL + - >- + node -e "require('http').get('http://127.0.0.1:3000', r => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))" + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/infinite-canvas/latest/scripts/init.sh b/apps/infinite-canvas/latest/scripts/init.sh new file mode 100755 index 000000000..aacfc578b --- /dev/null +++ b/apps/infinite-canvas/latest/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +echo "[infinite-canvas:init] server data is stored in browser local storage by default." diff --git a/apps/infinite-canvas/latest/scripts/uninstall.sh b/apps/infinite-canvas/latest/scripts/uninstall.sh new file mode 100755 index 000000000..024242bb3 --- /dev/null +++ b/apps/infinite-canvas/latest/scripts/uninstall.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +docker-compose down --volumes diff --git a/apps/infinite-canvas/latest/scripts/upgrade.sh b/apps/infinite-canvas/latest/scripts/upgrade.sh new file mode 100755 index 000000000..73d5bd9e9 --- /dev/null +++ b/apps/infinite-canvas/latest/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euo pipefail + +echo "[infinite-canvas:upgrade] no server-side data migration is required for this version." diff --git a/apps/infinite-canvas/logo.png b/apps/infinite-canvas/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1e0cc57e2af809da280ec43d80e2e9cca73798 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^TR@nD1xQXma&9LB1Jfi=7srr_TW@dadgvsIusxW3 zM6JnJCuvib>F&E460FS$hBtW34kie^F57)~m9JT+t4~vc;f#IJdtSdee{*hRxqeK= zyv)tVKfT-W`K)<9$Y5;1KI)>-q5T&+`vlV7D|k(@5IB;fdn9^_#z!&kLo=3s*0_Is zr$Jh}>Aqc#^+#7Zq&;0GUEC>T&NQ=k?YtS@Q*H>I(y`%T`KvJHevR>e$5R1#3W#(sIn7>hHL1yN1!|56q#V(ZO^z;DL^D6otzI$WA z`<5@&*2zG{N$vsrjm6JzZK~_DO#FMSa4pah3$bfYraf9*c0qol$_CHat9?Ly+Ks+x zwwzzg@+SLVYc=b%Irm3g+i!IB_@wS9`XYjEC%jnS zZ@e*gX18C7*6#D&AJ=tU2no}&San9mty8Fdsp z51f8?^Yp2kvaT(^%(C`8jC=pmJ-mGWdlA7`rxx8>bLP&n-REa_aeTe<^Lc*no!UHY zrJm_ix$Kgcrbn9Z`2DANc8q7<(k>3s$dwOr5+bkHhfJ?b@8VdTn(w{J`t;3Y&(fLG z-zI4*)tvTX{p~!x^sjsA%gTe~DWM4f9c@B> literal 0 HcmV?d00001