diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..3b6ff8c
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,56 @@
+name: GitHub Release
+
+on:
+ push:
+ tags:
+ - "[0-9]+.[0-9]+.[0-9]+"
+
+permissions:
+ contents: write
+
+jobs:
+ test:
+ name: Run Tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+
+ - run: npm install
+
+ - run: npm test
+
+ release:
+ name: Create GitHub Release
+ needs: test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Generate changelog
+ run: |
+ PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
+ if [ -n "$PREV_TAG" ]; then
+ CHANGES=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" --no-merges)
+ else
+ CHANGES=$(git log --pretty=format:"- %s" --no-merges)
+ fi
+ cat << EOF > release_notes.md
+ ## What's Changed
+
+ $CHANGES
+ EOF
+
+ - name: Create GitHub Release
+ uses: softprops/action-gh-release@v2
+ with:
+ body_path: release_notes.md
+ draft: false
+ prerelease: ${{ contains(github.ref_name, '-') }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..76c0715
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,22 @@
+name: CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ test:
+ name: Run Tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+
+ - run: npm install
+
+ - run: npm test
diff --git a/README.md b/README.md
index 227d02d..98d9576 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@ Delete the `comfyui_queue_sidebar` folder from `custom_nodes/`.
## Compatibility
-- **ComfyUI frontend** v1.33.1+ (tested on 1.35.9)
+- **ComfyUI frontend** v1.33.1+ (tested up to 1.39.19) · **ComfyUI core** tested up to 0.16.4
- Works alongside the built-in bottom-panel queue without conflicts
- The plugin uses the public extension API for registration and events. It additionally hooks a small number of internal APIs (e.g. `app.queuePrompt`, sidebar tab ordering) to provide a seamless experience — all such integration points are centralized in [`comfyAdapter.js`](web/lib/comfyAdapter.js) with feature detection and graceful degradation if the upstream shape changes
diff --git a/README_zhTW.md b/README_zhTW.md
index 192e3f3..d4cb392 100644
--- a/README_zhTW.md
+++ b/README_zhTW.md
@@ -69,7 +69,7 @@ git clone https://github.com/Zhen-Bo/comfyui_queue_sidebar.git
## 相容性
-- **ComfyUI 前端** v1.33.1+(已在 1.35.9 測試正常)
+- **ComfyUI 前端** v1.33.1+(已測試至 1.39.19)· **ComfyUI 核心** 已測試至 0.16.4
- 與內建的底部面板佇列並行運作,不會衝突
- 插件使用公開的擴充 API 進行註冊和事件監聽。此外會掛鉤少量內部 API(如 `app.queuePrompt`、側邊欄分頁排序)以提供無縫體驗——所有此類整合點均集中於 [`comfyAdapter.js`](web/lib/comfyAdapter.js),搭配功能偵測與優雅降級機制
diff --git a/package.json b/package.json
index ddd6d6f..c4549bb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "comfyui_queue_sidebar",
- "version": "1.0.0",
+ "version": "1.1.0",
"private": true,
"description": "ComfyUI sidebar extension — brings back the queue panel with image previews",
"type": "module",
diff --git a/pyproject.toml b/pyproject.toml
index 5e0bb99..e3de271 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "comfyui-queue-sidebar"
-version = "1.0.0"
+version = "1.1.0"
description = "ComfyUI sidebar extension — brings back the queue panel with image previews"
license = { file = "LICENSE" }
diff --git a/web/queue-sidebar.js b/web/queue-sidebar.js
index d020c8f..f36bd44 100644
--- a/web/queue-sidebar.js
+++ b/web/queue-sidebar.js
@@ -203,6 +203,7 @@ function updateBadge() {
}
function render() {
+ updateBadge()
if (!gridEl) return
const allTasks = [...state.running, ...state.pending, ...state.history]
@@ -214,7 +215,6 @@ function render() {
`color:var(--p-text-muted-color,#888)">` +
`` +
`${t('noTasks')}`
- updateBadge()
return
}
@@ -248,7 +248,6 @@ function render() {
}
for (const card of existing.values()) card.remove()
- updateBadge()
}
// ─── Sidebar setup ────────────────────────────────────────────────────────────
@@ -295,15 +294,47 @@ function onProgressPreview({ detail }) {
render()
}
+// ─── Badge style injection ─────────────────────────────────────────────────────
+
+function injectBadgeStyle() {
+ const id = 'queue-sidebar-badge-style'
+ if (document.getElementById(id)) return
+ const style = document.createElement('style')
+ style.id = id
+ style.textContent =
+ '.sidebar-icon-badge{font-size:9px!important;min-width:14px!important;line-height:13px!important}' +
+ '.sidebar-icon-wrapper:has(.pi-history) .sidebar-icon-badge{top:-7px!important;right:-7px!important}'
+ document.head.appendChild(style)
+}
+
// ─── Register ─────────────────────────────────────────────────────────────────
app.registerExtension({
name: 'ComfyUI.QueueSidebar',
+ commands: [
+ {
+ id: 'ComfyUI.QueueSidebar.Toggle',
+ label: () => t('queue'),
+ icon: 'pi pi-history',
+ function() {
+ app.extensionManager.sidebarTab?.toggleSidebarTab('queue')
+ },
+ },
+ ],
+
+ keybindings: [
+ {
+ commandId: 'ComfyUI.QueueSidebar.Toggle',
+ combo: { key: 'q' },
+ },
+ ],
+
async setup() {
// Load translations from web/locales/.json
await loadI18n()
+ injectBadgeStyle()
hookQueuePrompt(app, refresh)
api.addEventListener('status', onStatus)