knowledge-vault/discussions/technology/Codex/6.建立视频库/2.pyton的yaml.md

232 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1
之前我让你写文档之类的工作时,经常会遇到你说:
> 索引脚本用系统 python 缺少 yaml这是环境问题不是项目证据问题。我会按 Skill 说明改用 conda run -n skills-vault 再跑一次。
解释下,这个环境缺少什么,你的建议?
缺的是 Python 包 `PyYAML`,它的导入名是 `yaml`。我刚核对了当前环境:
- 默认 `python``C:\Python314\python.exe`,版本 `3.14.3``yaml_spec=None`,也就是没有 `yaml` 模块。
- `conda` 不在 PATH 上。
-`C:\Users\wangq\miniconda3\Scripts\conda.exe` 可用。
- `skills-vault` Conda 环境可用:`C:\Users\wangq\.conda\envs\skills-vault\python.exe`Python `3.11.15``PyYAML/yaml` 版本 `6.0.3`
所以我之前说“这是环境问题,不是项目证据问题”的意思是:索引脚本失败不是因为项目文档、索引文件、证据链本身坏了,而是运行脚本时用了错误解释器。脚本需要解析 `.yaml` / `.yml`,但默认系统 Python 没装 `PyYAML`
我的建议:
1. 不要往 `C:\Python314` 里补装项目依赖。它是系统/全局解释器,容易让不同项目互相污染。
2.`skills-vault`、review helper、索引/验证类脚本,默认用:
```powershell
& 'C:\Users\wangq\miniconda3\Scripts\conda.exe' run -n skills-vault python -B <script-or-module>
```
如果某个环境里 `conda` 已在 PATH才可以简写成 `conda run -n skills-vault ...`
3. repo 里的自动化说明最好不要假设 `conda` 在 PATH应记录显式 `conda.exe` 路径或提供一个小 wrapper。
4. 只有当某个脚本明确属于 `video-workbench` 自己,而不是复用 `skills-vault` helper 时,才考虑给 `video-workbench` 建自己的环境依赖。否则继续复用 `skills-vault` 环境更稳。
一句话:当前机器不缺项目文件,缺的是默认 Python 里的 `PyYAML`;正确处理方式是使用已配置好的 `skills-vault` Conda 环境,而不是修系统 Python。
# 2
> 正确处理方式是使用已配置好的 `skills-vault` Conda 环境,而不是修系统 Python
我同意,`skills-vault` Conda 就是为本地做的通用准备除非确实有特殊的或者依赖冲突再重新建一个新conda。
那么我建议你记录这个到规则里作为默认conda/python环境以后就不用每次都调查多次。
你觉得呢?
我同意,而且已经落到规则里了。
我在 [AGENTS.md](/C:/Users/wangq/Documents/Codex/video-workbench/AGENTS.md:16) 新增了 `Python / Conda Environment` 小节,明确:
- 本 repo 的本地 Python 自动化、验证、索引、helper 脚本默认用 `skills-vault` Conda 环境。
- 首选显式路径:`& 'C:\Users\wangq\miniconda3\Scripts\conda.exe' run -n skills-vault python -B ...`
- `conda` 在 PATH 时可以简写。
- 系统 Python 缺 `yaml` / PyYAML 不算项目证据问题。
- 默认不修系统 Python只有特殊依赖、依赖冲突或项目明确要求时才新建 Conda 环境。
我只改了 `AGENTS.md`。另外 `git status` 里有一个未跟踪的 `docs/cases/on-the-road-project-evolution-material.md`,我没有处理它。
# 3
另外关于git。这个项目只是本地做了git提交但是没有配置对应的远程仓库。
我看到.git/文件夹里有200多M这个应该是保存了历史的版本。由于这个是图片/视频生产的工作台,所以占地方的都是这些没法差分的二进制。
那么我若同步远程仓库,远程仓库的容量占用也会包括.git 是么?
问题,主要是远程仓库是我自建的,硬盘比较小。我要权衡下,是否做同步。
是,远程仓库会占用“`.git` 等价物”的容量,但不是把你本地 `.git/` 文件夹原样上传。
Git 远端通常是一个 bare repo里面保存的是 commits、trees、blobs、refs/tags也就是 Git 历史对象库。你 push 过去的是当前分支/标签可达的历史对象。对图片、视频这类已压缩二进制Git 很难有效差分,所以历史里每一个版本基本都会继续占空间。
我刚看了当前仓库:
- 本地 `.git``250.8 MiB`
- `git count-objects` 显示对象还没 pack`size: 250.70 MiB`, `in-pack: 0`
- 最大的一批 blob 主要是 PNG每个约 `2.4-2.7 MiB`
- 本地其实已经配置了远程 URL`https://git.wantsong.life/wantsong/video-workbench.git`,但我没有联网验证远端是否已建好或是否已同步
所以第一次 push 后,远端占用大概率和这 `250 MiB` 同量级,可能因为 pack 压缩稍小一些,但不会小到“只剩文本项目”的水平。以后每多提交一批生成图、视频、重试图,远端会持续增长。
我的建议是:不要把完整媒体生产历史直接当作默认远程同步策略。更合理的是分层:
1. Git 同步工作台的“控制面”:`project.md`、`execution-plan.md`、`slides.md`、brief、prompt、handoff、规则、脚本、索引。
2. 图片/视频成品作为“资产面”可以本地归档、NAS、对象存储、独立备份盘Git 里只记录路径、文件名、版本、hash、生成参数。
3. 已经提交进 Git 历史的媒体文件,如果要让远端变小,光改 `.gitignore` 不够,必须重写历史或建一个干净的新远程仓库。
4. Git LFS 可以改善 clone/pull 体验但如果你的远端也是自建小硬盘LFS blob 仍然占远端磁盘,只是换了存放位置,不是免费减容。
如果你重视“完整可回滚历史”,同步这 250MB 目前还不算夸张;但这个 repo 是图片/视频工作台,增长曲线会很快。我会倾向于:现在先不要无脑 push 全历史;先决定是否保留媒体历史。如果只是想远程备份流程和文本证据,最好做一次媒体历史瘦身或新建一个 clean remote。
# 4
当前项目一共475M除了.git/外还有其他文件同步的话远程仓库应该是475m的规模上进行部分压缩吧
不是 475MB 这个口径。
你本地现在大概是:
- 项目总目录:`475.9 MiB`
- `.git`:约 `250.8 MiB`
- 去掉 `.git` 的工作区文件:`225.1 MiB`
- 当前 Git 跟踪文件:约 `225.0 MiB`
本地之所以是 `475MB`,是因为 Git 仓库本地有两份东西:
1. 工作区 checkout 出来的真实文件图片、Markdown、项目文件`225MB`
2. `.git` 里的历史对象库:提交历史、当前版本对象、旧版本对象,约 `251MB`
远端 Git 仓库通常是 bare repo只保存第 2 类,也就是 Git 对象库,不额外保存一个 checkout 工作区。所以远端不是按 `475MB` 上传后压缩,而更接近 `.git` 的规模,当前大概是 `200-250MB` 级别,取决于 pack 压缩效果。
但是有两个重要补充:
- 如果你以后继续把新生成图片/视频 commit 进去,远端会持续按历史增长。二进制旧版本不会因为当前文件被替换就消失。
- 别人 clone 到本地后,会重新变成类似你的结构:远端对象库 + checkout 工作区,所以 clone 后本地仍可能接近 `475MB` 或更多。
所以权衡远端硬盘时,看“远端仓库占用”应主要参考 `.git` / packed object size而不是项目目录总大小。当前第一次完整同步我会按 `250MB` 左右预估;保守一点按 `300MB` 留空间。后续增长才是主要风险。
# 5
> 1. Git 同步工作台的“控制面”:`project.md`、`execution-plan.md`、`slides.md`、brief、prompt、handoff、规则、脚本、索引。
> 2. 图片/视频成品作为“资产面”可以本地归档、NAS、对象存储、独立备份盘Git 里只记录路径、文件名、版本、hash、生成参数。
这个策略我基本同意那么这个是手动控制的还是要做一个Git策略
建议做成 Git 策略,不要靠手动记忆。
手动控制可以临时用,但这个 repo 的图片/视频产物会越来越多,靠“下次记得别 add”迟早会失手。更稳的是三层
1. **`.gitignore` 控制默认不入库**
把生成图、视频、临时渲染、批量输出目录默认 ignore。这样 `git add -A` 不会误收大文件。
2. **资产清单入库**
Git 里保留文本控制面,比如:
- prompt / brief / design
- `slides.md`
- image path
- hash
- 生成时间
- 使用的参考图
- 是否被接受
3. **少量例外显式入库**
关键 anchor 图、小型参考图、最终封面等可以允许入库,但要通过明确路径或命名规则,而不是“所有 PNG 都可以”。
我会建议采用“默认排除媒体,白名单保留少量关键资产”的策略。例如:
```gitignore
# Generated media assets
projects/**/slides/**/s*-v*-image.png
projects/**/slides/**/s*-v*-image.jpg
projects/**/slides/**/s*-v*-image.webp
projects/**/renders/**
projects/**/exports/**
projects/**/videos/**
garden-gpt-image-2/**
# Keep text control files tracked
!projects/**/slides/**/*.md
!projects/**/tasks/**/*.md
!projects/**/visual-system/**/*.md
```
但这里有一个关键点:`.gitignore` 只管未来,不会移除已经进入历史的图片。如果你要让远端变小,需要另做一次历史清理,或者更简单地新建一个 clean remote / clean branch只保留控制面和必要资产。
我的建议顺序是:
1. 先定 `media policy`,写进 `AGENTS.md``docs/workflows/`
2.`.gitignore`,防止继续增长。
3. 再决定当前历史是否要瘦身。
4. 如果要同步远端,小硬盘场景下优先同步 clean 后的仓库,而不是现有全媒体历史。
# 6
你可以看下项目`在路上`的真实结构,占用大的是镜头`slides/snn/`,镜头目录下是图片和脚本混杂的。
另外`visual-system/`作为公共部分,`intake/`作为输入我觉得是要保留在git里的。
现在`在路上`已经全部提交了,但是可以参考`在路上`来考虑后续项目的策略。
看了 `在路上` 的真实结构后,我会把策略定得更细:不要按 `slides/` 目录整体排除,要按“镜头目录里的媒体产物”排除。
当前 `在路上` 大致是:
- `slides/`: `178.61 MiB`
- 其中 PNG`84` 个,`177.97 MiB`
- Markdown`131` 个,只有 `0.64 MiB`
- `visual-system/`: `9.93 MiB`
- PNG`14` 个,`9.9 MiB`
- `intake/`: `9.24 MiB`
- PNG`4` 个,`9.11 MiB`
- `archive/`: `22.02 MiB`
- PNG`21` 个,`21.9 MiB`
所以你的判断是对的:`visual-system/` 和 `intake/` 应该保留在 Git 里。它们是输入、身份、风格、公共视觉依据,不是普通生成废料。真正需要控制的是 `slides/sNN/` 下的 `*-image.png` 这类逐镜头生成产物。
我建议后续项目采用这个 Git 策略:
```gitignore
# Per-shot generated media: do not track by default
projects/**/slides/s*/*.png
projects/**/slides/s*/*.jpg
projects/**/slides/s*/*.jpeg
projects/**/slides/s*/*.webp
projects/**/slides/s*/*.mp4
projects/**/slides/s*/*.mov
projects/**/slides/s*/*.wav
projects/**/slides/s*/*.mp3
# Keep per-shot control/script records
!projects/**/slides/s*/*.md
!projects/**/slides/*.md
# Keep project source authorities
!projects/**/intake/**
!projects/**/visual-system/**
# Heavy generated/export areas
projects/**/renders/**
projects/**/exports/**
projects/**/videos/**
tmp/*
garden-gpt-image-2/*
```
这个策略的核心是:
- `slides/sNN/*.md` 入库brief、prompt、packet、return、review、design 都保留。
- `slides/sNN/*.png/mp4/...` 默认不入库:生成图和视频走资产备份。
- `intake/` 入库:用户/GPT 原始输入和输入参考图保留。
- `visual-system/` 入库角色、风格、公共参考、anchor 资产保留。
- `archive/` 后续要谨慎:如果是废弃生成图,不建议默认入库;如果是退役但仍有解释价值的角色/风格依据,最好移动或归档到 `visual-system/` 的有说明位置。
当前 `.gitignore` 只排除了 `tmp/``garden-gpt-image-2/`,对后续项目不够。`在路上` 既然已经全部提交,可以先不动历史,把它当作样本;但从下一个项目开始,应该把这个 media policy 写进 `.gitignore` 和工作流规则里,否则每次 `git add -A` 都会继续把镜头图收进去。
# 7
是的`archive/`现在都是废弃图,废弃文档,不入库
把这个补一下,放到`.gitignore` 和工作流规则里
打Tag完成在路上
然后同步远程库。