zyc and Claude Opus 4.8
a0ffb6fc8e
fix(core): 彻底修进入新建项目串台旧项目脚本
...
上一版没根治:action() 的后台 refreshProjectDetail 用旧 activeProjectId 拉到旧项目,
异步写回 projectDetail,而 pipelineProject=projectDetail||activeProject 无条件优先用它,
导致刚建的空项目仍渲染上一个项目的脚本(实测 Playwright 复现)。
改为渲染时校验 projectDetail.id===activeProjectId 才采用,否则回退 activeProject(列表项
已含完整嵌套脚本)。配合上一版的乐观 setProjectDetail/插入 projects + key=project.id,
新建项目即时显示空态+行30 三选项。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 18:27:44 +08:00
zyc and Claude Opus 4.8
3313269438
fix(core): 修复新建项目脚本助手串台旧项目脚本(Playwright 实测发现)
...
后台 hydrate 期间进入刚建的项目,pipelineProject 会先闪出旧项目(projectDetail 滞后),
脚本助手 chat 用旧项目的 currentScript 初始化并持久化到新项目 key,导致空项目错显
「已有3镜脚本」、行30 三选项不出现。修:
- 新建项目 onCreate 即时 setProjectDetail(created)+插入 projects,pipeline 不再闪旧项目
- PipelinePage 按 project.id key,切项目时 chat 等状态干净重挂
- chat auto 派生提示(「已有N镜」)不落 localStorage,杜绝跨项目串台
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 18:15:28 +08:00
zyc and Claude Opus 4.8
366e077c05
feat(脚本): 按流程文档重写脚本阶段(自动提取人物/场景 + 标签胶囊改写 + 基础资产按标签 seed)
...
后端:
- 出稿后新增轻量提取调用,从脚本抽取人物/场景标签及每个标签的建议生图提示词,
写入 project.metadata(cast/scenes/cast_prompts/scene_prompts)
- 提取调用接入计费闭环(reserve→charge/release,记为 script_optimization);
best-effort:无模型/预扣失败/调用失败/解析失败都吞掉返回空,绝不阻断出稿
- generate_base_asset 增加 label,落 group.metadata,把生成结果归回脚本标签卡
前端:
- 设定卡风格补齐到 5 个(真实测评/痛点种草/小红书种草/开箱测评/对比展示)
- 标签改为待确认胶囊流:增删不立即落库,排进队列在输入框上方显示可撤销胶囊,
点发送才整体重写;待删划线、待加虚线
- 基础资产人物/场景按提取标签逐个 seed 卡,显示 AI 提示词、可改后生成
测试:新增提取+计费+release+label 共 4 个用例,全套 24 个通过(sqlite test 设置)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 17:59:41 +08:00
zyc and Claude Opus 4.8
76b3ce94f9
test: 添加 QA 测试清单与流程文档
...
core/test/ 测试产物:测试清单 xlsx、截图 _imgs/_imgs2、流程.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 17:25:24 +08:00
zyc and Claude Opus 4.8
9be2042520
fix(core): 测试清单 行24/28-39/46 — 流水线脚本&资产/消息页 + 单镜重跑后端接口
...
前端流水线(pipeline.tsx):脚本助手三选项指引(AI全生/一句话/自带脚本)+来源风格推荐;
风格/人物设定卡并持久化到 project.metadata;Enter发送/Shift+Enter换行;长文折叠10行;
生成进度流提示;分镜人物/场景标签可编辑并持久化+点击添加分镜;单镜重跑/删除即时反馈;
脚本助手记录按项目 localStorage 持久化;Stage2 基础资产补替换/重跑/可编辑提示词;
三视图采用弹窗+缺三视图气泡。
消息页(messages):复用全站 .search-inline 搜索框、去掉小标题背景方块。
视频项目(projects):列表按创建时间倒序,新建置顶。
性能:action 改后台 hydrate,消除创建/确认后白等(行29/37)。
后端(projects/ai):新增单镜 AI 重跑接口 POST /projects/{id}/rerun-script-segment/
(regenerate_script_segment 服务,复用 AITask+计费 reserve/charge/release;+2 单测)。
前端 build 通过;后端 check 0/无新迁移/apps.projects 14 测试通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 16:51:32 +08:00
zyc and Claude Opus 4.8
f7a403ead3
fix(core): 测试清单 行16-33 — 商品详情/视频项目/新建向导/图片生成 批量修复
...
商品库+详情(行16-23):AI素材空状态缺省页;三视图16:9+版本历史切换+采用按钮;
详情「生成视频」预勾选商品、快捷生成图带入商品;管理商品编辑态保留底部统计;
删除商品 icon+DELETE ITEM 文案、乐观删除防重复点击;卡片图铺满占位区。
视频项目+新建向导(行24-28):筛选脚本来源按真实数据渲染;新建项目内「创建新商品」
右侧抽屉+创建后自动选中;开始栏 sticky 常驻;默认选中商品即显示卖点、未填完禁用开始;
去掉脚本风格/人物设定区块。
图片生成工作台(行29-33):模特单选;生成中改 spinner 动态图标+按钮间距;多任务并行;
重跑追加批次而非覆盖+更多按钮 hover 气泡菜单+「加入资产库/取消」切换与提示弹窗;
多批次本地持久化恢复。
收尾:App.tsx 接 initialProductId/preselectProductId/onCreateProduct/onAdoptTriView;
全局 toast 自动消失(成功3s/错误5s)修复行17③/22「右上角提示一直挂着」。
tsc -b && vite build 通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 15:10:26 +08:00
zyc and Claude Opus 4.8
57018fb101
fix(core): 测试清单 行4-15 — 记住我7天/工作台布局/商品创建选择弹窗/上传图持久化/清空筛选
...
- 记住我7天:勾选才持久化token+预填用户名,7天过期强制重登(localStorage vs sessionStorage)
- 工作台:最近项目进度/状态列对齐、快捷&提示卡片圆角边框、余额按钮金额左对齐
- 商品创建成功改为复用弹窗,选择 继续创建/去新建项目;主图随创建上传持久化
- 商品卡显示真实主图、点视频进详情视频项目tab
- 商品库/视频项目补 清空筛选 按钮
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-16 14:13:52 +08:00
zyc and Claude Opus 4.8
77c037495e
异步生图兜底:回收僵尸出图任务(worker 崩溃后退还被占额度)
...
worker 崩溃/重启可能留下卡在 RESERVED 的出图任务,额度被一直占住、前端也永远等不到。
每次新提交时顺手回收:>10 分钟仍 RESERVED 的标记失败并退还预留额度(与导出僵尸清理同思路,
无需额外定时任务)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 16:41:23 +08:00
zyc and Claude Opus 4.8
a749be5837
单图生成改为异步(Celery+AITask+前端轮询),与视频同架构
...
把独立生图从「请求内同步出图」改成异步任务,彻底根治整站 502:
- 后端 enqueue_standalone_images:Web 请求只建任务+预留额度(秒级),慢 ARK 出图派发给
Celery worker(generate_standalone_image_task)。Web 层不再被 ~30s 请求占住 worker,
健康探针不会被饿死 → 整站 502 从根上消失。
- run_standalone_image_task:worker 内单张出图,成功落库扣费/失败退费,幂等(只处理 RESERVED,
重复投递不二次扣费)。
- 提交成功后浏览器关闭/断网,worker 仍把图生成并落库,重开素材库即可见(异步天然抗断连)。
- 视图 POST 返回 202+任务列表,新增 GET ?ids= 轮询状态并带回成图;前端 submit+poll。
- count 上限 4→12,与 UI 一致。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 16:38:06 +08:00
zyc and Claude Opus 4.8
3472c3cc9c
修复整站502(健康探针被慢请求饿死)+全部模特死链+图片并发限流
...
- 后端 gunicorn 加 --threads 4:纯 sync worker 下几张图就占满 3 worker,
健康探针 /api/health/ 拿不到 worker→超时→pod 判不就绪→流量被掐→整站502。
图片生成 I/O 密集,加线程后慢请求不再饿死探针/其他接口。
- 前端图片生成并发上限 2:每张仍独立短请求,但不再 N 条一起砸单 pod 致 OOM。
- ai-tools 全部模特→ 接成展开/收起全部模特(原为纯 span 死链,模特>6 时第7个起选不到)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 16:15:49 +08:00
zyc and Claude Opus 4.8
9c3e4e5c8b
图片生成改为每张一条并行请求,根治多图生成超时 500
...
根因:多图生成走一条 HTTP 串行出 N 张,4 张累计 >120s 被 gunicorn 强杀 worker → 500
(日志实锤 SystemExit on ARK response.begin)。采纳用户建议拆成「每张一条请求」:
- App.tsx generateImages: 拆成 N 条并行单张请求(Promise.allSettled),单张约 30s 不超时,
并行后总耗时≈单张(比串行快 N 倍),任一张失败只丢那张(各自独立扣费/回滚)
- Dockerfile: gunicorn --timeout 120→300,给慢 ARK 留余量(双保险)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 15:38:08 +08:00
zyc and Claude Opus 4.8
a8852345db
修复线上视频导出卡死(OOM)+ 导出健壮性加固
...
根因:后端容器内存 limit 仅 768Mi,ffmpeg 编码 1080P 竖屏时内存峰值超限被
K8s OOMKill,导出后台线程随 Pod 重启而死,任务永远停在 35%(本地无 limit 29s 出片)。
- k8s/core/api-deployment.yaml: 后端内存 limit 768Mi→2Gi、requests 256→512Mi,
给 ffmpeg 足够编码空间(根治)
- export.py: ffmpeg subprocess 加 900s 超时(卡死不再永久 RUNNING)+ -threads 2 降内存峰值
- views.py: submit-export 清理超 5 分钟未结束的僵尸任务,前端不再无限转圈
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 13:58:18 +08:00
zyc and Claude Opus 4.8
5e2bc0fc5a
修复线上视频导出失败 + 配音预览音画同步
...
- Dockerfile: 补装 ffmpeg 与中文字体 fonts-noto-cjk,修线上导出报
"No such file or directory: 'ffmpeg'" 及字幕中文方块;换阿里云 apt 源防构建超时
- export.py: 字幕字体加载加 Noto CJK glob 兜底,适配不同版本 fonts-noto-cjk
- pipeline.tsx: 配音预览改 Web Audio 精确排程(借鉴 WebAV)——预解码 +
source.start(when,offset) + 增量重排,正在发声的句绝不掐断,消除字幕音错位与卡顿
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 13:20:30 +08:00
zyc and Claude Fable 5
ec90960a56
ci: 触发构建(Gitea 重启后验证流水线恢复)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-15 10:50:38 +08:00
zyc and Claude Fable 5
0bcde3072d
ci: 重新触发部署流水线(上次 push 未生成 Actions run)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-15 10:17:43 +08:00
zyc and Claude Fable 5
216a711291
后端生成闸+多项修复;前端全站更新;QA 审计与报告
...
后端:
- 新增 celery_health 生成前置闸——无 worker 在线时图片/视频生成入口
一律 503,防"提交到 ARK 后无人轮询、结果悬空+额度冻结"的数据丢失
- 拼接导出:帧率跟随源众数、字幕逐句重映射、原声/BGM 混音修复
- 资金核算审计脚本 + genesis 账目回填 + 滞留预留清理命令
- 接入 yunqi provider 与豆包 TTS 模型(catalog/migrations/bootstrap 命令)
前端:全站页面更新(pipeline/library/products/projects/team/account 等),
新增共享 pager 分页组件
QA:刷新 function-audit 全量输出,新增 full-qa 报告
文档:BP 产品介绍资料、design/CLAUDE.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-15 10:06:15 +08:00
zyc and Claude Fable 5
890cb9ab67
chore(core/qa): function-audit toolchain + parity/audit reports + pixel-perfect skill
...
- qa/function-audit: playwright 行为审计工具(audit.mjs/verify-modals.mjs/pages.json)
+ 18 页审计产出(*.audit.md/json、summary、运行日志)
- qa/visual-parity: 调试/测量辅助脚本(_dbg*.mjs/_measure.mjs/_off.mjs)
- core/还原度核对报告.md: 18 页 pixelmatch 核对结果(含 vite 代理陈旧坑记录)
- core/还原与接口待办.md: 逐页还原度/真实数据/交互接入待办总表
- .claude/skills/pixel-perfect-react: 像素级还原 React 的 SKILL 文档
- frontend/public/_devlogin.html: 临时本地登录辅助页(可删)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 09:41:30 +08:00
zyc and Claude Opus 4.8
3fac38c5ef
feat(core): notification inbox infinite scroll + command palette fix (+ pending WIP)
...
消息中心:全量渲染 → 真·后端分页滚动加载
- backend(ops/views): NotificationPagination(10/页,page_size 可覆盖)+
响应回 type_counts(按收件人绝对计数,不受分页/搜索影响)
- frontend(messages): 自管分页,滚到底加载下一批;tab/搜索走服务端并重置到第1页;
代号作废在途旧请求防切换卡空白;乐观标已读;「已加载 X / Y」分母用当前筛选总数
- api/App/types: listNotifications 支持 page/page_size/search;allNotifications 携带 type_counts
命令面板(侧边栏搜索):修复点开后 UI 错位
- app-shell: 遮罩 className 漏了基类 shell-command-bg(只有 .show)致无定位塌到左下;
补回基类 + header 类名对齐 .shell-command-h
- messages-page.css: 工作台收进视口高度,收件箱在面板内滚动
本次提交一并带入此前若干未提交 WIP(account/ai-tools/library/pipeline/products/settings +
accounts/ai/assets/billing/projects 后端),按用户要求整体推 dev。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-10 09:37:41 +08:00
zyc and Claude Opus 4.8
aa4bdeac83
chore(core/backend): update .env (DB_BIND_ADDRESS + trim CSRF origins)
...
- DB_BIND_ADDRESS → 192.168.124.137
- DJANGO_CSRF_TRUSTED_ORIGINS: drop api.airshelf.airlabs.art
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-09 14:53:16 +08:00
zyc and Claude Opus 4.8
0873e724bf
feat(core/frontend): pipeline stage editor (burn-in controls) + double-submit guard & button greying
...
Pipeline (脚本→资产→故事板→视频→拼接):
- Stage1 render real script shots + wire 确认脚本→adopt (advance stage)
- Stage2 add person/scene AI-生成 buttons + clickable category tabs
- Stage4 auto-poll videos to completion + per-segment upload + real frame thumbnails + download
- Stage5 real timeline editor: clips undo/redo/split/copy/delete/drag-reorder/zoom,
subtitle style + per-clip text editor, transition select (xfade preview),
BGM upload + volume, save draft, export-with-save → shows/download final MP4
- embedded asset URLs everywhere (beat assets pagination)
UX: re-entry guard in action() (no double-submit anywhere) + greyed :disabled
styles for btn-aigen/chat-mode/pill-cta/tl-action so generate buttons visibly
disable while generating.
Also includes prior uncommitted frontend work: settings preferences/sessions/avatar,
asset delete, account/team/products pages, fonts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-09 14:46:42 +08:00
zyc and Claude Opus 4.8
92826dec14
feat(core/backend): pipeline continuity + threaded ffmpeg burn-in export + upload/save-timeline
...
Video pipeline (script→assets→storyboard→video→stitch):
- robust split_script_into_segments (4 non-empty scenes), scene-aware storyboard/video prompts
- link VideoSegment→ScriptSegment + storyboard-frame reference image (graceful text fallback)
- idempotent poll_video_segment (no double-charge on repeated polling)
- threaded export (no Celery worker needed) + poll-export endpoint
- run_export_job rewritten to filter_complex: per-clip trim, xfade transitions,
subtitle burn-in (Pillow PNG overlay; this ffmpeg lacks libass), BGM mix
- upload-video-segment / upload-bgm / save-timeline endpoints
- serializers embed asset preview URLs (beat assets pagination); Pillow added to requirements
Also includes prior uncommitted backend work: account preferences/sessions,
billing trend, product/asset endpoints, accounts 0002 migration.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-09 14:46:16 +08:00
zyc and Claude Opus 4.8
d41e487f08
feat(k8s): 新增 core 真应用(前端+Django API+Celery worker)构建与部署
...
- core/frontend: Vite 多阶段镜像 + nginx 同源反代 /api,/admin,/static(零 CORS)
- core/backend: Django gunicorn 镜像 + entrypoint(自动 migrate/collectstatic)+ WhiteNoise
- k8s/core: api/worker/web Deployment+Service + ingress(airshelf-web.airlabs.art)
- workflow: 追加 core 前后端 build/push,从 core/backend/.env 套生产覆盖生成 env Secret 后部署
- .gitignore 放行 core/backend/.env;.env 白名单加入 airshelf-web 域名
- 含前端 WIP 还原改动
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-05 10:21:41 +08:00
zyc
cfdcd84a30
feat: add AirShelf core implementation
2026-06-05 10:21:40 +08:00
zyc and Claude Opus 4.7
9bcf943e82
ci: 添加 Gitea Actions 部署流水线 + K3s 清单
...
对齐 jimeng-clone 的流水线结构(master→prod / dev→dev),适配 AirShelf 纯静态形态:
- 电商AI平台/Dockerfile · 纯 nginx,无 build 阶段
- 电商AI平台/nginx.conf · 多入口 try_files,不 fallback 到 index.html
- k8s/ · web-deployment + ingress + cert-issuer + redirect middleware
- .gitea/workflows/deploy.yaml · build/push 重试 3 次,deploy 重试 5 次,失败上报日志中心
- prod 域名 airshelf.airlabs.art / dev 域名 airshelf.test.airlabs.art
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 18:12:56 +08:00