feat(发布计划): 素材支持图片(图文)—— 上传视频/图片,发布流程共用一条 + 切号健壮性再修
用户实测反馈:"图片流程一样,现在也是点第一个" → 图片不做单独一套流程,只放开上传侧; 扩展名一路原样带到手机上(抖音按扩展名/MIME 判断视频还是图文,图片推成 .mp4 会变坏视频)。 · core/video_plan.py:VIDEO_EXTS + IMAGE_EXTS(jpg/jpeg/png/webp/heic) → MEDIA_EXTS; 报错文案改"不是视频/图片文件" · tasks/generic/publish_flow.push_video:ext 默认**从本地文件名取**(不再硬编码 .mp4); drop_old_copies 收到真实扩展名 · tasks/generic/task.py:删手机素材优先用推送时记下的 push_remote,其次按素材扩展名现算; 切号:等面板开稳再点(刚出现就点会被入场动画吞掉)、点完面板还开着(点的就是当前号) 就先关面板、一切以**回读**为准、回读窗口 12s→30s(换号会触发抖音整体重启,实测 77s 才回来); 失败时日志附带"当时屏幕上是什么"(亮屏/前台包/屏上文字)—— "点了没反应"一眼可判 · 骨架:先 stop_app 冷启动(抖音可能停在发布页/别的视频页,那种页面上没有「我」页签, 切号第一步就废);「校验账号」的选择器与「读名字」统一从 .env 取(漏了这一步会静默跳过 整个发布流程 —— 用户实际遇到的"直接完成、没发布"就是这个) · 界面:上传视频 → 上传视频/图片,accept 加 image/*,明细表"视频文件"→"素材文件",help 文案 · 文档:TASK_DEV §4.7 / API / DATA_MODEL / ARCHITECTURE / README 同步 · 测试:解析用例补图片(jpg/png/webp/大写 JPG 认,gif 不收)+ 改报错文案期望
This commit is contained in:
@@ -591,7 +591,7 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
|
||||
<div>
|
||||
<div class="toolbar" style="flex-wrap:wrap">
|
||||
<button class="btn btn-primary" onclick="document.getElementById('rp-video-input').click()"
|
||||
data-perm="devices">上传视频</button>
|
||||
data-perm="devices">上传视频/图片</button>
|
||||
<button class="btn" onclick="document.getElementById('rp-title-input').click()"
|
||||
data-perm="devices">上传标题/正文</button>
|
||||
<button class="btn btn-primary" onclick="rpPushAll()" data-perm="devices"
|
||||
@@ -637,7 +637,7 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
|
||||
<summary style="cursor:pointer;color:var(--text-light)">明细表(与时间线同一份数据)</summary>
|
||||
<table class="table table-sm" style="margin-top:8px">
|
||||
<thead><tr>
|
||||
<th>发布日期</th><th>名字</th><th>由哪台发出</th><th>编号</th><th>视频文件</th>
|
||||
<th>发布日期</th><th>名字</th><th>由哪台发出</th><th>编号</th><th>素材文件</th>
|
||||
<th>标题</th><th>正文</th><th>状态</th><th>分享链接</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody id="tb-release"></tbody>
|
||||
@@ -645,7 +645,7 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
|
||||
</details>
|
||||
|
||||
<div class="help">
|
||||
视频文件名规则 <code>名字_日期_编号</code>(<b>名字 = 抖音上的昵称</b>;编号可省略,日期如 <code>20260912</code> 就是发布日期);
|
||||
素材文件名规则 <code>名字_日期_编号</code>(<b>名字 = 抖音上的昵称</b>;<b>视频、图片都行</b>,扩展名各带各的;编号可省略,日期如 <code>20260912</code> 就是发布日期);
|
||||
标题 txt 每行 <code>标题 || 正文_名字_日期_编号</code>(<code>||</code> 后面是正文、可省略;编号可省,标题/正文里可以有下划线、可以有 <code>#话题</code>;<code>#</code> 开头的行<b>只要认得出名字/日期就当标题</b>,认不出才当注释忽略)。
|
||||
<b>名字里不能有下划线、不能是纯数字</b>(那样切不出名字来),不满足会直接拒收并说明原因。<br>
|
||||
上传后自动按 (名字, 日期, 编号) 配对:有编号按编号精确对,没编号按顺序配 ——
|
||||
@@ -659,7 +659,7 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
|
||||
要先到抖音里看一眼,再用「已发出 / 未发出」裁决(平台不会自动重发)。
|
||||
</div>
|
||||
|
||||
<input type="file" id="rp-video-input" multiple accept="video/*" style="display:none" onchange="rpPickVideos(this)">
|
||||
<input type="file" id="rp-video-input" multiple accept="video/*,image/*" style="display:none" onchange="rpPickVideos(this)">
|
||||
<input type="file" id="rp-title-input" accept=".txt" style="display:none" onchange="rpPickTitles(this)">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user