🎬 影片系統

🎬 影片自動化儀表板

管理 YouTube / 抖音下載與 AI Studio 專案文本

📺
{{ stats.youtube }}
YouTube 下載數
🎵
{{ stats.douyin }}
抖音下載數
📦
{{ stats.youtube + stats.douyin }}
總下載數
📝
{{ stats.projects }} / {{ stats.topics }}
專案 / 主題數
🟢
{{ serverStatus }}
伺服器狀態

快速操作

⬇️ 下載工具

YouTube / 抖音下載管理

YouTube 下載

正在下載中... 這可能需要幾分鐘

下載記錄

尚無下載記錄
{{ d.title }}
📺 {{ d.channel || '--' }} ⏱ {{ formatDuration(d.duration) }} 📅 {{ formatDate(d.created_at) }} 檔案遺失

抖音下載

處理中...

解析結果

{{ downloads.douyinPreview.value.title }}
👤 {{ downloads.douyinPreview.value.author }}
⏱ {{ formatDuration(downloads.douyinPreview.value.duration) }}

下載記錄

尚無下載記錄
{{ d.title }}
👤 {{ d.author || '--' }} ⏱ {{ formatDuration(d.duration) }} 📅 {{ formatDate(d.created_at) }} 檔案遺失

一鍵流程

來源 URL 進入資料庫支援的一鍵流程,Runner 依佇列推進下載、Gemini、主題、影片與發布。

啟動前檢查

目前選項的資料庫、Runner、平台帳號與公開媒體 URL 狀態。

檢查中...
{{ pipeline.preflightError }}
{{ check.label }} {{ getStatusLabel(check.status) }}

{{ check.message }}

{{ preflightDetailSummary(check) }}

低成本建議
文字模型:{{ pipeline.preflight.recommended_provider_defaults.text_model }} 圖片模型:{{ pipeline.preflight.recommended_provider_defaults.image_model }} 分鏡影片:{{ pipeline.preflight.recommended_provider_defaults.scene_video_provider }} 旁白:{{ pipeline.preflight.recommended_provider_defaults.voiceover_provider }} 合成:{{ pipeline.preflight.recommended_provider_defaults.assembly_provider }}

一鍵流程紀錄

{{ pipeline.runs.length }} 筆流程
載入中...
尚無一鍵流程。
#{{ run.id }} {{ getStatusLabel(run.status) }} {{ pipelineStageLabel(run.current_stage) }} {{ sourceLabel(run.source_platform || 'auto') }}
{{ run.source_url }}
專案 {{ run.project_id || '--' }} 目標平台 {{ platformListLabel(run.target_platforms_json) }} 建立時間 {{ formatDate(run.created_at) || '--' }}
待分批釋放 {{ pipelineTopicReleaseCount(run) }} 個主題 專案活動工作已達上限

📝 AI Studio 專案

AI 生成主題與文本管理

載入中...
尚無專案資料,點擊右上角「新增專案」開始建立。
{{ p.project_type }} {{ p.topic_count || 0 }} 主題 {{ p.workflow_stage }}
{{ formatDate(p.created_at) }}

{{ p.project_name }}

{{ p.source_video_title || '--' }}

{{ p.source_video_path || '--' }}
載入中...
{{ projectsMod.currentProject.value.project_type }} {{ projectsMod.projectTopics.value.length }} 主題 {{ projectsMod.imageBundle.value.total_images }} 圖片

{{ projectsMod.currentProject.value.project_name }}

自動工作流
{{ getAutomationSummary(projectsMod.currentProject.value, projectsMod.projectTopics.value, projectsMod.workflowStatus.value, projectsMod.imageBundle.value.total_images).title }}
{{ getAutomationSummary(projectsMod.currentProject.value, projectsMod.projectTopics.value, projectsMod.workflowStatus.value, projectsMod.imageBundle.value.total_images).description }}
來源影片 {{ projectsMod.currentProject.value.source_video_title || '--' }}
來源路徑 {{ projectsMod.currentProject.value.source_video_path || '--' }}
建立時間 {{ formatDate(projectsMod.currentProject.value.created_at) }}
工作流階段 {{ projectsMod.currentProject.value.workflow_stage }}
分鏡數量 {{ projectsMod.currentProject.value.storyboard_count }}
核心畫面圖片
⚙️ 顯示進階工具
Gemini 原始輸出
貼上 Gemini 回應內容,可轉換為主題,或依自訂格式整理成文字 / JSON
提示:建立主題格式會解析 Hook、腳本、圖片提示詞、影片提示詞、發布文案與標籤,並建立 project_topics。 提示:自訂輸出格式只產生預覽結果,不會建立或修改主題資料。
provider={{ customTextTransformResult.provider }} fallback={{ customTextTransformResult.fallback_used ? 'yes' : 'no' }}
協調器 / 工作狀態
{{ projectsMod.workflowStatus.value.progress?.message || projectsMod.workflowStatus.value.message || '尚未執行' }}
{{ getWorkflowStateLabel(projectsMod.workflowStatus.value.state) }}
建立專案後由協調器自動接手;手動操作只會重設等待中狀態,不會直接排入舊佇列。
主題數:{{ projectsMod.workflowStatus.value.progress?.topic_count || projectsMod.imageBundle.value.topics?.length || 0 }} 素材數:{{ projectsMod.imageBundle.value.total_images || 0 }} 目前主題:{{ projectsMod.workflowStatus.value.progress?.running_topic_id || '--' }} 目前分鏡:{{ projectsMod.workflowStatus.value.progress?.scene_index || '--' }} Runner:{{ projectsMod.workflowStatus.value.runner_id || '--' }} 開始: {{ formatDate(projectsMod.workflowStatus.value.started_at) }} 完成: {{ formatDate(projectsMod.workflowStatus.value.completed_at) }}
資料匯出 / 除錯檢視

最近工作流日誌

{{ getStatusLabel(log.status) }} {{ formatDate(log.timestamp) }}
{{ log.message }}
{{ log.topic_id ? '主題 ' + log.topic_id : '' }} {{ log.scene_index ? '分鏡 ' + log.scene_index : '' }}

🧩 主題列表

依照專案分群瀏覽所有主題,快速找到要編輯或查看的內容

載入中...
{{ group.project.project_type }} {{ group.topics.length }} 主題

{{ group.project.project_name }}

{{ group.project.source_video_title }}

核心畫面提示詞
{{ group.project.core_frame_prompt }}
此專案主題載入失敗:{{ group.error }}
🖼️ 尚未下載
#{{ topic.topic_order }}

{{ topic.title }}

核心圖 {{ getStatusLabel(topic.core_status) }} 分鏡圖 {{ getStatusLabel(topic.storyboard_status) }}
主題鍵:{{ topic.topic_key }} ● 已產生核心圖 ● 分鏡圖已就緒
正在載入主題詳情...
#{{ getTopicDetailState().topic.topic_order }}

{{ getTopicDetailState().topic.title }}

{{ getTopicDetailState().topic.topic_key }} {{ getTopicImageInfoForDetail().downloaded_scene_count || 0 }}/{{ getTopicImageInfoForDetail().scene_count }} 個分鏡
開場句
{{ getTopicDetailState().topic.hook }}
腳本
{{ getTopicDetailState().topic.script || '--' }}
核心畫面
實體圖片路徑
{{ getTopicDetailState().topic.core_frame_image_path }}
影片生成提示詞
{{ getTopicDetailState().topic.video_prompt }}
核心圖狀態
{{ getStatusLabel(getTopicDetailState().topic.core_status) }}
分鏡圖狀態
{{ getStatusLabel(getTopicDetailState().topic.storyboard_status) }}
分鏡文字分派
{{ getStatusLabel(getTopicDetailState().topic.storyboard_text_dispatch_status || 'pending') }}
TikTok 標題
{{ getTopicDetailState().topic.tiktok_title || '--' }}
標籤
{{ getTopicDetailState().topic.hashtags || '--' }}
主題最終影片
{{ getStatusLabel(getTopicImageInfoForDetail().final_video?.status || 'pending') }} 段片 {{ getTopicImageInfoForDetail().scene_video_done_count || 0 }}/{{ getTopicImageInfoForDetail().scene_video_total || getTopicImageInfoForDetail().scene_count || 0 }}
預覽影片
尚未產生最終影片
最終影片路徑
{{ getTopicImageInfoForDetail().final_video?.final_video_path || '--' }}
videos.txt
{{ getTopicImageInfoForDetail().final_video?.videos_txt_path || '--' }}
{{ getTopicImageInfoForDetail().final_video.error_message }}
分鏡預覽
尚未下載
分鏡 {{ scene.scene_index }}
{{ scene.video_file_name || scene.file_name }} {{ scene.video_url ? '短片完成' : (scene.exists ? '已下載' : getStatusLabel(scene.image_status || 'pending')) }}
{{ scene.title || ('分鏡 ' + scene.scene_index) }}

{{ scene.prompt || '--' }}

圖片路徑
{{ scene.image_path || '--' }}
Keyframe 指令
{{ getStatusLabel(scene.validation_status || (scene.keyframe_text ? 'valid' : 'pending')) }}
{{ scene.keyframe_text }}
尚未分派 Keyframe 指令。
{{ scene.validation_error }}
圖片狀態
{{ getStatusLabel(scene.image_status || (scene.exists ? 'done' : 'pending')) }}
短片狀態
{{ getStatusLabel(scene.video_status || 'pending') }}
image_job_id={{ scene.image_job_id }}
{{ scene.image_failed_reason }}
短片路徑
video_job_id={{ scene.video_job_id }}
provider={{ scene.video_provider }}
provider_job_id={{ scene.video_provider_job_id }}
{{ scene.video_path }}
查看短片 →
{{ scene.video_failed_reason }}
尚未解析出分鏡提示詞。請先確認此主題的圖片提示詞欄位是否有 9 條內容。
分鏡 GEM 結果
分鏡自動化 GEM 結果
資料表 storyboard_automation_results
{{ getTopicImageInfoForDetail().storyboard_result_text || getTopicImageInfoForDetail().storyboard_result_image_url ? '已寫入' : '尚未產生' }}
分鏡自動化 GEM 總覽圖路徑
{{ getTopicImageInfoForDetail().storyboard_result_image_path || getTopicImageInfoForDetail().storyboard_board_file_name || '--' }}
分鏡自動化 GEM 文字結果
{{ getTopicImageInfoForDetail().storyboard_result_text }}
尚未寫入分鏡自動化結果。核心圖完成後,系統才會排入分鏡圖 workflow,完成後會在這裡顯示 Gemini 文字結果與總覽圖路徑。

📘 功能說明

給 PM、營運與內容負責人使用:用產品語言說明目前已實作的流程、狀態與操作入口

產品定位

把一支來源影片,整理成多支可發布的知識型短影音素材

目前系統已能從 YouTube / 抖音來源進入,建立專案、讓 Gemini 產出分析與主題, 再推進核心圖、分鏡圖、單段影片、主題成片、發布素材、旁白、字幕與最終可發布影片。 最後可在 YouTube、TikTok、Instagram 的發布中心排程或取得平台匯出包。

PM 先看什麼
先看「一鍵流程」和「專案文本」確認內容進度,再看「平台發布」和「Runner 狀態」確認是否能上架。
目前完成標準
看到 final-ready 影片、平台匯出包或發布結果連結,才代表該主題已進入可交付或可上架狀態。
產品流程

從素材到發布的 6 個產品階段

1. 素材進入

取得來源影片

可從「下載工具」先下載 YouTube / 抖音,也可在「一鍵流程」直接貼來源 URL。系統會建立來源紀錄與專案。

2. 內容拆解

產出主題與腳本素材

Gemini 會分析來源影片並產出原始文字。PM 可在專案頁檢查、保存、整理成主題,也可用自訂格式先做文字預覽。

3. 視覺生成

每個主題生成視覺素材

每個主題會先產生核心圖,再延伸成分鏡總覽、單張分鏡圖與單段影片。主題資料越完整,後面越容易自動推進。

4. 成片資產

合成可交付影片

分鏡影片完成後會合成主題影片,再建立發布素材、旁白、字幕與 final-ready 影片。這是交付給發布流程的核心成品。

5. 發布準備

排程或匯出到平台

平台發布頁會列出 final-ready 主題,可排入 YouTube、TikTok、Instagram,或使用平台匯出包做人工上架備援。

6. 監控排查

用 Runner 狀態看卡點

所有背景任務都會出現在 Runner 狀態頁。等待、執行、失敗、停止重試與平台限流都應從這裡判斷。

頁面地圖

PM 常用頁面對照

🏠

首頁

總覽與快速入口

看系統是否在線、目前累積多少來源、專案與主題。適合每天開工先確認系統狀態。
⬇️

下載工具

素材入口

手動下載 YouTube 或抖音影片。下載完成後,素材會出現在新增專案的選擇清單。

一鍵流程

URL 到發布流程

貼來源 URL、選目標平台,系統會先做啟動前檢查,再建立從下載到發布的整段流程。
📝

專案文本

主控制台

查看單一專案的內容、Gemini 原始輸出、主題、工作流進度與匯出資料。這是內容審稿的主入口。
🧩

主題列表

跨專案瀏覽主題

跨專案查看所有主題,快速找出哪些主題已完成核心圖、分鏡、影片與 final-ready 版本。
⚙️

系統設定

Prompt、Provider、API key

調整分析、生成、核心圖、分鏡圖提示詞,也可設定文字整理 Provider、OpenAI API key 與各階段 Provider。
📺

YouTube 頻道設定

OAuth 授權

管理 YouTube OAuth、頻道連線與解除授權。YouTube 發布前必須先確認這裡已連線。
🚀

YouTube 發布

影片上傳

可把來源影片或 final-ready 主題排入 YouTube。正式主線建議優先使用 final-ready 主題。
🌐

平台發布

多平台上架中心

管理 YouTube、TikTok、Instagram 帳號,查看可發布主題、平台匯出包與各平台發布結果。
🤖

Runner 狀態

背景任務監控

查看每個背景任務是否等待、執行、失敗或停止重試,也能暫停佇列、重排失敗工作與查看日誌。
🗂

腳本清單

Runner / 工作流對照表

給維護者確認目前有哪些 Runner、工作流與 Provider 腳本;PM 通常只需在排查時知道它存在。
日常流程

日常操作順序

展開 / 收合
新內容要進系統
優先用「一鍵流程」貼 URL,讓系統先檢查 Runner、平台帳號與公開 URL 條件。若只是先整理素材,可先用「下載工具」下載,再到「專案文本」建立專案。
審內容與主題
在「專案文本」看 Gemini 原始輸出,確認主題標題、腳本、圖片提示詞、影片提示詞與平台文案。需要不同格式時,用「自訂輸出格式」先產生預覽。
看素材進度
到「主題列表」或主題詳情確認核心圖、分鏡圖、單段影片與 final-ready 是否完成。缺少 prompt 的主題不會自動進後續視覺流程。
準備上架
到「平台發布」確認 final-ready 主題、平台匯出包、帳號連線與各平台狀態。TikTok / Instagram 可依流程設定需要人工核准。
卡住時排查
先看「Runner 狀態」是否有在線 Runner,再看佇列警示、工作日誌與平台限流。必要時重排失敗工作或暫停單一專案。
狀態判讀

PM 如何判斷目前進度

展開 / 收合
一鍵流程狀態
啟動前檢查通過才會建立流程。流程中可暫停、恢復、釋放主題批次,也可在需要審核時按「核准發布」。
主題完成狀態
主題要先有影片提示詞與圖片提示詞,才會進核心圖與分鏡。所有分鏡影片完成後,才會進入主題影片合成與 final-ready。
發布狀態
平台卡片會顯示等待、執行、完成或失敗。完成時會顯示外部 ID 或結果連結;失敗時先看錯誤訊息與平台帳號狀態。
狀態詞彙
pending:等待系統或 Runner 處理。
running:正在執行。
done:已完成並寫回結果。
failed:暫時失敗,可重試或等自動退避。
dead:停止重試,需要人工檢查。
設定與成本

設定、成本與風險控管

展開 / 收合
Prompt 設定
系統設定頁可調整分析、生成、核心圖與分鏡圖 Prompt。新建立的工作會套用當下設定;已排隊或執行中的工作不會回溯修改。
AI 與 Provider
文字整理可選本機解析或 OpenAI;Gemini、核心圖、分鏡與影片生成由 Provider 設定控制。環境變數仍可覆蓋設定頁。
成本與限流
一鍵流程會顯示低成本建議;Runner 狀態頁會顯示 Provider 使用量、平台限流與自動暫停警示,避免持續燒額度。
平台帳號條件
YouTube 需要 OAuth 授權與可用頻道。
TikTok 需要 creator info、隱私選項與對應 scope。
Instagram Reels 需要已連接 IG 帳號與可被 Meta 讀取的 HTTPS 影片 URL。
系統不會自動處理的事
不會繞過平台登入、CAPTCHA、方案限制或審核限制。
不會保證外部平台 API 永遠可用;遇到 quota 或 429 會記錄並可能暫停佇列。
不會回填或顯示已保存的 API 金鑰明文。
發布交付

發布與交付方式

展開 / 收合
YouTube
可直接上傳來源影片,也可把 final-ready 主題排入 YouTube 發布佇列。正式內容建議走 final-ready 主題,因為會帶入整理後的標題、描述與標籤。
TikTok / Instagram
從平台發布頁選 final-ready 主題,填寫平台文案與發布設定後排入發布。若一鍵流程要求審核,需先按「核准發布」才會自動排程。
平台匯出包
系統會產生共同影片、字幕與各平台文案檔。當官方 API 不可用時,這是人工上架的正式備援交付物。
發布前檢查
確認 final-ready 影片存在、平台帳號已連線、標題 / 描述 / 標籤完整、平台限制沒有警示,並確認是否需要 PM 或營運核准。
發布結果
完成後會寫回平台結果,包含外部 ID、結果連結、遠端狀態、警告或錯誤訊息。這些結果會顯示在平台發布頁。
排查清單

卡住時先看這裡

展開 / 收合
排查順序
1. 先到「Runner 狀態」看是否有在線 Runner 與對應佇列覆蓋。
2. 看佇列警示、平台限流與專案壓力,確認是否被暫停或達到上限。
3. 打開工作日誌,看最後一筆錯誤訊息。
4. 回專案或主題頁確認必要欄位是否完整。
5. 確認問題修好後,再重排失敗工作或恢復佇列。
常見外部條件
Host 端 Runner 要啟動,且 queue coverage 要包含目前卡住的工作類型。
Gemini / Gemini Video 需要可連線的 Chrome CDP、已登入帳號與生成資格。
YouTube、TikTok、Instagram 需要 OAuth、scope、帳號身分與平台 API 可用。
Instagram Reels 與部分平台流程需要 HTTPS 公開影片 URL。
技術對照

目前已接入的背景工作類型

內容與視覺:source_downloadproject_bootstrapgemini_projectcore_framestoryboardstoryboard_text_dispatchstoryboard_scene_imagestoryboard_scene_videotopic_video_assembly
成片與發布:topic_publish_asset_assemblytopic_voiceovertopic_subtitletopic_final_muxtopic_platform_exportyoutube_publishtiktok_publishinstagram_publishplatform_publish_poll
PM 判斷進度時以 Web UI 狀態為準;維護者排查時再用 jobs、Runner 心跳、工作日誌與腳本清單對照。

📺 YouTube 頻道設定

OAuth 連線與頻道授權狀態

連線狀態
{{ youtubePublish.settings?.connected ? '已連接' : '尚未連接' }}
頻道:{{ youtubePublish.settings?.connected_channel_title || '--' }}
ID:{{ youtubePublish.settings?.connected_channel_id || '--' }}
用戶端密鑰:{{ youtubePublish.settings?.client_secret_configured ? '已保存' : '未設定' }}
重新導向 URI
{{ youtubePublish.settingsForm.redirect_uri || youtubePublish.settings?.suggested_redirect_uri || '--' }}

⤴️ YouTube 上傳

優先從主題最終影片選擇一支影片並送出 YouTube API 上傳

尚未完成 YouTube 頻道 OAuth 授權。
正在載入影片清單...

主題影片

{{ topicPublishVideos.length }} 支已就緒
尚無完成合成的主題最終影片。請先讓主題影片合成完成。

來源下載影片

{{ sourcePublishVideos.length }} 個檔案
尚無 YouTube / Douyin 來源下載影片。

🌐 平台發布

管理最終就緒主題、平台匯出包與發布狀態

{{ account.platform }}

{{ platformLabel(account.platform) }}

{{ connectionLabel(account.connected) }}
{{ account.approval_note }}
正在載入平台發布資料...
尚無可發布的最終就緒主題。完成 topic_final_mux 後會出現在這裡。
主題 #{{ item.topic_id }} {{ getStatusLabel(item.asset.status || 'done') }} 匯出 {{ getStatusLabel(item.export_result?.status || 'pending') }}

{{ item.asset.title || item.topic.title || '未命名主題' }}

{{ item.project.project_name || '--' }}
{{ item.asset.final_video_path || item.asset.final_video_url || '--' }}
{{ platformLabel(platform) }}
{{ getStatusLabel(getPlatformStatus(item, platform)) }}
帳號:{{ getPlatformAccount(platform).account_label || '--' }}
外部 ID:{{ getPlatformResult(item, platform)?.external_id || '--' }}
{{ getPlatformResult(item, platform).error_message }}

⚙️ 系統設定

管理全域 AI 提示詞、自動化實作與文字整理 API key

全域提示詞

這些提示詞將作為預設值,影響 AI 如何分析內容、生成主題、產生核心圖與延伸分鏡圖。圖像提示詞可使用 {{title}}{{video_prompt}}{{image_prompts}}{{core_frame_image_path}} 佔位符。

內容分析提示詞

此提示詞會引導 AI 在分析來源影片或文本時的行為。例如關注重點、提取資訊類型或分析語氣。

內容生成提示詞

此提示詞會指示 AI 如何基於分析結果生成新的內容,例如腳本、標題或描述。

核心圖 Prompt

此提示詞會用在核心圖 Gem。若沒有放入佔位符,系統會自動把主題的 video prompt 接在提示詞後方。

分鏡圖 Prompt

此提示詞會用在分鏡圖 Gem。若沒有放入佔位符,系統會自動把 9 個 image prompts 接在提示詞後方。

文字整理 / OpenAI API 設定

設定 Gemini 原始輸出整理、自訂輸出格式與 OpenAI API key。API key 已保存時不會回填明文。

Key 狀態
{{ settings.openaiApiKeyConfigured.value ? 'API key 已保存' : 'API key 未設定' }}

自動化實作設定

設定未來新建立 jobs 使用的自動化 provider;已排入或執行中的 job 不會被改寫。

{{ stage.stage }}
{{ stage.field }}
{{ settings.getAutomationProviderStatus(stage) }}

🤖 Runner 狀態監控

總覽 DB-backed jobs、runner claim 與 webhook 回寫狀態

{{ runner.isPolling.value ? '自動刷新開啟' : '自動刷新已暫停' }} {{ runner.isLoading.value ? '更新中...' : '閒置' }} 最近刷新 {{ formatDate(runner.lastLoadedAt.value) || '--' }} {{ runner.lastLoadError.value }}
等待中
{{ runner.stats.pending }}
執行中
{{ runner.stats.running }}
已完成 (Done)
{{ runner.stats.done }}
失敗
{{ runner.stats.failed }}
停止重試
{{ runner.stats.dead }}

佇列管理控制

{{ control.control_key }} 無暫停項目

Fleet 管理 Runner

Fleet 建議
{{ runner.runnerFleetRecommendation.value.message || '目前不建議增加 Fleet Runner。' }}
{{ runner.runnerFleetRecommendation.value.command }}
{{ profile.profile }} +{{ profile.recommended_additional_runners }} ({{ profile.online_fleet_count }}/{{ profile.current_fleet_count }} 在線)
Fleet 健康狀態
總數 {{ runner.runnerFleetHealth.value.total }} 在線 {{ runner.runnerFleetHealth.value.online }} 無心跳 {{ runner.runnerFleetHealth.value.no_heartbeat }} {{ profile.profile }} {{ profile.online }}/{{ profile.total }}
清理建議
{{ command }}
心跳 設定檔 Runner PID / 工作 日誌尾端
{{ fleetRunner.heartbeat_online ? '在線' : '無心跳' }}
{{ formatSecondsAgo(fleetRunner.seconds_since_seen) }}
{{ fleetRunner.runner_profile || '--' }}
{{ fleetRunner.runner_id }}
{{ fleetRunner.state_file }}
{{ fleetRunner.pid || '--' }}
{{ fleetRunner.current_job_id ? ('工作 #' + fleetRunner.current_job_id) : getStatusLabel(fleetRunner.heartbeat_status) }}
{{ fleetRunner.mounted_log_file || '--' }}
{{ fleetRunner.log_tail.join('\n') }}
沒有 Fleet 管理的 Runner 狀態檔。

佇列警示

集中列出最需要處理的佇列風險與操作建議

{{ runner.queueAlerts.value.length ? (runner.queueAlerts.value.length + ' 則警示') : '無警示' }}
{{ getStatusLabel(alert.severity) }} {{ alert.queue_type }} {{ alertTypeLabel(alert.alert_type) }}
{{ alert.message }}
{{ alert.recommended_action }}
數量 {{ alert.count }}
目前沒有佇列警示。

保護限制

Provider 使用量與平台限流狀態

{{ runner.rateLimitAlerts.value.length ? (runner.rateLimitAlerts.value.length + ' 則限流警示') : '限制正常' }}
Provider 使用量
{{ formatCurrency(runner.providerUsageSummary.value.total_estimated_cost_usd || 0) }}
{{ entry[0] }} {{ entry[1].quantity || 0 }} 單位 · {{ formatCurrency(entry[1].estimated_cost_usd || 0) }}
尚無 Provider 使用量紀錄。
平台限流
{{ alert.platform }} / {{ alert.operation }} {{ alert.used_count }}/{{ alert.limit_count }} · 重設 {{ formatDate(alert.window_resets_at) || '--' }}
目前沒有平台限流警示。

Runner 狀態清單

依 heartbeat 判斷 host runner 是否還在線;預設超過 30 秒未上報會顯示離線。

總數
{{ runner.runnerSummary.total }}
在線
{{ runner.runnerSummary.online }}
忙碌
{{ runner.runnerSummary.running }}
離線
{{ runner.runnerSummary.offline }}
連線 Runner 活動 佇列類型 最近心跳
{{ r.online ? '在線' : '離線' }}
{{ r.runner_id }}
{{ r.metadata?.hostname || '主機' }} / pid {{ r.metadata.pid }}
{{ getStatusLabel(r.online ? r.status : 'stopped') }}
工作 #{{ r.current_job_id }}
{{ queueType }}
{{ formatDate(r.last_seen_at) }}
{{ formatSecondsAgo(r.seconds_since_seen) }} / {{ r.stale_after_seconds }} 秒門檻
還沒有任何 runner heartbeat。請重啟 unified host runner,或確認 runner 已更新到支援 heartbeat 的版本。

佇列健康狀態

完整工作資料表彙總;更新時間 {{ formatDate(runner.queueGeneratedAt.value) || '--' }}

每佇列 {{ runner.queueLimits.max_pending_per_queue }} 每專案 {{ runner.queueLimits.max_active_per_project }} 每輪 {{ runner.queueLimits.max_enqueue_per_tick }} 目標 {{ runner.queueLimits.target_pending_per_runner }}/Runner
佇列 等待中 / 執行中 失敗 / 停止重試 最久等待 Runner 覆蓋 健康狀態 控制
{{ getQueueTypeIcon(queue.queue_type) }} {{ queue.queue_type }} {{ getQueueTypeLabel(queue.queue_type) }}
{{ queue.pending }} / {{ queue.running }}
上限 {{ queue.pending_limit }}
{{ queue.failed }} / {{ queue.dead }}
已完成 {{ queue.done }}
{{ formatQueueAge(queue.oldest_pending_age_seconds) }}
工作 #{{ queue.oldest_pending_job_id }}
{{ queue.online_runner_count }} 在線
建議 {{ queue.recommended_runner_count }} · {{ queue.runner_gap > 0 ? ('需新增 +' + queue.runner_gap) : getScaleReasonLabel(queue.scale_reason) }}
{{ runnerId }}
{{ getQueueHealthLabel(queue) }}
{{ queue.pause_reason }}
Queue summary 尚未載入。

專案壓力

專案 等待中 執行中 活動 / 上限 狀態 控制
專案 {{ project.project_id }} {{ project.pending }} {{ project.running }} {{ project.active }} / {{ project.active_limit }} {{ getProjectPressureLabel(project) }}
{{ project.pause_reason }}

工作隊列紀錄

狀態 執行腳本 專案 / 主題 時間 最新日誌 / 訊息 操作
{{ getStatusLabel(job.state) }}
{{ getQueueTypeIcon(job.queue_type) }} {{ job.payload?.script_filename || job.queue_type }} {{ getQueueTypeLabel(job.queue_type) }}
專案 {{ job.project_id }}
主題 {{ job.topic_id }}
{{ getJobSceneBinding(job) }}
{{ formatDate(job.updated_at || job.created_at) }}
{{ job.message || '無訊息' }}
Runner={{ job.runner_id }}
目前沒有被記錄的背景任務 排程 ...

🗂 腳本清單

同步 script_catalog.json:根目錄相容入口、工作流、Runner、Provider、共用 helper 與舊版封存腳本

載入中 ...
⚠️ {{ scriptsMod.error.value }}
總數
{{ scriptsMod.scriptSummary.value.total }}
啟用
{{ scriptsMod.scriptSummary.value.active }}
佔位
{{ scriptsMod.scriptSummary.value.stub }}
已封存
{{ scriptsMod.scriptSummary.value.archived }}
未登錄
{{ scriptsMod.scriptSummary.value.orphan }}
缺失
{{ scriptsMod.scriptSummary.value.missing }}
目前主線對照
網頁應用觸發佇列;主機端 Runner 撿取工作;根目錄相容入口保留舊檔名;真正邏輯集中在 workflows/runners/providers/shared/。 舊版實驗腳本只作封存與偵錯,不屬於目前推薦流程。
⚠️ 未列入 manifest 的檔案(未登錄)
下列 .mjs 檔案實際存在於磁碟上但未登錄到 manifest,請補齊或刪除:
  • • {{ p }}
❌ Manifest 有但檔案不存在(缺失)
  • • {{ p }}

{{ group.label }} ({{ group.items.length }})

{{ group.description }}

{{ s.name }}
{{ getScriptStatusLabel(s) }}
{{ s.path }}
{{ s.purpose }}
Web 功能: {{ s.web_feature }}
觸發方式: {{ s.triggered_by }}
佇列: {{ s.queue_dir }}
搭配: {{ s.pairs_with }}
呼叫來源:
{{ inv }}
尚未有任何腳本資料,請確認 manifest 設定。
{{ t.message }}

{{ modal.title }}

請從已下載影片清單中單選一支影片,直接建立專案。

已載入全部 {{ modal.videos.length }} 筆影片
🎬
{{ sourceLabel(modal.data.video?.source) }}
{{ modal.data.video?.title }}
{{ modal.data.video?.file_path }}
多平台
{{ modal.data.item?.asset?.title || modal.data.item?.topic?.title }}
{{ modal.data.item?.asset?.final_video_path }}
{{ entry.message }}
TikTok
{{ modal.data.item?.asset?.title || modal.data.item?.topic?.title }}
{{ modal.data.item?.asset?.final_video_path }}
TikTok 創作者資訊尚未更新或已超過 24 小時,請先在平台帳號卡片點「創作者資訊」。
Instagram Reels
{{ modal.data.item?.asset?.title || modal.data.item?.topic?.title }}
{{ modal.data.item?.asset?.final_video_path }}
Instagram Reels 發布需要 Meta app 權限、專業帳號 IG 使用者 ID,以及可公開讀取的 HTTPS 影片 URL。若未填公開影片 URL,後端會用 PUBLIC_BASE_URL 對 /downloads 路徑做 HEAD/GET 驗證。
留空公開影片 URL 時,後端會把最終就緒本機路徑轉成 PUBLIC_BASE_URL + /downloads/...。PUBLIC_BASE_URL 必須是 HTTPS,且 Meta 伺服器能直接讀到 mp4。
正在讀取執行日誌...