neoagent 2.1.18-beta.32 → 2.1.18-beta.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/package.json +1 -1
  2. package/server/catalog_sources/store-bundles/README.md +5 -0
  3. package/server/catalog_sources/store-bundles/skills/creative/ascii-art/SKILL.md +321 -0
  4. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/README.md +290 -0
  5. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/SKILL.md +205 -0
  6. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/architecture.md +802 -0
  7. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/composition.md +892 -0
  8. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/effects.md +1865 -0
  9. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/inputs.md +685 -0
  10. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/optimization.md +688 -0
  11. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/scenes.md +1011 -0
  12. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/shaders.md +1385 -0
  13. package/server/catalog_sources/store-bundles/skills/creative/ascii-video/references/troubleshooting.md +367 -0
  14. package/server/catalog_sources/store-bundles/skills/creative/excalidraw/SKILL.md +194 -0
  15. package/server/catalog_sources/store-bundles/skills/creative/excalidraw/references/colors.md +44 -0
  16. package/server/catalog_sources/store-bundles/skills/creative/excalidraw/references/dark-mode.md +68 -0
  17. package/server/catalog_sources/store-bundles/skills/creative/excalidraw/references/examples.md +141 -0
  18. package/server/catalog_sources/store-bundles/skills/creative/excalidraw/scripts/upload.py +133 -0
  19. package/server/catalog_sources/store-bundles/skills/creative/manim-video/README.md +23 -0
  20. package/server/catalog_sources/store-bundles/skills/creative/manim-video/SKILL.md +241 -0
  21. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/animation-design-thinking.md +161 -0
  22. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/animations.md +282 -0
  23. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/camera-and-3d.md +135 -0
  24. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/decorations.md +202 -0
  25. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/equations.md +216 -0
  26. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/graphs-and-data.md +163 -0
  27. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/mobjects.md +333 -0
  28. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/paper-explainer.md +255 -0
  29. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/production-quality.md +190 -0
  30. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/rendering.md +185 -0
  31. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/scene-planning.md +118 -0
  32. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/troubleshooting.md +135 -0
  33. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/updaters-and-trackers.md +260 -0
  34. package/server/catalog_sources/store-bundles/skills/creative/manim-video/references/visual-design.md +124 -0
  35. package/server/catalog_sources/store-bundles/skills/creative/manim-video/scripts/setup.sh +14 -0
  36. package/server/catalog_sources/store-bundles/skills/creative/p5js/README.md +64 -0
  37. package/server/catalog_sources/store-bundles/skills/creative/p5js/SKILL.md +513 -0
  38. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/animation.md +439 -0
  39. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/color-systems.md +352 -0
  40. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/core-api.md +410 -0
  41. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/export-pipeline.md +566 -0
  42. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/interaction.md +398 -0
  43. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/shapes-and-geometry.md +300 -0
  44. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/troubleshooting.md +532 -0
  45. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/typography.md +302 -0
  46. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/visual-effects.md +895 -0
  47. package/server/catalog_sources/store-bundles/skills/creative/p5js/references/webgl-and-3d.md +423 -0
  48. package/server/catalog_sources/store-bundles/skills/creative/p5js/scripts/export-frames.js +179 -0
  49. package/server/catalog_sources/store-bundles/skills/creative/p5js/scripts/render.sh +108 -0
  50. package/server/catalog_sources/store-bundles/skills/creative/p5js/scripts/serve.sh +28 -0
  51. package/server/catalog_sources/store-bundles/skills/creative/p5js/scripts/setup.sh +87 -0
  52. package/server/catalog_sources/store-bundles/skills/creative/p5js/templates/viewer.html +395 -0
  53. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/SKILL.md +207 -0
  54. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/airbnb.md +259 -0
  55. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/airtable.md +102 -0
  56. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/apple.md +326 -0
  57. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/bmw.md +193 -0
  58. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/cal.md +272 -0
  59. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/claude.md +325 -0
  60. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/clay.md +317 -0
  61. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/clickhouse.md +294 -0
  62. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/cohere.md +279 -0
  63. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/coinbase.md +142 -0
  64. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/composio.md +320 -0
  65. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/cursor.md +322 -0
  66. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/elevenlabs.md +278 -0
  67. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/expo.md +294 -0
  68. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/figma.md +233 -0
  69. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/framer.md +259 -0
  70. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/hashicorp.md +291 -0
  71. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/ibm.md +345 -0
  72. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/intercom.md +159 -0
  73. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/kraken.md +138 -0
  74. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/linear.app.md +380 -0
  75. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/lovable.md +311 -0
  76. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/minimax.md +270 -0
  77. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/mintlify.md +339 -0
  78. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/miro.md +121 -0
  79. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/mistral.ai.md +274 -0
  80. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/mongodb.md +279 -0
  81. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/notion.md +322 -0
  82. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/nvidia.md +306 -0
  83. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/ollama.md +280 -0
  84. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/opencode.ai.md +294 -0
  85. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/pinterest.md +243 -0
  86. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/posthog.md +269 -0
  87. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/raycast.md +281 -0
  88. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/replicate.md +274 -0
  89. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/resend.md +316 -0
  90. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/revolut.md +198 -0
  91. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/runwayml.md +257 -0
  92. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/sanity.md +370 -0
  93. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/sentry.md +275 -0
  94. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/spacex.md +207 -0
  95. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/spotify.md +259 -0
  96. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/stripe.md +335 -0
  97. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/supabase.md +268 -0
  98. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/superhuman.md +265 -0
  99. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/together.ai.md +276 -0
  100. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/uber.md +308 -0
  101. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/vercel.md +323 -0
  102. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/voltagent.md +336 -0
  103. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/warp.md +266 -0
  104. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/webflow.md +105 -0
  105. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/wise.md +186 -0
  106. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/x.ai.md +270 -0
  107. package/server/catalog_sources/store-bundles/skills/creative/popular-web-designs/templates/zapier.md +341 -0
  108. package/server/catalog_sources/store-bundles/skills/creative/songwriting-and-ai-music/SKILL.md +289 -0
  109. package/server/catalog_sources/store-bundles/skills/data-science/jupyter-live-kernel/SKILL.md +171 -0
  110. package/server/catalog_sources/store-bundles/skills/email/himalaya/SKILL.md +278 -0
  111. package/server/catalog_sources/store-bundles/skills/email/himalaya/references/configuration.md +184 -0
  112. package/server/catalog_sources/store-bundles/skills/email/himalaya/references/message-composition.md +199 -0
  113. package/server/catalog_sources/store-bundles/skills/github/codebase-inspection/SKILL.md +115 -0
  114. package/server/catalog_sources/store-bundles/skills/github/github-auth/SKILL.md +246 -0
  115. package/server/catalog_sources/store-bundles/skills/github/github-auth/scripts/gh-env.sh +66 -0
  116. package/server/catalog_sources/store-bundles/skills/github/github-code-review/SKILL.md +480 -0
  117. package/server/catalog_sources/store-bundles/skills/github/github-code-review/references/review-output-template.md +74 -0
  118. package/server/catalog_sources/store-bundles/skills/github/github-issues/SKILL.md +369 -0
  119. package/server/catalog_sources/store-bundles/skills/github/github-issues/templates/bug-report.md +35 -0
  120. package/server/catalog_sources/store-bundles/skills/github/github-issues/templates/feature-request.md +31 -0
  121. package/server/catalog_sources/store-bundles/skills/github/github-pr-workflow/SKILL.md +366 -0
  122. package/server/catalog_sources/store-bundles/skills/github/github-pr-workflow/references/ci-troubleshooting.md +183 -0
  123. package/server/catalog_sources/store-bundles/skills/github/github-pr-workflow/references/conventional-commits.md +71 -0
  124. package/server/catalog_sources/store-bundles/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
  125. package/server/catalog_sources/store-bundles/skills/github/github-pr-workflow/templates/pr-body-feature.md +33 -0
  126. package/server/catalog_sources/store-bundles/skills/github/github-repo-management/SKILL.md +515 -0
  127. package/server/catalog_sources/store-bundles/skills/github/github-repo-management/references/github-api-cheatsheet.md +161 -0
  128. package/server/catalog_sources/store-bundles/skills/leisure/find-nearby/SKILL.md +69 -0
  129. package/server/catalog_sources/store-bundles/skills/leisure/find-nearby/scripts/find_nearby.py +184 -0
  130. package/server/catalog_sources/store-bundles/skills/mcp/mcporter/SKILL.md +122 -0
  131. package/server/catalog_sources/store-bundles/skills/mcp/native-mcp/SKILL.md +356 -0
  132. package/server/catalog_sources/store-bundles/skills/media/gif-search/SKILL.md +86 -0
  133. package/server/catalog_sources/store-bundles/skills/media/youtube-content/SKILL.md +72 -0
  134. package/server/catalog_sources/store-bundles/skills/media/youtube-content/references/output-formats.md +56 -0
  135. package/server/catalog_sources/store-bundles/skills/media/youtube-content/scripts/fetch_transcript.py +124 -0
  136. package/server/catalog_sources/store-bundles/skills/note-taking/obsidian/SKILL.md +66 -0
  137. package/server/catalog_sources/store-bundles/skills/productivity/google-workspace/SKILL.md +261 -0
  138. package/server/catalog_sources/store-bundles/skills/productivity/google-workspace/references/gmail-search-syntax.md +63 -0
  139. package/server/catalog_sources/store-bundles/skills/productivity/google-workspace/scripts/google_api.py +519 -0
  140. package/server/catalog_sources/store-bundles/skills/productivity/google-workspace/scripts/setup.py +363 -0
  141. package/server/catalog_sources/store-bundles/skills/productivity/linear/SKILL.md +297 -0
  142. package/server/catalog_sources/store-bundles/skills/productivity/nano-pdf/SKILL.md +51 -0
  143. package/server/catalog_sources/store-bundles/skills/productivity/notion/SKILL.md +171 -0
  144. package/server/catalog_sources/store-bundles/skills/productivity/notion/references/block-types.md +112 -0
  145. package/server/catalog_sources/store-bundles/skills/productivity/ocr-and-documents/DESCRIPTION.md +3 -0
  146. package/server/catalog_sources/store-bundles/skills/productivity/ocr-and-documents/SKILL.md +171 -0
  147. package/server/catalog_sources/store-bundles/skills/productivity/ocr-and-documents/scripts/extract_marker.py +87 -0
  148. package/server/catalog_sources/store-bundles/skills/productivity/ocr-and-documents/scripts/extract_pymupdf.py +98 -0
  149. package/server/catalog_sources/store-bundles/skills/research/arxiv/SKILL.md +281 -0
  150. package/server/catalog_sources/store-bundles/skills/research/arxiv/scripts/search_arxiv.py +114 -0
  151. package/server/catalog_sources/store-bundles/skills/research/blogwatcher/SKILL.md +136 -0
  152. package/server/catalog_sources/store-bundles/skills/research/llm-wiki/SKILL.md +460 -0
  153. package/server/catalog_sources/store-bundles/skills/research/polymarket/SKILL.md +76 -0
  154. package/server/catalog_sources/store-bundles/skills/research/polymarket/references/api-endpoints.md +220 -0
  155. package/server/catalog_sources/store-bundles/skills/research/polymarket/scripts/polymarket.py +284 -0
  156. package/server/catalog_sources/store-bundles/skills/software-development/plan/SKILL.md +57 -0
  157. package/server/catalog_sources/store-bundles/skills/software-development/requesting-code-review/SKILL.md +282 -0
  158. package/server/catalog_sources/store-bundles/skills/software-development/subagent-driven-development/SKILL.md +342 -0
  159. package/server/catalog_sources/store-bundles/skills/software-development/systematic-debugging/SKILL.md +366 -0
  160. package/server/catalog_sources/store-bundles/skills/software-development/test-driven-development/SKILL.md +342 -0
  161. package/server/catalog_sources/store-bundles/skills/software-development/writing-plans/SKILL.md +296 -0
  162. package/server/db/database.js +35 -0
  163. package/server/public/flutter_bootstrap.js +1 -1
  164. package/server/public/main.dart.js +70719 -69554
  165. package/server/routes/account.js +61 -8
  166. package/server/routes/auth.js +149 -30
  167. package/server/routes/integrations.js +40 -2
  168. package/server/routes/skills.js +7 -23
  169. package/server/routes/store.js +42 -1212
  170. package/server/services/account/auth_provider_manager.js +436 -0
  171. package/server/services/account/auth_providers/google.js +102 -0
  172. package/server/services/account/auth_providers/registry.js +23 -0
  173. package/server/services/account/password_policy.js +133 -0
  174. package/server/services/ai/engine.js +8 -1
  175. package/server/services/ai/toolRunner.js +45 -7
  176. package/server/services/manager.js +12 -0
  177. package/server/services/skills/base_catalog.js +1167 -0
  178. package/server/services/skills/catalog.js +10 -0
  179. package/server/services/skills/runtime.js +36 -0
  180. package/server/services/skills/store_bundles.js +157 -0
  181. package/server/services/skills/store_service.js +266 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.1.18-beta.32",
3
+ "version": "2.1.18-beta.33",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -0,0 +1,5 @@
1
+ Bundled skill sources for the NeoAgent store.
2
+
3
+ These files are kept as local install sources so the store can install bundled
4
+ skills without depending on runtime network access. The active catalog subset is
5
+ defined in [server/services/skills/store_bundles.js](/Users/neo/NeoAgent/server/services/skills/store_bundles.js).
@@ -0,0 +1,321 @@
1
+ ---
2
+ name: ascii-art
3
+ description: Generate ASCII art using pyfiglet (571 fonts), cowsay, boxes, toilet, image-to-ascii, remote APIs (asciified, ascii.co.uk), and LLM fallback. No API keys required.
4
+ version: 4.0.0
5
+ author: 0xbyt4, Hermes Agent
6
+ license: MIT
7
+ dependencies: []
8
+ metadata:
9
+ hermes:
10
+ tags: [ASCII, Art, Banners, Creative, Unicode, Text-Art, pyfiglet, figlet, cowsay, boxes]
11
+ related_skills: [excalidraw]
12
+
13
+ ---
14
+
15
+ # ASCII Art Skill
16
+
17
+ Multiple tools for different ASCII art needs. All tools are local CLI programs or free REST APIs — no API keys required.
18
+
19
+ ## Tool 1: Text Banners (pyfiglet — local)
20
+
21
+ Render text as large ASCII art banners. 571 built-in fonts.
22
+
23
+ ### Setup
24
+
25
+ ```bash
26
+ pip install pyfiglet --break-system-packages -q
27
+ ```
28
+
29
+ ### Usage
30
+
31
+ ```bash
32
+ python3 -m pyfiglet "YOUR TEXT" -f slant
33
+ python3 -m pyfiglet "TEXT" -f doom -w 80 # Set width
34
+ python3 -m pyfiglet --list_fonts # List all 571 fonts
35
+ ```
36
+
37
+ ### Recommended fonts
38
+
39
+ | Style | Font | Best for |
40
+ |-------|------|----------|
41
+ | Clean & modern | `slant` | Project names, headers |
42
+ | Bold & blocky | `doom` | Titles, logos |
43
+ | Big & readable | `big` | Banners |
44
+ | Classic banner | `banner3` | Wide displays |
45
+ | Compact | `small` | Subtitles |
46
+ | Cyberpunk | `cyberlarge` | Tech themes |
47
+ | 3D effect | `3-d` | Splash screens |
48
+ | Gothic | `gothic` | Dramatic text |
49
+
50
+ ### Tips
51
+
52
+ - Preview 2-3 fonts and let the user pick their favorite
53
+ - Short text (1-8 chars) works best with detailed fonts like `doom` or `block`
54
+ - Long text works better with compact fonts like `small` or `mini`
55
+
56
+ ## Tool 2: Text Banners (asciified API — remote, no install)
57
+
58
+ Free REST API that converts text to ASCII art. 250+ FIGlet fonts. Returns plain text directly — no parsing needed. Use this when pyfiglet is not installed or as a quick alternative.
59
+
60
+ ### Usage (via terminal curl)
61
+
62
+ ```bash
63
+ # Basic text banner (default font)
64
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello+World"
65
+
66
+ # With a specific font
67
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Slant"
68
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Doom"
69
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Star+Wars"
70
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=3-D"
71
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Banner3"
72
+
73
+ # List all available fonts (returns JSON array)
74
+ curl -s "https://asciified.thelicato.io/api/v2/fonts"
75
+ ```
76
+
77
+ ### Tips
78
+
79
+ - URL-encode spaces as `+` in the text parameter
80
+ - The response is plain text ASCII art — no JSON wrapping, ready to display
81
+ - Font names are case-sensitive; use the fonts endpoint to get exact names
82
+ - Works from any terminal with curl — no Python or pip needed
83
+
84
+ ## Tool 3: Cowsay (Message Art)
85
+
86
+ Classic tool that wraps text in a speech bubble with an ASCII character.
87
+
88
+ ### Setup
89
+
90
+ ```bash
91
+ sudo apt install cowsay -y # Debian/Ubuntu
92
+ # brew install cowsay # macOS
93
+ ```
94
+
95
+ ### Usage
96
+
97
+ ```bash
98
+ cowsay "Hello World"
99
+ cowsay -f tux "Linux rules" # Tux the penguin
100
+ cowsay -f dragon "Rawr!" # Dragon
101
+ cowsay -f stegosaurus "Roar!" # Stegosaurus
102
+ cowthink "Hmm..." # Thought bubble
103
+ cowsay -l # List all characters
104
+ ```
105
+
106
+ ### Available characters (50+)
107
+
108
+ `beavis.zen`, `bong`, `bunny`, `cheese`, `daemon`, `default`, `dragon`,
109
+ `dragon-and-cow`, `elephant`, `eyes`, `flaming-skull`, `ghostbusters`,
110
+ `hellokitty`, `kiss`, `kitty`, `koala`, `luke-koala`, `mech-and-cow`,
111
+ `meow`, `moofasa`, `moose`, `ren`, `sheep`, `skeleton`, `small`,
112
+ `stegosaurus`, `stimpy`, `supermilker`, `surgery`, `three-eyes`,
113
+ `turkey`, `turtle`, `tux`, `udder`, `vader`, `vader-koala`, `www`
114
+
115
+ ### Eye/tongue modifiers
116
+
117
+ ```bash
118
+ cowsay -b "Borg" # =_= eyes
119
+ cowsay -d "Dead" # x_x eyes
120
+ cowsay -g "Greedy" # $_$ eyes
121
+ cowsay -p "Paranoid" # @_@ eyes
122
+ cowsay -s "Stoned" # *_* eyes
123
+ cowsay -w "Wired" # O_O eyes
124
+ cowsay -e "OO" "Msg" # Custom eyes
125
+ cowsay -T "U " "Msg" # Custom tongue
126
+ ```
127
+
128
+ ## Tool 4: Boxes (Decorative Borders)
129
+
130
+ Draw decorative ASCII art borders/frames around any text. 70+ built-in designs.
131
+
132
+ ### Setup
133
+
134
+ ```bash
135
+ sudo apt install boxes -y # Debian/Ubuntu
136
+ # brew install boxes # macOS
137
+ ```
138
+
139
+ ### Usage
140
+
141
+ ```bash
142
+ echo "Hello World" | boxes # Default box
143
+ echo "Hello World" | boxes -d stone # Stone border
144
+ echo "Hello World" | boxes -d parchment # Parchment scroll
145
+ echo "Hello World" | boxes -d cat # Cat border
146
+ echo "Hello World" | boxes -d dog # Dog border
147
+ echo "Hello World" | boxes -d unicornsay # Unicorn
148
+ echo "Hello World" | boxes -d diamonds # Diamond pattern
149
+ echo "Hello World" | boxes -d c-cmt # C-style comment
150
+ echo "Hello World" | boxes -d html-cmt # HTML comment
151
+ echo "Hello World" | boxes -a c # Center text
152
+ boxes -l # List all 70+ designs
153
+ ```
154
+
155
+ ### Combine with pyfiglet or asciified
156
+
157
+ ```bash
158
+ python3 -m pyfiglet "HERMES" -f slant | boxes -d stone
159
+ # Or without pyfiglet installed:
160
+ curl -s "https://asciified.thelicato.io/api/v2/ascii?text=HERMES&font=Slant" | boxes -d stone
161
+ ```
162
+
163
+ ## Tool 5: TOIlet (Colored Text Art)
164
+
165
+ Like pyfiglet but with ANSI color effects and visual filters. Great for terminal eye candy.
166
+
167
+ ### Setup
168
+
169
+ ```bash
170
+ sudo apt install toilet toilet-fonts -y # Debian/Ubuntu
171
+ # brew install toilet # macOS
172
+ ```
173
+
174
+ ### Usage
175
+
176
+ ```bash
177
+ toilet "Hello World" # Basic text art
178
+ toilet -f bigmono12 "Hello" # Specific font
179
+ toilet --gay "Rainbow!" # Rainbow coloring
180
+ toilet --metal "Metal!" # Metallic effect
181
+ toilet -F border "Bordered" # Add border
182
+ toilet -F border --gay "Fancy!" # Combined effects
183
+ toilet -f pagga "Block" # Block-style font (unique to toilet)
184
+ toilet -F list # List available filters
185
+ ```
186
+
187
+ ### Filters
188
+
189
+ `crop`, `gay` (rainbow), `metal`, `flip`, `flop`, `180`, `left`, `right`, `border`
190
+
191
+ **Note**: toilet outputs ANSI escape codes for colors — works in terminals but may not render in all contexts (e.g., plain text files, some chat platforms).
192
+
193
+ ## Tool 6: Image to ASCII Art
194
+
195
+ Convert images (PNG, JPEG, GIF, WEBP) to ASCII art.
196
+
197
+ ### Option A: ascii-image-converter (recommended, modern)
198
+
199
+ ```bash
200
+ # Install
201
+ sudo snap install ascii-image-converter
202
+ # OR: go install github.com/TheZoraiz/ascii-image-converter@latest
203
+ ```
204
+
205
+ ```bash
206
+ ascii-image-converter image.png # Basic
207
+ ascii-image-converter image.png -C # Color output
208
+ ascii-image-converter image.png -d 60,30 # Set dimensions
209
+ ascii-image-converter image.png -b # Braille characters
210
+ ascii-image-converter image.png -n # Negative/inverted
211
+ ascii-image-converter https://url/image.jpg # Direct URL
212
+ ascii-image-converter image.png --save-txt out # Save as text
213
+ ```
214
+
215
+ ### Option B: jp2a (lightweight, JPEG only)
216
+
217
+ ```bash
218
+ sudo apt install jp2a -y
219
+ jp2a --width=80 image.jpg
220
+ jp2a --colors image.jpg # Colorized
221
+ ```
222
+
223
+ ## Tool 7: Search Pre-Made ASCII Art
224
+
225
+ Search curated ASCII art from the web. Use `terminal` with `curl`.
226
+
227
+ ### Source A: ascii.co.uk (recommended for pre-made art)
228
+
229
+ Large collection of classic ASCII art organized by subject. Art is inside HTML `<pre>` tags. Fetch the page with curl, then extract art with a small Python snippet.
230
+
231
+ **URL pattern:** `https://ascii.co.uk/art/{subject}`
232
+
233
+ **Step 1 — Fetch the page:**
234
+
235
+ ```bash
236
+ curl -s 'https://ascii.co.uk/art/cat' -o /tmp/ascii_art.html
237
+ ```
238
+
239
+ **Step 2 — Extract art from pre tags:**
240
+
241
+ ```python
242
+ import re, html
243
+ with open('/tmp/ascii_art.html') as f:
244
+ text = f.read()
245
+ arts = re.findall(r'<pre[^>]*>(.*?)</pre>', text, re.DOTALL)
246
+ for art in arts:
247
+ clean = re.sub(r'<[^>]+>', '', art)
248
+ clean = html.unescape(clean).strip()
249
+ if len(clean) > 30:
250
+ print(clean)
251
+ print('\n---\n')
252
+ ```
253
+
254
+ **Available subjects** (use as URL path):
255
+ - Animals: `cat`, `dog`, `horse`, `bird`, `fish`, `dragon`, `snake`, `rabbit`, `elephant`, `dolphin`, `butterfly`, `owl`, `wolf`, `bear`, `penguin`, `turtle`
256
+ - Objects: `car`, `ship`, `airplane`, `rocket`, `guitar`, `computer`, `coffee`, `beer`, `cake`, `house`, `castle`, `sword`, `crown`, `key`
257
+ - Nature: `tree`, `flower`, `sun`, `moon`, `star`, `mountain`, `ocean`, `rainbow`
258
+ - Characters: `skull`, `robot`, `angel`, `wizard`, `pirate`, `ninja`, `alien`
259
+ - Holidays: `christmas`, `halloween`, `valentine`
260
+
261
+ **Tips:**
262
+ - Preserve artist signatures/initials — important etiquette
263
+ - Multiple art pieces per page — pick the best one for the user
264
+ - Works reliably via curl, no JavaScript needed
265
+
266
+ ### Source B: GitHub Octocat API (fun easter egg)
267
+
268
+ Returns a random GitHub Octocat with a wise quote. No auth needed.
269
+
270
+ ```bash
271
+ curl -s https://api.github.com/octocat
272
+ ```
273
+
274
+ ## Tool 8: Fun ASCII Utilities (via curl)
275
+
276
+ These free services return ASCII art directly — great for fun extras.
277
+
278
+ ### QR Codes as ASCII Art
279
+
280
+ ```bash
281
+ curl -s "qrenco.de/Hello+World"
282
+ curl -s "qrenco.de/https://example.com"
283
+ ```
284
+
285
+ ### Weather as ASCII Art
286
+
287
+ ```bash
288
+ curl -s "wttr.in/London" # Full weather report with ASCII graphics
289
+ curl -s "wttr.in/Moon" # Moon phase in ASCII art
290
+ curl -s "v2.wttr.in/London" # Detailed version
291
+ ```
292
+
293
+ ## Tool 9: LLM-Generated Custom Art (Fallback)
294
+
295
+ When tools above don't have what's needed, generate ASCII art directly using these Unicode characters:
296
+
297
+ ### Character Palette
298
+
299
+ **Box Drawing:** `╔ ╗ ╚ ╝ ║ ═ ╠ ╣ ╦ ╩ ╬ ┌ ┐ └ ┘ │ ─ ├ ┤ ┬ ┴ ┼ ╭ ╮ ╰ ╯`
300
+
301
+ **Block Elements:** `░ ▒ ▓ █ ▄ ▀ ▌ ▐ ▖ ▗ ▘ ▝ ▚ ▞`
302
+
303
+ **Geometric & Symbols:** `◆ ◇ ◈ ● ○ ◉ ■ □ ▲ △ ▼ ▽ ★ ☆ ✦ ✧ ◀ ▶ ◁ ▷ ⬡ ⬢ ⌂`
304
+
305
+ ### Rules
306
+
307
+ - Max width: 60 characters per line (terminal-safe)
308
+ - Max height: 15 lines for banners, 25 for scenes
309
+ - Monospace only: output must render correctly in fixed-width fonts
310
+
311
+ ## Decision Flow
312
+
313
+ 1. **Text as a banner** → pyfiglet if installed, otherwise asciified API via curl
314
+ 2. **Wrap a message in fun character art** → cowsay
315
+ 3. **Add decorative border/frame** → boxes (can combine with pyfiglet/asciified)
316
+ 4. **Art of a specific thing** (cat, rocket, dragon) → ascii.co.uk via curl + parsing
317
+ 5. **Convert an image to ASCII** → ascii-image-converter or jp2a
318
+ 6. **QR code** → qrenco.de via curl
319
+ 7. **Weather/moon art** → wttr.in via curl
320
+ 8. **Something custom/creative** → LLM generation with Unicode palette
321
+ 9. **Any tool not installed** → install it, or fall back to next option
@@ -0,0 +1,290 @@
1
+ # ☤ ASCII Video
2
+
3
+ Renders any content as colored ASCII character video. Audio, video, images, text, or pure math in, MP4/GIF/PNG sequence out. Full RGB color per character cell, 1080p 24fps default. No GPU.
4
+
5
+ Built for [Hermes Agent](https://github.com/NousResearch/hermes-agent). Usable in any coding agent. Canonical source lives here; synced to [`NousResearch/hermes-agent/skills/creative/ascii-video`](https://github.com/NousResearch/hermes-agent/tree/main/skills/creative/ascii-video) via PR.
6
+
7
+ ## What this is
8
+
9
+ A skill that teaches an agent how to build single-file Python renderers for ASCII video from scratch. The agent gets the full pipeline: grid system, font rasterization, effect library, shader chain, audio analysis, parallel encoding. It writes the renderer, runs it, gets video.
10
+
11
+ The output is actual video. Not terminal escape codes. Frames are computed as grids of colored characters, composited onto pixel canvases with pre-rasterized font bitmaps, post-processed through shaders, piped to ffmpeg.
12
+
13
+ ## Modes
14
+
15
+ | Mode | Input | Output |
16
+ |------|-------|--------|
17
+ | Video-to-ASCII | A video file | ASCII recreation of the footage |
18
+ | Audio-reactive | An audio file | Visuals driven by frequency bands, beats, energy |
19
+ | Generative | Nothing | Procedural animation from math |
20
+ | Hybrid | Video + audio | ASCII video with audio-reactive overlays |
21
+ | Lyrics/text | Audio + timed text (SRT) | Karaoke-style text with effects |
22
+ | TTS narration | Text quotes + API key | Narrated video with typewriter text and generated speech |
23
+
24
+ ## Pipeline
25
+
26
+ Every mode follows the same 6-stage path:
27
+
28
+ ```
29
+ INPUT --> ANALYZE --> SCENE_FN --> TONEMAP --> SHADE --> ENCODE
30
+ ```
31
+
32
+ 1. **Input** loads source material (or nothing for generative).
33
+ 2. **Analyze** extracts per-frame features. Audio gets 6-band FFT, RMS, spectral centroid, flatness, flux, beat detection with exponential decay. Video gets luminance, edges, motion.
34
+ 3. **Scene function** returns a pixel canvas directly. Composes multiple character grids at different densities, value/hue fields, pixel blend modes. This is where the visuals happen.
35
+ 4. **Tonemap** does adaptive percentile-based brightness normalization with per-scene gamma. ASCII on black is inherently dark. Linear multipliers don't work. This does.
36
+ 5. **Shade** runs a `ShaderChain` (38 composable shaders) plus a `FeedbackBuffer` for temporal recursion with spatial transforms.
37
+ 6. **Encode** pipes raw RGB frames to ffmpeg for H.264 encoding. Segments concatenated, audio muxed.
38
+
39
+ ## Grid system
40
+
41
+ Characters render on fixed-size grids. Layer multiple densities for depth.
42
+
43
+ | Size | Font | Grid at 1080p | Use |
44
+ |------|------|---------------|-----|
45
+ | xs | 8px | 400x108 | Ultra-dense data fields |
46
+ | sm | 10px | 320x83 | Rain, starfields |
47
+ | md | 16px | 192x56 | Default balanced |
48
+ | lg | 20px | 160x45 | Readable text |
49
+ | xl | 24px | 137x37 | Large titles |
50
+ | xxl | 40px | 80x22 | Giant minimal |
51
+
52
+ Rendering the same scene on `sm` and `lg` then screen-blending them creates natural texture interference. Fine detail shows through gaps in coarse characters. Most scenes use two or three grids.
53
+
54
+ ## Character palettes (24)
55
+
56
+ Each sorted dark-to-bright, each a different visual texture. Validated against the font at init so broken glyphs get dropped silently.
57
+
58
+ | Family | Examples | Feel |
59
+ |--------|----------|------|
60
+ | Density ramps | ` .:-=+#@█` | Classic ASCII art gradient |
61
+ | Block elements | ` ░▒▓█▄▀▐▌` | Chunky, digital |
62
+ | Braille | ` ⠁⠂⠃...⠿` | Fine-grained pointillism |
63
+ | Dots | ` ⋅∘∙●◉◎` | Smooth, organic |
64
+ | Stars | ` ·✧✦✩✨★✶` | Sparkle, celestial |
65
+ | Half-fills | ` ◔◑◕◐◒◓◖◗◙` | Directional fill progression |
66
+ | Crosshatch | ` ▣▤▥▦▧▨▩` | Hatched density ramp |
67
+ | Math | ` ·∘∙•°±×÷≈≠≡∞∫∑Ω` | Scientific, abstract |
68
+ | Box drawing | ` ─│┌┐└┘├┤┬┴┼` | Structural, circuit-like |
69
+ | Katakana | ` ·ヲァィゥェォャュ...` | Matrix rain |
70
+ | Greek | ` αβγδεζηθ...ω` | Classical, academic |
71
+ | Runes | ` ᚠᚢᚦᚱᚷᛁᛇᛒᛖᛚᛞᛟ` | Mystical, ancient |
72
+ | Alchemical | ` ☉☽♀♂♃♄♅♆♇` | Esoteric |
73
+ | Arrows | ` ←↑→↓↔↕↖↗↘↙` | Directional, kinetic |
74
+ | Music | ` ♪♫♬♩♭♮♯○●` | Musical |
75
+ | Project-specific | ` .·~=≈∞⚡☿✦★⊕◊◆▲▼●■` | Themed per project |
76
+
77
+ Custom palettes are built per project to match the content.
78
+
79
+ ## Color strategies
80
+
81
+ | Strategy | How it maps hue | Good for |
82
+ |----------|----------------|----------|
83
+ | Angle-mapped | Position angle from center | Rainbow radial effects |
84
+ | Distance-mapped | Distance from center | Depth, tunnels |
85
+ | Frequency-mapped | Audio spectral centroid | Timbral shifting |
86
+ | Value-mapped | Brightness level | Heat maps, fire |
87
+ | Time-cycled | Slow rotation over time | Ambient, chill |
88
+ | Source-sampled | Original video pixel colors | Video-to-ASCII |
89
+ | Palette-indexed | Discrete lookup table | Retro, flat graphic |
90
+ | Temperature | Warm-to-cool blend | Emotional tone |
91
+ | Complementary | Hue + opposite | Bold, dramatic |
92
+ | Triadic | Three equidistant hues | Psychedelic, vibrant |
93
+ | Analogous | Neighboring hues | Harmonious, subtle |
94
+ | Monochrome | Fixed hue, vary S/V | Noir, focused |
95
+
96
+ Plus 10 discrete RGB palettes (neon, pastel, cyberpunk, vaporwave, earth, ice, blood, forest, mono-green, mono-amber).
97
+
98
+ Full OKLAB/OKLCH color system: sRGB↔linear↔OKLAB conversion pipeline, perceptually uniform gradient interpolation, and color harmony generation (complementary, triadic, analogous, split-complementary, tetradic).
99
+
100
+ ## Value field generators (21)
101
+
102
+ Value fields are the core visual building blocks. Each produces a 2D float array in [0, 1] mapping every grid cell to a brightness value.
103
+
104
+ ### Trigonometric (12)
105
+
106
+ | Field | Description |
107
+ |-------|-------------|
108
+ | Sine field | Layered multi-sine interference, general-purpose background |
109
+ | Smooth noise | Multi-octave sine approximation of Perlin noise |
110
+ | Rings | Concentric rings, bass-driven count and wobble |
111
+ | Spiral | Logarithmic spiral arms, configurable arm count/tightness |
112
+ | Tunnel | Infinite depth perspective (inverse distance) |
113
+ | Vortex | Twisting radial pattern, distance modulates angle |
114
+ | Interference | N overlapping sine waves creating moire |
115
+ | Aurora | Horizontal flowing bands |
116
+ | Ripple | Concentric waves from configurable source points |
117
+ | Plasma | Sum of sines at multiple orientations/speeds |
118
+ | Diamond | Diamond/checkerboard pattern |
119
+ | Noise/static | Random per-cell per-frame flicker |
120
+
121
+ ### Noise-based (4)
122
+
123
+ | Field | Description |
124
+ |-------|-------------|
125
+ | Value noise | Smooth organic noise, no axis-alignment artifacts |
126
+ | fBM | Fractal Brownian Motion — octaved noise for clouds, terrain, smoke |
127
+ | Domain warp | Inigo Quilez technique — fBM-driven coordinate distortion for flowing organic forms |
128
+ | Voronoi | Moving seed points with distance, edge, and cell-ID output modes |
129
+
130
+ ### Simulation-based (4)
131
+
132
+ | Field | Description |
133
+ |-------|-------------|
134
+ | Reaction-diffusion | Gray-Scott with 7 presets: coral, spots, worms, labyrinths, mitosis, pulsating, chaos |
135
+ | Cellular automata | Game of Life + 4 rule variants with analog fade trails |
136
+ | Strange attractors | Clifford, De Jong, Bedhead — iterated point systems binned to density fields |
137
+ | Temporal noise | 3D noise that morphs in-place without directional drift |
138
+
139
+ ### SDF-based
140
+
141
+ 7 signed distance field primitives (circle, box, ring, line, triangle, star, heart) with smooth boolean combinators (union, intersection, subtraction, smooth union/subtraction) and infinite tiling. Render as solid fills or glowing outlines.
142
+
143
+ ## Hue field generators (9)
144
+
145
+ Determine per-cell color independent of brightness: fixed hue, angle-mapped rainbow, distance gradient, time-cycled rotation, audio spectral centroid, horizontal/vertical gradients, plasma variation, perceptually uniform OKLCH rainbow.
146
+
147
+ ## Coordinate transforms (11)
148
+
149
+ UV-space transforms applied before effect evaluation: rotate, scale, skew, tile (with mirror seaming), polar, inverse-polar, twist (rotation increasing with distance), fisheye, wave displacement, Möbius conformal transformation. `make_tgrid()` wraps transformed coordinates into a grid object.
150
+
151
+ ## Particle systems (9)
152
+
153
+ | Type | Behavior |
154
+ |------|----------|
155
+ | Explosion | Beat-triggered radial burst with gravity and life decay |
156
+ | Embers | Rising from bottom with horizontal drift |
157
+ | Dissolving cloud | Spreading outward with accelerating fade |
158
+ | Starfield | 3D projected, Z-depth stars approaching with streak trails |
159
+ | Orbit | Circular/elliptical paths around center |
160
+ | Gravity well | Attracted toward configurable point sources |
161
+ | Boid flocking | Separation/alignment/cohesion with spatial hash for O(n) neighbors |
162
+ | Flow-field | Steered by gradient of any value field |
163
+ | Trail particles | Fading lines between current and previous positions |
164
+
165
+ 14 themed particle character sets (energy, spark, leaf, snow, rain, bubble, data, hex, binary, rune, zodiac, dot, dash).
166
+
167
+ ## Temporal coherence
168
+
169
+ 10 easing functions (linear, quad, cubic, expo, elastic, bounce — in/out/in-out). Keyframe interpolation with eased transitions. Value field morphing (smooth crossfade between fields). Value field sequencing (cycle through fields with crossfade). Temporal noise (3D noise evolving smoothly in-place).
170
+
171
+ ## Shader pipeline
172
+
173
+ 38 composable shaders, applied to the pixel canvas after character rendering. Configurable per section.
174
+
175
+ | Category | Shaders |
176
+ |----------|---------|
177
+ | Geometry | CRT barrel, pixelate, wave distort, displacement map, kaleidoscope, mirror (h/v/quad/diag) |
178
+ | Channel | Chromatic aberration (beat-reactive), channel shift, channel swap, RGB split radial |
179
+ | Color | Invert, posterize, threshold, solarize, hue rotate, saturation, color grade, color wobble, color ramp |
180
+ | Glow/Blur | Bloom, edge glow, soft focus, radial blur |
181
+ | Noise | Film grain (beat-reactive), static noise |
182
+ | Lines/Patterns | Scanlines, halftone |
183
+ | Tone | Vignette, contrast, gamma, levels, brightness |
184
+ | Glitch/Data | Glitch bands (beat-reactive), block glitch, pixel sort, data bend |
185
+
186
+ 12 color tint presets: warm, cool, matrix green, amber, sepia, neon pink, ice, blood, forest, void, sunset, neutral.
187
+
188
+ 7 mood presets for common shader combos:
189
+
190
+ | Mood | Shaders |
191
+ |------|---------|
192
+ | Retro terminal | CRT + scanlines + grain + amber/green tint |
193
+ | Clean modern | Light bloom + subtle vignette |
194
+ | Glitch art | Heavy chromatic + glitch bands + color wobble |
195
+ | Cinematic | Bloom + vignette + grain + color grade |
196
+ | Dreamy | Heavy bloom + soft focus + color wobble |
197
+ | Harsh/industrial | High contrast + grain + scanlines, no bloom |
198
+ | Psychedelic | Color wobble + chromatic + kaleidoscope mirror |
199
+
200
+ ## Blend modes and composition
201
+
202
+ 20 pixel blend modes for layering canvases: normal, add, subtract, multiply, screen, overlay, softlight, hardlight, difference, exclusion, colordodge, colorburn, linearlight, vividlight, pin_light, hard_mix, lighten, darken, grain_extract, grain_merge. Both sRGB and linear-light blending supported.
203
+
204
+ **Feedback buffer.** Temporal recursion — each frame blends with a transformed version of the previous frame. 7 spatial transforms: zoom, shrink, rotate CW/CCW, shift up/down, mirror. Optional per-frame hue shift for rainbow trails. Configurable decay, blend mode, and opacity per scene.
205
+
206
+ **Masking.** 16 mask types for spatial compositing: shape masks (circle, rect, ring, gradients), procedural masks (any value field as a mask, text stencils), animated masks (iris open/close, wipe, dissolve), boolean operations (union, intersection, subtraction, invert).
207
+
208
+ **Transitions.** Crossfade, directional wipe, radial wipe, dissolve, glitch cut.
209
+
210
+ ## Scene design patterns
211
+
212
+ Compositional patterns for making scenes that look intentional rather than random.
213
+
214
+ **Layer hierarchy.** Background (dim atmosphere, dense grid), content (main visual, standard grid), accent (sparse highlights, coarse grid). Three distinct roles, not three competing layers.
215
+
216
+ **Directional parameter arcs.** The defining parameter of each scene ramps, accelerates, or builds over its duration. Progress-based formulas (linear, ease-out, step reveal) replace aimless `sin(t)` oscillation.
217
+
218
+ **Scene concepts.** Scenes built around visual metaphors (emergence, descent, collision, entropy) with motivated layer/palette/feedback choices. Not named after their effects.
219
+
220
+ **Compositional techniques.** Counter-rotating dual systems, wave collision, progressive fragmentation (voronoi cells multiplying over time), entropy (geometry consumed by reaction-diffusion), staggered layer entry (crescendo buildup).
221
+
222
+ ## Hardware adaptation
223
+
224
+ Auto-detects CPU count, RAM, platform, ffmpeg. Adapts worker count, resolution, FPS.
225
+
226
+ | Profile | Resolution | FPS | When |
227
+ |---------|-----------|-----|------|
228
+ | `draft` | 960x540 | 12 | Check timing/layout |
229
+ | `preview` | 1280x720 | 15 | Review effects |
230
+ | `production` | 1920x1080 | 24 | Final output |
231
+ | `max` | 3840x2160 | 30 | Ultra-high |
232
+ | `auto` | Detected | 24 | Adapts to hardware + duration |
233
+
234
+ `auto` estimates render time and downgrades if it would take over an hour. Low-memory systems drop to 720p automatically.
235
+
236
+ ### Render times (1080p 24fps, ~180ms/frame/worker)
237
+
238
+ | Duration | 4 workers | 8 workers | 16 workers |
239
+ |----------|-----------|-----------|------------|
240
+ | 30s | ~3 min | ~2 min | ~1 min |
241
+ | 2 min | ~13 min | ~7 min | ~4 min |
242
+ | 5 min | ~33 min | ~17 min | ~9 min |
243
+ | 10 min | ~65 min | ~33 min | ~17 min |
244
+
245
+ 720p roughly halves these. 4K roughly quadruples them.
246
+
247
+ ## Known pitfalls
248
+
249
+ **Brightness.** ASCII characters are small bright dots on black. Most frame pixels are background. Linear `* N` multipliers clip highlights and wash out. Use `tonemap()` with per-scene gamma instead. Default gamma 0.75, solarize scenes 0.55, posterize 0.50.
250
+
251
+ **Render bottleneck.** The per-cell Python loop compositing font bitmaps runs at ~100-150ms/frame. Unavoidable without Cython/C. Everything else must be vectorized numpy. Python for-loops over rows/cols in effect functions will tank performance.
252
+
253
+ **ffmpeg deadlock.** Never `stderr=subprocess.PIPE` on long-running encodes. Buffer fills at ~64KB, process hangs. Redirect stderr to a file.
254
+
255
+ **Font cell height.** Pillow's `textbbox()` returns wrong height on macOS. Use `font.getmetrics()` for `ascent + descent`.
256
+
257
+ **Font compatibility.** Not all Unicode renders in all fonts. Palettes validated at init, blank glyphs silently removed.
258
+
259
+ ## Requirements
260
+
261
+ ◆ Python 3.10+
262
+ ◆ NumPy, Pillow, SciPy (audio modes)
263
+ ◆ ffmpeg on PATH
264
+ ◆ A monospace font (Menlo, Courier, Monaco, auto-detected)
265
+ ◆ Optional: OpenCV, ElevenLabs API key (TTS mode)
266
+
267
+ ## File structure
268
+
269
+ ```
270
+ ├── SKILL.md # Modes, workflow, creative direction
271
+ ├── README.md # This file
272
+ └── references/
273
+ ├── architecture.md # Grid system, fonts, palettes, color, _render_vf()
274
+ ├── effects.md # Value fields, hue fields, backgrounds, particles
275
+ ├── shaders.md # 38 shaders, ShaderChain, tint presets, transitions
276
+ ├── composition.md # Blend modes, multi-grid, tonemap, FeedbackBuffer
277
+ ├── scenes.md # Scene protocol, SCENES table, render_clip(), examples
278
+ ├── design-patterns.md # Layer hierarchy, directional arcs, scene concepts
279
+ ├── inputs.md # Audio analysis, video sampling, text, TTS
280
+ ├── optimization.md # Hardware detection, vectorized patterns, parallelism
281
+ └── troubleshooting.md # Broadcasting traps, blend pitfalls, diagnostics
282
+ ```
283
+
284
+ ## Projects built with this
285
+
286
+ ✦ 85-second highlight reel. 15 scenes (14×5s + 15s crescendo finale), randomized order, directional parameter arcs, layer hierarchy composition. Showcases the full effect vocabulary: fBM, voronoi fragmentation, reaction-diffusion, cellular automata, dual counter-rotating spirals, wave collision, domain warping, tunnel descent, kaleidoscope symmetry, boid flocking, fire simulation, glitch corruption, and a 7-layer crescendo buildup.
287
+
288
+ ✦ Audio-reactive music visualizer. 3.5 min, 8 sections with distinct effects, beat-triggered particles and glitch, cycling palettes.
289
+
290
+ ✦ TTS narrated testimonial video. 23 quotes, per-quote ElevenLabs voices, background music at 15% wide stereo, per-clip re-rendering for iterative editing.