mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-19 00:23:35 +08:00
feat(skills): add brand voice and network ops lanes
This commit is contained in:
89
skills/manim-video/SKILL.md
Normal file
89
skills/manim-video/SKILL.md
Normal file
@@ -0,0 +1,89 @@
|
||||
---
|
||||
name: manim-video
|
||||
description: Build reusable Manim explainers for technical concepts, graphs, system diagrams, and product walkthroughs, then hand off to the wider ECC video stack if needed. Use when the user wants a clean animated explainer rather than a generic talking-head script.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Manim Video
|
||||
|
||||
Use Manim for technical explainers where motion, structure, and clarity matter more than photorealism.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- the user wants a technical explainer animation
|
||||
- the concept is a graph, workflow, architecture, metric progression, or system diagram
|
||||
- the user wants a short product or launch explainer for X or a landing page
|
||||
- the visual should feel precise instead of generically cinematic
|
||||
|
||||
## Tool Requirements
|
||||
|
||||
- `manim` CLI for scene rendering
|
||||
- `ffmpeg` for post-processing if needed
|
||||
- `video-editing` for final assembly or polish
|
||||
- `remotion-video-creation` when the final package needs composited UI, captions, or additional motion layers
|
||||
|
||||
## Default Output
|
||||
|
||||
- short 16:9 MP4
|
||||
- one thumbnail or poster frame
|
||||
- storyboard plus scene plan
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Define the core visual thesis in one sentence.
|
||||
2. Break the concept into 3 to 6 scenes.
|
||||
3. Decide what each scene proves.
|
||||
4. Write the scene outline before writing Manim code.
|
||||
5. Render the smallest working version first.
|
||||
6. Tighten typography, spacing, color, and pacing after the render works.
|
||||
7. Hand off to the wider video stack only if it adds value.
|
||||
|
||||
## Scene Planning Rules
|
||||
|
||||
- each scene should prove one thing
|
||||
- avoid overstuffed diagrams
|
||||
- prefer progressive reveal over full-screen clutter
|
||||
- use motion to explain state change, not just to keep the screen busy
|
||||
- title cards should be short and loaded with meaning
|
||||
|
||||
## Network Graph Default
|
||||
|
||||
For social-graph and network-optimization explainers:
|
||||
|
||||
- show the current graph before showing the optimized graph
|
||||
- distinguish low-signal follow clutter from high-signal bridges
|
||||
- highlight warm-path nodes and target clusters
|
||||
- if useful, add a final scene showing the self-improvement lineage that informed the skill
|
||||
|
||||
## Render Conventions
|
||||
|
||||
- default to 16:9 landscape unless the user asks for vertical
|
||||
- start with a low-quality smoke test render
|
||||
- only push to higher quality after composition and timing are stable
|
||||
- export one clean thumbnail frame that reads at social size
|
||||
|
||||
## Reusable Starter
|
||||
|
||||
Use [assets/network_graph_scene.py](assets/network_graph_scene.py) as a starting point for network-graph explainers.
|
||||
|
||||
Example smoke test:
|
||||
|
||||
```bash
|
||||
manim -ql assets/network_graph_scene.py NetworkGraphExplainer
|
||||
```
|
||||
|
||||
## Output Format
|
||||
|
||||
Return:
|
||||
|
||||
- core visual thesis
|
||||
- storyboard
|
||||
- scene outline
|
||||
- render plan
|
||||
- any follow-on polish recommendations
|
||||
|
||||
## Related Skills
|
||||
|
||||
- `video-editing` for final polish
|
||||
- `remotion-video-creation` for motion-heavy post-processing or compositing
|
||||
- `content-engine` when the animation is part of a broader launch
|
||||
52
skills/manim-video/assets/network_graph_scene.py
Normal file
52
skills/manim-video/assets/network_graph_scene.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from manim import DOWN, LEFT, RIGHT, UP, Circle, Create, FadeIn, FadeOut, Scene, Text, VGroup, CurvedArrow
|
||||
|
||||
|
||||
class NetworkGraphExplainer(Scene):
|
||||
def construct(self):
|
||||
title = Text("Connections Optimizer", font_size=40).to_edge(UP)
|
||||
subtitle = Text("Prune low-signal follows. Strengthen warm paths.", font_size=20).next_to(title, DOWN)
|
||||
|
||||
you = Circle(radius=0.45, color="#4F8EF7").shift(LEFT * 4 + DOWN * 0.5)
|
||||
you_label = Text("You", font_size=22).move_to(you.get_center())
|
||||
|
||||
stale_a = Circle(radius=0.32, color="#7A7A7A").shift(LEFT * 1.6 + UP * 1.2)
|
||||
stale_b = Circle(radius=0.32, color="#7A7A7A").shift(LEFT * 1.2 + DOWN * 1.4)
|
||||
bridge = Circle(radius=0.38, color="#21A179").shift(RIGHT * 0.2 + UP * 0.2)
|
||||
target = Circle(radius=0.42, color="#FF9F1C").shift(RIGHT * 3.2 + UP * 0.7)
|
||||
new_target = Circle(radius=0.42, color="#FF9F1C").shift(RIGHT * 3.0 + DOWN * 1.4)
|
||||
|
||||
stale_a_label = Text("stale", font_size=18).move_to(stale_a.get_center())
|
||||
stale_b_label = Text("noise", font_size=18).move_to(stale_b.get_center())
|
||||
bridge_label = Text("bridge", font_size=18).move_to(bridge.get_center())
|
||||
target_label = Text("target", font_size=18).move_to(target.get_center())
|
||||
new_target_label = Text("add", font_size=18).move_to(new_target.get_center())
|
||||
|
||||
edge_stale_a = CurvedArrow(you.get_right(), stale_a.get_left(), angle=0.2, color="#7A7A7A")
|
||||
edge_stale_b = CurvedArrow(you.get_right(), stale_b.get_left(), angle=-0.2, color="#7A7A7A")
|
||||
edge_bridge = CurvedArrow(you.get_right(), bridge.get_left(), angle=0.0, color="#21A179")
|
||||
edge_target = CurvedArrow(bridge.get_right(), target.get_left(), angle=0.1, color="#21A179")
|
||||
edge_new_target = CurvedArrow(bridge.get_right(), new_target.get_left(), angle=-0.12, color="#21A179")
|
||||
|
||||
self.play(FadeIn(title), FadeIn(subtitle))
|
||||
self.play(
|
||||
Create(you),
|
||||
FadeIn(you_label),
|
||||
Create(stale_a),
|
||||
Create(stale_b),
|
||||
Create(bridge),
|
||||
Create(target),
|
||||
FadeIn(stale_a_label),
|
||||
FadeIn(stale_b_label),
|
||||
FadeIn(bridge_label),
|
||||
FadeIn(target_label),
|
||||
)
|
||||
self.play(Create(edge_stale_a), Create(edge_stale_b), Create(edge_bridge), Create(edge_target))
|
||||
|
||||
optimize = Text("Optimize the graph", font_size=24).to_edge(DOWN)
|
||||
self.play(FadeIn(optimize))
|
||||
self.play(FadeOut(stale_a), FadeOut(stale_b), FadeOut(stale_a_label), FadeOut(stale_b_label), FadeOut(edge_stale_a), FadeOut(edge_stale_b))
|
||||
self.play(Create(new_target), FadeIn(new_target_label), Create(edge_new_target))
|
||||
|
||||
final_group = VGroup(you, you_label, bridge, bridge_label, target, target_label, new_target, new_target_label)
|
||||
self.play(final_group.animate.shift(UP * 0.1))
|
||||
self.wait(1)
|
||||
Reference in New Issue
Block a user