story(vol07): 完成137至164章与首收阅读包
This commit is contained in:
+2
-2
@@ -8,7 +8,7 @@
|
||||
./tools/validate-project.ps1
|
||||
```
|
||||
|
||||
检查相对链接、年表、年龄、粮食算术、独立序章00起的连续章号、前六卷范围及章纲、当前EP01 V05的25场/1290秒预算等;支持三位及更多位章号,后续续写不按两位截断。脚本保留UTF-8 BOM,兼容Windows PowerShell读取中文。历史75秒技术试片单独校验,不混用当前第一集场号;通过不等于艺术质量、真实片长或配音验收通过。
|
||||
检查相对链接、年表、年龄、粮食算术、独立序章00起的连续章号、前七卷范围及章纲、当前EP01 V05的25场/1290秒预算等;支持三位及更多位章号,后续续写不按两位截断。脚本保留UTF-8 BOM,兼容Windows PowerShell读取中文。历史75秒技术试片单独校验,不混用当前第一集场号;通过不等于艺术质量、真实片长或配音验收通过。
|
||||
|
||||
## 阅读合订本与台词同步
|
||||
|
||||
@@ -18,7 +18,7 @@ python tools/build-reading-editions.py --date 2026-10-30
|
||||
|
||||
从逐章稿生成前三卷68章合订本、第三卷20章完整阅读本,保留前30章节选、前48章合订本和第二卷24章阅读本的原范围;从现行12集阅读稿生成动画合订本。同步EP02—12逐集与总录制表,并核对Fountain和阅读稿的台词顺序与内容。保留已有录制状态、配音身份、选定take、实测时长和旧台词ID;新ID从源稿读取。修订应先改源稿,合订本可重建。
|
||||
|
||||
默认流程按已完成范围增加四、五、六卷阅读本。只续写小说时运行`python tools/build-reading-editions.py --date 2026-11-01 --novel-only`,当前仅生成前六卷136章与第六卷两份阅读本;若尚无第六卷完卷源稿则退回五卷或四卷范围。保留此前阅读本范围与日期,跳过影像剧本、录制表与声音资料写入;章号按数值排序,避免100排到99之前。
|
||||
默认流程按已完成范围增加四至七卷阅读本。只续写小说时运行`python tools/build-reading-editions.py --date 2026-11-01 --novel-only`,当前仅生成前七卷164章与第七卷两份阅读本;尚无七卷完卷源稿时依次退回六、五、四卷。旧阅读本范围与日期保留,跳过影像剧本、录制表与声音资料写入;章号按数值排序。
|
||||
|
||||
## 图片素材站导出
|
||||
|
||||
|
||||
@@ -228,6 +228,8 @@ def build_novel_edition(chapters, destination, title, scope, edition_date):
|
||||
parts.append('# 第五卷 越过边境')
|
||||
elif path.name.startswith('113_'):
|
||||
parts.append('# 第六卷 紫发魔王')
|
||||
elif path.name.startswith('137_'):
|
||||
parts.append('# 第七卷 第一片新田')
|
||||
parts.append(re.sub(r'^(#+) ', r'\1# ', source, flags=re.M).rstrip())
|
||||
write(destination, '\n\n'.join(parts) + '\n')
|
||||
return count
|
||||
@@ -302,6 +304,30 @@ def build_six_volume_editions(edition_date):
|
||||
print(sixth_out)
|
||||
|
||||
|
||||
def build_seven_volume_editions(edition_date):
|
||||
"""汇集七卷当前范围,保留此前合订本与影像资料。"""
|
||||
chapters = []
|
||||
for volume in ('第一卷', '第二卷', '第三卷', '第四卷', '第五卷', '第六卷', '第七卷'):
|
||||
paths = (NOVEL / '03_正文' / volume).glob('*.md')
|
||||
chapters.extend(sorted((p for p in paths if re.match(r'^\d+_', p.name)),
|
||||
key=lambda p: int(p.name.split('_', 1)[0])))
|
||||
numbers = [int(p.name.split('_', 1)[0]) for p in chapters]
|
||||
if numbers != list(range(165)):
|
||||
raise ValueError('七卷应为序章00和正文01—164,无缺号或重复')
|
||||
seventh = [p for p in chapters if 137 <= int(p.name.split('_', 1)[0]) <= 164]
|
||||
combined = NOVEL / '前164章_阅读合订本.md'
|
||||
seventh_out = NOVEL / '第七卷_第一片新田_阅读合订本.md'
|
||||
full_count = build_novel_edition(chapters, combined,
|
||||
'《寂静诸神:炉火》前七卷阅读合订本',
|
||||
'独立序章+正文1—164章;第一、二、五、六卷各24章,第三、四卷各20章,第七卷28章完整初稿', edition_date)
|
||||
seventh_count = build_novel_edition(seventh, seventh_out,
|
||||
'第七卷《第一片新田》阅读合订本',
|
||||
'总第137—164章,共28章;875早春—晚秋,埃利安20岁', edition_date)
|
||||
print(f'小说164章+序章;约{full_count:,}汉字;第七卷28章约{seventh_count:,}汉字(含标题)')
|
||||
print(combined)
|
||||
print(seventh_out)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--date', required=True)
|
||||
@@ -311,7 +337,9 @@ def main():
|
||||
if args.novel_only:
|
||||
if args.refresh_reading:
|
||||
parser.error('--novel-only不能与--refresh-reading同时使用')
|
||||
if (NOVEL / '03_正文/第六卷/136_春水进渠之前.md').is_file():
|
||||
if (NOVEL / '03_正文/第七卷/164_下一季的座位.md').is_file():
|
||||
build_seven_volume_editions(args.date)
|
||||
elif (NOVEL / '03_正文/第六卷/136_春水进渠之前.md').is_file():
|
||||
build_six_volume_editions(args.date)
|
||||
elif (NOVEL / '03_正文/第五卷/112_明天要见的人.md').is_file():
|
||||
build_five_volume_editions(args.date)
|
||||
@@ -409,6 +437,8 @@ def main():
|
||||
build_five_volume_editions(args.date)
|
||||
if (NOVEL / '03_正文/第六卷/136_春水进渠之前.md').is_file():
|
||||
build_six_volume_editions(args.date)
|
||||
if (NOVEL / '03_正文/第七卷/164_下一季的座位.md').is_file():
|
||||
build_seven_volume_editions(args.date)
|
||||
print(f'EP02—12录制台词:{len(all_rows)};各集:{episode_counts}')
|
||||
print('已核对11集Fountain与阅读稿台词逐条一致。')
|
||||
print(full_out)
|
||||
|
||||
@@ -342,6 +342,17 @@ if ($sixthVolumeIds.Count -gt 0) {
|
||||
$failures.Add('Volume six chapter outline and prose IDs differ')
|
||||
}
|
||||
}
|
||||
$seventhVolumeIds = @($novelFiles | Where-Object { $_.Directory.Name -eq '第七卷' } | ForEach-Object { [int]($_.Name -split '_', 2)[0] } | Sort-Object)
|
||||
if ($seventhVolumeIds.Count -gt 0) {
|
||||
if (($seventhVolumeIds -join ',') -ne ((137..164) -join ',')) {
|
||||
$failures.Add('Completed volume seven must contain chapters 137-164')
|
||||
}
|
||||
$seventhOutline = Read-ProjectText '05_小说创作/02_章节大纲/第七卷_章节大纲.md'
|
||||
$seventhOutlineIds = @([regex]::Matches($seventhOutline, '(?m)^\| (\d+) \|') | ForEach-Object { [int]$_.Groups[1].Value })
|
||||
if (($seventhOutlineIds -join ',') -ne ($seventhVolumeIds -join ',')) {
|
||||
$failures.Add('Volume seven chapter outline and prose IDs differ')
|
||||
}
|
||||
}
|
||||
foreach ($legacy in @(
|
||||
'06_AI动漫制作/03_分镜与镜头/01_镜头表/S01E01_SC12_75秒试片镜头表.md',
|
||||
'06_AI动漫制作/04_生成方案/01_图像提示词/S01E01_SC12_关键帧提示词.md',
|
||||
|
||||
Reference in New Issue
Block a user