remotion
30
总安装量
12
周安装量
#12169
全站排名
安装命令
npx skills add https://github.com/kimny1143/claude-code-template --skill remotion
Agent 安装分布
claude-code
9
opencode
8
cursor
7
gemini-cli
6
antigravity
6
codex
6
Skill 文档
MUEDnote Video Skill (Remotion)
Remotionã使ç¨ããMUEDnoteåç»å¶ä½ã¹ãã«ã
注æäºé
ãã®ã¹ãã«ã¯æ°è¦Remotionããã¸ã§ã¯ã使æã®ãã³ãã¬ã¼ãã mued_v2ã«ã¯Remotionã¯æªã¤ã³ã¹ãã¼ã«ãåç»å¶ä½æã¯å¥ãã£ã¬ã¯ããªã§ä½æ¥ãããã mued_v2ã«Remotionãã»ããã¢ãããããã¨ã
Remotionã»ããã¢ããï¼å¿ è¦æï¼
# å¥ãã£ã¬ã¯ããªã§æ°è¦ä½æ
npx create-video@latest muednote-videos
# ã¾ã㯠mued_v2 ã«è¿½å ï¼æ¨å¥¨ããªã - ä¾åé¢ä¿ãè¤éã«ãªãï¼
npm install remotion @remotion/cli @remotion/player
ãã©ã³ãã¬ã¤ãã©ã¤ã³
ã«ã©ã¼ãã¬ãã
// src/styles/theme.ts
export const colors = {
primary: '#2D3748', // ãã¼ã¯ã°ã¬ã¼ï¼ã¡ã¤ã³UIï¼
accent: '#6366F1', // ã¤ã³ãã£ã´ï¼CTAãã¿ã³çï¼
background: '#1A202C', // ãã¼ã¯BG
backgroundLight: '#2D3748',
text: '#E2E8F0', // ã©ã¤ãã°ã¬ã¼ï¼æ¬æï¼
textMuted: '#A0AEC0', // ãã¥ã¼ãããã¹ã
hoo: '#FFFFFF', // Hooã¯ç½ã©ã¤ã³ã¢ã¼ã
success: '#48BB78', // æå
error: '#F56565', // ã¨ã©ã¼
};
ã¿ã¤ãã°ã©ãã£
- è¦åºã:
Noto Sans JP Bold/font-weight: 700 - æ¬æ:
Noto Sans JP Regular/font-weight: 400 - ã³ã¼ã/æ°å:
JetBrains Mono
åç»è¨å®ããã©ã«ã
- è§£å度: 1920Ã1080 (16:9)
- FPS: 30
- ã³ã¼ããã¯: h264
Hooãã£ã©ã¯ã¿ã¼ä»æ§
ãã¶ã¤ã³ã³ã³ã»ãã
ãã¯ã㦠+ ãªã¼ãã³ãªã¼ã«ãã¼ãã¬ã³ã¼ãã¼ ã®ãã¤ããªãã
- ç® = ãã¼ããªã¼ã«ï¼2ã¤ã®åï¼
- ãªã¼ã«éã«ãã¼ããå¼µã£ã¦ãã
- 鳿¥½è¨é²ã¢ããªã®è±¡å¾´çãã¶ã¤ã³
åºæ¬æ å ±
- åå: Hooï¼ãã¼ï¼
- ãã£ãããã¬ã¼ãº: “ã»ã»ã (Ho Hoo)”
- å½¹å²: MUEDnoteã®AIã¢ã·ã¹ã¿ã³ãããã¼ã±ãã£ã³ã°ãã¹ã³ãã
- ã¹ã¿ã¤ã«: ç½ãã©ã¤ã³ã¢ã¼ãï¼ã¢ããã¼ã³ï¼
- ãã¼ã¹ã«ã©ã¼:
#FFFFFFï¼ç½ã¹ããã¼ã¯ãå¡ããªãï¼ - åç
§:
/public/logo.png
ã¢ãã¡ã¼ã·ã§ã³å¯è½ãã¼ã
| ãã¼ã | 説æ | ã¢ãã¡ã¼ã·ã§ã³ |
|---|---|---|
| left-reel | å·¦ç®ï¼ãã¼ããªã¼ã«ï¼ | å転 |
| right-reel | å³ç®ï¼ãã¼ããªã¼ã«ï¼ | å転ï¼éæ¹åï¼ |
| tape | ãªã¼ã«éã®ãã¼ã | æµããåã |
| body | æ¬ä½è¼ªé | æºããå¾ã |
| ears | è³ï¼ç¾½è§ï¼ | è»½ãæºã |
表æ ã»ç¶æ
| ç¶æ | ç¨é | ã¢ãã¡ã¼ã·ã§ã³ |
|---|---|---|
| idle | å¾ æ© | ãªã¼ã«ãã£ããå転 + 軽ãå¼å¸ |
| recording | é²é³ä¸ | ãªã¼ã«é«éå転 + ãã¼ãæµã |
| curious | èå³ã»èª¬æ | é¦ãå¾ãã + ãªã¼ã«å転 |
| happy | åã³ã»å®äº | ãªã¼ã«é«é + ä¸ä¸ãã¦ã³ã¹ |
ã¢ãã¡ã¼ã·ã§ã³ã³ã¼ã
// ãªã¼ã«å転ï¼å¸¸æï¼
const reelRotation = (frame / fps) * 30; // 1ç§ã§30度
// é¦å¾ãï¼curiousæï¼
const tilt = spring({
frame: frame - startFrame,
fps,
config: { damping: 15, stiffness: 80 },
}) * 15;
// ãªã¼ã«é«éå転ï¼recording/happyæï¼
const fastRotation = (frame / fps) * 180;
// ãã¼ãæµãï¼strokeDashoffsetã§è¡¨ç¾ï¼
const tapeOffset = (frame / fps) * 50;
詳細: hoo-animation.md åç
§
åç»ãã³ãã¬ã¼ã
1. ããã¢ã¼ã·ã§ã³åç»ï¼30ç§ï¼
æ§æ:
âââ Hook (0-5ç§)
â âââ åé¡æèµ·ããã¹ã + Hooãå³ä¸ããç»å ´
âââ Problem (5-12ç§)
â âââ 課é¡ã®å¯è¦å + Hooå¿é
é¡
âââ Solution (12-25ç§)
â âââ MUEDnoteæ©è½ã㢠+ Hooã説æ
âââ CTA (25-30ç§)
âââ ãã¦ã³ãã¼ãä¿ã + Hooåã³
æç¤ºä¾:
MUEDnoteã®30ç§ããã¢åç»ã使ã
Hook: "鳿¥½å¶ä½ãè¨é²ãã¦ãï¼"
Problem: ã¢ã¤ãã¢ãæ¶ãã¦ããæ§å
Solution: MUEDnoteã®3ã¤ã®æ©è½ããã¤ã©ã¤ã
CTA: App Storeã¸èªå°
Hooãåã·ã¼ã³ã§ä½¿ç¨ã
2. æ©è½ç´¹ä»åç»ï¼15ç§ï¼
æ§æ:
âââ ã¿ã¤ãã« (0-3ç§): æ©è½å + ã¢ã¤ã³ã³
âââ ã㢠(3-12ç§): æä½ç»é¢ã®ã¢ãã¡ã¼ã·ã§ã³
âââ ç· ã (12-15ç§): Hooãã»ã»ãã+ ãã´
3. ãã¥ã¼ããªã¢ã«åç»ï¼60ç§ï¼
æ§æ:
âââ å°å
¥ (0-5ç§): Hooæ¨æ¶ãããã«ã¡ã¯ï¼ã
âââ ã¹ããã1 (5-20ç§): æåã®æä½èª¬æ
âââ ã¹ããã2 (20-35ç§): æ¬¡ã®æä½èª¬æ
âââ ã¹ããã3 (35-50ç§): æå¾ã®æä½èª¬æ
âââ ã¾ã¨ã (50-60ç§): Hooãã»ã»ããç°¡åã§ãããï¼ã
æ¨å¥¨ããã¸ã§ã¯ãæ§é
muednote-videos/ # å¥ãã£ã¬ã¯ããªæ¨å¥¨
âââ src/
â âââ Root.tsx
â âââ compositions/
â â âââ PromoVideo.tsx
â â âââ FeatureDemo.tsx
â â âââ Tutorial.tsx
â âââ components/
â â âââ Hoo/
â â â âââ HooCharacter.tsx
â â â âââ HooExpressions.tsx
â â â âââ animations.ts
â â âââ Text/
â â â âââ TitleText.tsx
â â â âââ TypewriterText.tsx
â â â âââ HighlightText.tsx
â â âââ Transitions/
â â â âââ FadeSlide.tsx
â â â âââ ScaleIn.tsx
â â â âââ WipeTransition.tsx
â â âââ UI/
â â âââ PhoneMockup.tsx
â â âââ AppStoreBadge.tsx
â â âââ Logo.tsx
â âââ styles/
â â âââ theme.ts
â âââ utils/
â âââ animations.ts
âââ public/
â âââ assets/ # ãã´ãã¹ã¯ãªã¼ã³ã·ã§ããç
âââ out/ # ã¬ã³ããªã³ã°åºå
ãã使ãã¢ãã¡ã¼ã·ã§ã³ãã¿ã¼ã³
ãã§ã¼ãã¤ã³ + ã¹ã©ã¤ãã¢ãã
const FadeSlideIn: React.FC<{children: React.ReactNode; delay?: number}> = ({
children,
delay = 0,
}) => {
const frame = useCurrentFrame();
const adjustedFrame = frame - delay;
const opacity = interpolate(adjustedFrame, [0, 20], [0, 1], {
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
const translateY = interpolate(adjustedFrame, [0, 20], [30, 0], {
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
return (
<div style={{ opacity, transform: `translateY(${translateY}px)` }}>
{children}
</div>
);
};
ã¿ã¤ãã©ã¤ã¿ã¼å¹æ
const TypewriterText: React.FC<{text: string; startFrame?: number}> = ({
text,
startFrame = 0,
}) => {
const frame = useCurrentFrame();
const adjustedFrame = frame - startFrame;
const charsToShow = Math.floor(
interpolate(adjustedFrame, [0, text.length * 3], [0, text.length], {
extrapolateRight: 'clamp',
})
);
return <span>{text.slice(0, charsToShow)}</span>;
};
ã¹ã±ã¼ã«ãã¦ã³ã¹ï¼ç»å ´æ¼åºï¼
const scaleValue = spring({
frame: frame - delay,
fps,
config: {
damping: 10,
stiffness: 100,
mass: 0.5,
},
});
ã¬ã³ããªã³ã°
æ¨æºï¼YouTube/LPç¨ï¼
npx remotion render src/index.ts CompositionName out/video.mp4
é«å質
npx remotion render src/index.ts CompositionName out/video-hq.mp4 \
--codec=h264 \
--quality=100
SNSåã縦å
# Instagram Reels / TikTok
npx remotion render src/index.ts VerticalComp out/vertical.mp4 \
--height=1920 --width=1080
GIFï¼çå°ºã»ã«ã¼ãç¨ï¼
npx remotion render src/index.ts ShortLoop out/loop.gif \
--codec=gif
é¢é£ãã¡ã¤ã«
hoo-animation.md– Hooã¢ãã¡ã¼ã·ã§ã³è©³ç´°ä»æ§remotion-handson-glasswerks.md– Remotionãã³ãºãªã³ã¡ã¢