本文へ移動
cccskills
無料GitHub で公開

ascii-video

ASCII 视频:将视频/音频转换为彩色 ASCII MP4/GIF。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md14.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

ASCII 视频制作流程

Harness-agent 工具

本技能从 Octop 移植。使用以下 harness/deepagents 工具:

概念工具
Shellexecute
读/写/编辑文件read_file, write_file, edit_file
查找文件/搜索内容glob, grep
获取 URLweb_fetch
浏览器自动化browser_use
子代理工作task
记忆memory_store, memory_recall, memory_search

内置技能文件位于 /_builtin_skills/<name>/。用户安装的技能位于 /skills/<name>/。

何时使用

当用户请求:ASCII 视频、文本艺术视频、终端风格视频、字符艺术动画、复古文本可视化、音频可视化(ASCII)、将视频转换为 ASCII 艺术、矩阵风格效果或任何动画 ASCII 输出时使用。

内容概览

ASCII 艺术视频制作流程——支持任何格式。将视频/音频/图像/生成式输入转换为彩色 ASCII 字符视频输出(MP4、GIF、图像序列)。涵盖:视频转 ASCII 转换、音频反应式音乐可视化、生成式 ASCII 艺术动画、混合视频+音频反应式、文本/歌词叠加、实时终端渲染。

创意标准

这是视觉艺术。ASCII 字符是媒介;电影是标准。

在编写一行代码之前,阐明创意概念。情绪是什么?这个视频讲述了什么视觉故事?是什么让这个项目不同于其他所有 ASCII 视频?用户的提示是一个起点——要用创意野心去诠释它,而不是字面转录。

首次渲染 excellence 是不可协商的。 输出必须在不需要修改轮次的情况下在视觉上引人注目。如果某些东西看起来普通、平淡或像"AI 生成的 ASCII 艺术",那就是错误的——在交付之前重新思考创意概念。

超越参考词汇表。 参考中的效果目录、着色器预设和调色板库是一个起始词汇表。对于每个项目,组合、修改并发明新模式。目录是颜料调色板——你来绘制画作。

主动具有创意。 当项目需要时,扩展技能的词汇表。如果参考中没有视觉需求,就构建它。至少包含一个用户没有要求但会欣赏的视觉时刻——过渡、效果、提升整个作品的色彩选择。

** cohesive 美学优于技术正确性。** 视频中的所有场景必须通过统一的视觉语言连接起来——共享色温、相关字符调色板、一致的运动词汇。一个技术正确但每个场景使用随机不同效果的视频是美学失败。

密集、分层、经过深思熟虑。 每一帧都应该值得观看。绝不要平淡的黑色背景。始终多网格构图。始终每个场景都有变化。始终有意的色彩。

模式

模式输入输出参考
视频转 ASCII视频文件ASCII 重现源素材references/inputs.md § 视频采样
音频反应式音频文件由音频特征驱动的生成式视觉references/inputs.md § 音频分析
生成式无(或种子参数)程序化 ASCII 动画references/effects.md
混合式视频 + 音频带音频反应式叠加的 ASCII 视频两个输入参考
歌词/文本音频 + 文本/SRT带视觉效果的定时文本references/inputs.md § 文本/歌词
TTS 旁白文本引用 + TTS API带打字文本的旁白证言/引用视频references/inputs.md § TTS 集成

技术栈

每个项目一个独立的 Python 脚本。无需 GPU。

层工具用途
核心Python 3.10+, NumPy数学、数组操作、向量化效果
信号SciPyFFT、峰值检测(音频模式)
成像Pillow (PIL)字体光栅化、帧解码、图像 I/O
视频 I/Offmpeg (CLI)解码输入、编码输出、混合音频
并行concurrent.futuresN 个工作线程用于批处理/剪辑渲染
TTSElevenLabs API(可选)生成旁白剪辑
可选OpenCV视频帧采样、边缘检测

流程架构

每个模式都遵循相同的 6 阶段流程:

INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADER → ENCODE
  1. INPUT — 加载/解码源素材(视频帧、音频采样、图像或无)
  2. ANALYZE — 提取每帧特征(音频频带、视频亮度/边缘、运动向量)
  3. SCENE_FN — 场景函数渲染到像素画布 (uint8 H,W,3)。通过 _render_vf() + 像素混合模式组合多个字符网格。参见 references/composition.md
  4. TONEMAP — 基于百分位的自适应亮度归一化。参见 references/composition.md § 自适应 Tonemap
  5. SHADER — 通过后处理 ShaderChain + FeedbackBuffer。参见 references/shaders.md
  6. ENCODE — 将原始 RGB 帧通过管道传输到 ffmpeg 以进行 H.264/GIF 编码

创意方向

美学维度

维度选项参考
字符调色板密度斜坡、块元素、符号、文字(片假名、希腊语、如尼文字、盲文)、项目特定architecture.md § 调色板
色彩策略HSV、OKLAB/OKLCH、离散 RGB 调色板、自动生成和谐、单色、色温architecture.md § 色彩系统
背景纹理正弦场、fBM 噪声、域扭曲、沃罗诺伊图、反应扩散、元胞自动机、视频effects.md
主要效果环形、螺旋、隧道、漩涡、波浪、干涉、极光、火焰、SDF、奇异吸引子effects.md
粒子火花、雪、雨、气泡、如尼文字、轨道、群集 boid、流场跟随者、轨迹effects.md § 粒子
着色器情绪复古 CRT、干净现代、故障艺术、电影感、梦幻、工业、迷幻shaders.md
网格密度xs(8px) 到 xxl(40px),每层混合architecture.md § 网格系统
坐标空间笛卡尔、极坐标、平铺、旋转、鱼眼、莫比乌斯、域扭曲effects.md § 变换
反馈缩放隧道、彩虹轨迹、幽灵回声、旋转曼陀罗、色彩演变composition.md § 反馈
遮罩圆形、环形、渐变、文本模版、动画虹膜/擦除/溶解composition.md § 遮罩
过渡交叉淡化、擦除、溶解、故障剪切、虹膜、基于遮罩的揭示shaders.md § 过渡

每段变奏

绝不要为整个视频使用相同的配置。对于每个段落/场景:

  • 不同的背景效果(或组合 2-3 个)
  • 不同的字符调色板(匹配情绪)
  • 不同的色彩策略(或至少是不同的色调)
  • 变化着色器强度(高峰期更多 bloom,安静期更多颗粒)
  • 不同的粒子类型(如果粒子处于活动状态)

项目特定发明

对于每个项目,至少发明以下之一:

  • 匹配主题的自定义字符调色板
  • 自定义背景效果(组合/修改现有构建块)
  • 自定义色彩调色板(匹配品牌/情绪的离散 RGB 集合)
  • 自定义粒子字符集
  • 新颖的场景过渡或视觉时刻

不要只是从目录中挑选。目录是词汇表——你来写诗。

工作流

步骤 1:创意愿景

在编写任何代码之前,阐明创意概念:

  • 情绪/氛围:观众应该感受到什么?充满活力、冥想、混乱、优雅、不祥?
  • 视觉故事:持续时间内发生了什么?建立张力?转变?溶解?
  • 色彩世界:温暖/凉爽?单色?霓虹?大地色调?主导色调是什么?
  • 字符纹理:密集数据?稀疏星星?有机点?几何块?
  • 是什么让这个不同:使这个项目独一无二的一件事是什么?
  • 情感弧:场景如何进展?以能量开始,建立到高潮,解决?

将用户的提示映射到美学选择。"寒冷的低传真可视化"需要与"故障赛博朋克数据流"完全不同的所有东西。

步骤 2:技术设计

  • 模式 — 上述 6 种模式中的哪一种
  • 分辨率 — 横向 1920x1080(默认)、纵向 1080x1920、方形 1080x1080 @ 24fps
  • 硬件检测 — 自动检测核心/RAM,设置质量配置文件。参见 references/optimization.md
  • 段落 — 将时间戳映射到场景函数,每个都有自己的效果/调色板/色彩/着色器配置
  • 输出格式 — MP4(默认)、GIF(640x360 @ 15fps)、PNG 序列

步骤 3:构建脚本

单个 Python 文件。组件(带参考):

  1. 硬件检测 + 质量配置文件 — references/optimization.md
  2. 输入加载器 — 模式相关;references/inputs.md
  3. 特征分析器 — 音频 FFT、视频亮度或合成
  4. 网格 + 渲染器 — 带位图缓存的多密度网格;references/architecture.md
  5. 字符调色板 — 每个项目多个;references/architecture.md § 调色板
  6. 色彩系统 — HSV + 离散 RGB + 和谐生成;references/architecture.md § 色彩
  7. 场景函数 — 每个返回 canvas (uint8 H,W,3);references/scenes.md
  8. Tonemap — 自适应亮度归一化;references/composition.md
  9. 着色器管道 — ShaderChain + FeedbackBuffer;references/shaders.md
  10. 场景表 + 调度器 — 时间 → 场景函数 + 配置;references/scenes.md
  11. 并行编码器 — 带 ffmpeg 管道的 N 工作线程剪辑渲染
  12. 主函数 — 编排完整流程

步骤 4:质量验证

  • 首先测试帧:在完整渲染之前在关键时间戳渲染单个帧
  • 亮度检查:所有 ASCII 内容的 canvas.mean() > 8。如果暗,降低 gamma
  • 视觉一致性:所有场景是否感觉属于同一个视频?
  • 创意愿景检查:输出是否匹配步骤 1 中的概念?如果看起来普通,返回

关键实现注意事项

亮度 — 使用 tonemap(),而不是线性乘数

这是 #1 视觉问题。黑色背景上的 ASCII 本质上是暗的。绝不要使用 canvas * N 乘数——它们会剪切高光。使用自适应 tonemap:

def tonemap(canvas, gamma=0.75):
    f = canvas.astype(np.float32)
    lo, hi = np.percentile(f[::4, ::4], [1, 99.5])
    if hi - lo < 10:
        hi = lo + 10
    f = np.clip((f - lo) / (hi - lo), 0, 1) ** gamma
    return (f * 255).astype(np.uint8)

流程:scene_fn() → tonemap() → FeedbackBuffer → ShaderChain → ffmpeg

每段 gamma:默认 0.75,曝光过度 0.55,海报化 0.50,明亮场景 0.85。对暗层使用 screen 混合(不是 overlay)。

字体单元格高度

macOS Pillow:textbbox() 返回错误的高度。使用 font.getmetrics():cell_height = ascent + descent。参见 references/troubleshooting.md。

ffmpeg 管道死锁

绝不要对长时间运行的 ffmpeg 使用 stderr=subprocess.PIPE——缓冲区在 64KB 处填满并死锁。重定向到文件。参见 references/troubleshooting.md。

字体兼容性

并非所有 Unicode 字符在所有字体中都能渲染。在 init 时验证调色板——渲染每个字符,检查空白输出。参见 references/troubleshooting.md。

每段架构

对于分段视频(引用、场景、章节),将每个渲染为单独的剪辑文件以进行并行渲染和选择性重新渲染。参见 references/scenes.md。

性能目标

组件预算
特征提取1-5ms
效果函数2-15ms
字符渲染80-150ms(瓶颈)
着色器管道5-25ms
总计~100-200ms/帧

参考

文件内容
references/architecture.md网格系统、分辨率预设、字体选择、字符调色板(20+)、色彩系统(HSV + OKLAB + 离散 RGB + 和谐生成)、_render_vf() 辅助函数、GridLayer 类
references/composition.md像素混合模式(20 种模式)、blend_canvas()、多网格构图、自适应 tonemap()、FeedbackBuffer、PixelBlendStack、遮罩/模版系统
references/effects.md效果构建块:值场生成器、色相场、噪声/fBM/域扭曲、沃罗诺伊图、反应扩散、元胞自动机、SDF、奇异吸引子、粒子系统、坐标变换、时间一致性
references/shaders.mdShaderChain、_apply_shader_step() 调度、38 种着色器目录、音频反应式缩放、过渡、色调预设、输出格式编码、终端渲染
references/scenes.md场景协议、Renderer 类、SCENES 表、render_clip()、节拍同步剪切、并行渲染、设计模式(图层层次结构、方向弧、视觉隐喻、构图技术)、每个复杂度级别的完整场景示例、场景设计检查清单
references/inputs.md音频分析(FFT、频带、节拍)、视频采样、图像转换、文本/歌词、TTS 集成(ElevenLabs、语音分配、音频混合)
references/optimization.md硬件检测、质量配置文件、向量化模式、并行渲染、内存管理、性能预算
references/troubleshooting.mdNumPy 广播陷阱、混合模式陷阱、多处理/序列化、亮度诊断、ffmpeg 问题、字体问题、常见错误

创意分歧(仅当用户请求实验性/创意/独特输出时使用)

如果用户要求创意、实验性、令人惊讶或非传统的输出,请选择最适合的策略,并在生成代码之前通过其步骤进行推理。

  • 强制连接 — 当用户想要跨域灵感时("让它看起来有机"、"工业美学")
  • 概念混合 — 当用户命名两个要组合的事物时("海洋遇见音乐"、"太空 + 书法")
  • 斜向策略 — 当用户最大开放时("给我一个惊喜"、"我从未见过的东西")

强制连接

  1. 选择一个与视觉目标无关的域(天气系统、微生物学、建筑学、流体动力学、纺织编织)
  2. 列出其核心视觉/结构元素(侵蚀 → 渐进式揭示;有丝分裂 → 分裂复制;编织 → 互锁图案)
  3. 将这些元素映射到 ASCII 字符和动画模式
  4. 综合——"侵蚀"或"结晶"在字符网格中看起来像什么?

概念混合

  1. 命名两个不同的视觉/感知空间(例如,海浪 + 乐谱)
  2. 映射对应关系(波峰 = 高音,波谷 = 休止,泡沫 = 断奏)
  3. 选择性混合——保留最有趣的映射,丢弃强制的映射
  4. 开发仅存在于混合中的新兴属性

斜向策略

  1. 抽取一个:"尊重你的错误作为隐藏意图" / "使用旧想法" / "你最接近的朋友会做什么?" / "强调缺陷" / "把它颠倒过来" / "只要一部分,而不是整体" / "反转"
  2. 针对当前的 ASCII 动画挑战解释指令
  3. 在编写代码之前,将横向见解应用到视觉设计中

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

通过 memo CLI 管理 Apple Notes:创建、搜索、编辑。

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

Manage Apple Notes via memo CLI: create, search, edit.

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

通过 remindctl 在 macOS 上管理 Apple Reminders——列出、添加、编辑、完成、 删除同步到 iPhone/iPad 的待办事项。在提及"提醒"、"Reminders app"、 需要手机同步的"提醒我"或添加带截止日期的个人待办事项时触发。macOS only。 当用户需要代理内部提醒(使用 memory_store 或外部 调度)或日历事件时跳过。

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

Manage Apple Reminders on macOS via remindctl — list, add, edit, complete, delete to-dos that sync to iPhone/iPad. Trigger on "reminder", "Reminders app", "提醒我" with phone sync, or adding personal todos with due dates. macOS only. Skip when the user wants agent-internal alerts (use memory_store or external scheduling) or calendar events.

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

Dark-themed SVG architecture/cloud/infra diagrams as HTML.

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

暗色主题的 SVG 架构/云/基础设施图表,输出为 HTML。

日本語の概要は準備中です。原文の説明を表示しています。

TencentCloud/octop-harness752026年10月12日 更新

TencentCloud のスキルをすべて見る

このスキルの問題を報告する