mulmocast 2.1.28 → 2.1.30

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 (38) hide show
  1. package/README.md +77 -0
  2. package/assets/html/tailwind.html +33 -0
  3. package/lib/cli/commands/tool/index.js +11 -1
  4. package/lib/cli/commands/tool/info/builder.d.ts +6 -0
  5. package/lib/cli/commands/tool/info/builder.js +13 -0
  6. package/lib/cli/commands/tool/info/handler.d.ts +6 -0
  7. package/lib/cli/commands/tool/info/handler.js +219 -0
  8. package/lib/cli/commands/tool/info/index.d.ts +4 -0
  9. package/lib/cli/commands/tool/info/index.js +4 -0
  10. package/lib/data/index.d.ts +1 -0
  11. package/lib/data/index.js +1 -0
  12. package/lib/data/markdownStyles.d.ts +14 -0
  13. package/lib/data/markdownStyles.js +998 -0
  14. package/lib/types/schema.d.ts +72 -5
  15. package/lib/types/schema.js +22 -1
  16. package/lib/types/type.d.ts +4 -1
  17. package/lib/utils/context.d.ts +24 -2
  18. package/lib/utils/html_render.js +13 -5
  19. package/lib/utils/image_plugins/chart.js +2 -5
  20. package/lib/utils/image_plugins/markdown.js +60 -12
  21. package/lib/utils/image_plugins/markdown_layout.d.ts +6 -0
  22. package/lib/utils/image_plugins/markdown_layout.js +127 -0
  23. package/lib/utils/image_plugins/mermaid.d.ts +1 -0
  24. package/lib/utils/image_plugins/mermaid.js +16 -13
  25. package/lib/utils/image_plugins/text_slide.js +3 -2
  26. package/lib/utils/image_plugins/utils.d.ts +2 -0
  27. package/lib/utils/image_plugins/utils.js +13 -0
  28. package/package.json +1 -1
  29. package/scripts/test/test_all_markdown_styles.json +809 -0
  30. package/scripts/test/test_markdown_layout.json +152 -0
  31. package/scripts/test/test_markdown_mermaid.json +58 -0
  32. package/scripts/test/test_markdown_styles.json +53 -0
  33. package/scripts/test/test_text_slide_style.json +70 -0
  34. package/scripts/test/test_vertexai.json +4 -1
  35. package/scripts/test/test_vertexai.json~ +21 -0
  36. package/scripts/test/zenn_combined_example.json +39 -0
  37. package/scripts/test/zenn_layout_samples.json +92 -0
  38. package/scripts/test/zenn_markdown_demo.json +79 -0
@@ -0,0 +1,152 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.0"
4
+ },
5
+ "title": "Markdown Layout Test",
6
+ "lang": "ja",
7
+ "speechParams": {
8
+ "speakers": {
9
+ "Presenter": {
10
+ "voiceId": "shimmer",
11
+ "displayName": { "en": "Presenter" }
12
+ }
13
+ }
14
+ },
15
+ "beats": [
16
+ {
17
+ "id": "row2-only",
18
+ "speaker": "Presenter",
19
+ "text": "row-2レイアウトのテストです。",
20
+ "image": {
21
+ "type": "markdown",
22
+ "markdown": {
23
+ "row-2": ["# 左側\n\n- ポイント1\n- ポイント2\n- ポイント3", "# 右側\n\n```typescript\nconst x = 1;\nconsole.log(x);\n```"]
24
+ }
25
+ }
26
+ },
27
+ {
28
+ "id": "2x2-only",
29
+ "speaker": "Presenter",
30
+ "text": "2x2グリッドレイアウトのテストです。",
31
+ "image": {
32
+ "type": "markdown",
33
+ "markdown": {
34
+ "2x2": ["## Q1\n\n売上: 100万円", "## Q2\n\n売上: 120万円", "## Q3\n\n売上: 150万円", "## Q4\n\n売上: 180万円"]
35
+ }
36
+ }
37
+ },
38
+ {
39
+ "id": "row2-with-header",
40
+ "speaker": "Presenter",
41
+ "text": "ヘッダー付きrow-2レイアウトのテストです。",
42
+ "image": {
43
+ "type": "markdown",
44
+ "markdown": {
45
+ "header": "# プレゼンテーションタイトル",
46
+ "row-2": ["## 概要\n\nこれは左側のコンテンツです。", "## 詳細\n\nこれは右側のコンテンツです。"]
47
+ }
48
+ }
49
+ },
50
+ {
51
+ "id": "row2-with-sidebar",
52
+ "speaker": "Presenter",
53
+ "text": "サイドバー付きrow-2レイアウトのテストです。",
54
+ "image": {
55
+ "type": "markdown",
56
+ "markdown": {
57
+ "sidebar-left": ["目次", "1. はじめに", "2. 本文", "3. まとめ"],
58
+ "row-2": ["# メインコンテンツ\n\n詳細な説明がここに入ります。", "# サブコンテンツ\n\n補足情報です。"]
59
+ }
60
+ }
61
+ },
62
+ {
63
+ "id": "row2-full",
64
+ "speaker": "Presenter",
65
+ "text": "フルレイアウト(ヘッダー+サイドバー+row-2)のテストです。",
66
+ "image": {
67
+ "type": "markdown",
68
+ "markdown": {
69
+ "header": "# GraphAI入門",
70
+ "sidebar-left": "**目次**\n\n1. 概要\n2. 特徴\n3. 使い方",
71
+ "row-2": [
72
+ "## 概要\n\nGraphAIはワークフローエンジンです。\n\n- 宣言的\n- 柔軟\n- 拡張可能",
73
+ "## コード例\n\n```typescript\nconst graph = new GraphAI({\n nodes: {...}\n});\nawait graph.run();\n```"
74
+ ]
75
+ }
76
+ }
77
+ },
78
+ {
79
+ "id": "2x2-with-header",
80
+ "speaker": "Presenter",
81
+ "text": "ヘッダー付き2x2グリッドのテストです。",
82
+ "image": {
83
+ "type": "markdown",
84
+ "markdown": {
85
+ "header": ["# 年間レポート", "2024年度"],
86
+ "2x2": ["### Q1\n売上: 100万", "### Q2\n売上: 120万", "### Q3\n売上: 150万", "### Q4\n売上: 180万"]
87
+ }
88
+ }
89
+ },
90
+ {
91
+ "id": "2x2-with-sidebar",
92
+ "speaker": "Presenter",
93
+ "text": "サイドバー付き2x2グリッドのテストです。",
94
+ "image": {
95
+ "type": "markdown",
96
+ "markdown": {
97
+ "sidebar-left": ["📊 レポート", "---", "Q1", "Q2", "Q3", "Q4"],
98
+ "2x2": ["**北海道**\n人口: 500万", "**東京**\n人口: 1400万", "**大阪**\n人口: 880万", "**福岡**\n人口: 510万"]
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "id": "2x2-full",
104
+ "speaker": "Presenter",
105
+ "text": "フルレイアウト(ヘッダー+サイドバー+2x2)のテストです。",
106
+ "image": {
107
+ "type": "markdown",
108
+ "markdown": {
109
+ "header": "# 地域別売上",
110
+ "sidebar-left": "**凡例**\n\n🟢 好調\n🟡 普通\n🔴 不調",
111
+ "2x2": ["## 北海道 🟢\n\n前年比 +15%", "## 東北 🟡\n\n前年比 +3%", "## 関東 🟢\n\n前年比 +20%", "## 関西 🔴\n\n前年比 -5%"]
112
+ }
113
+ }
114
+ },
115
+ {
116
+ "id": "content-only",
117
+ "speaker": "Presenter",
118
+ "text": "シンプルなコンテンツのみのレイアウトです。",
119
+ "image": {
120
+ "type": "markdown",
121
+ "markdown": {
122
+ "content": "# シンプルなスライド\n\nこれは単一カラムのコンテンツです。\n\n- ポイント1\n- ポイント2\n- ポイント3\n\n```typescript\nconsole.log('Hello');\n```"
123
+ }
124
+ }
125
+ },
126
+ {
127
+ "id": "content-with-header",
128
+ "speaker": "Presenter",
129
+ "text": "ヘッダー付きコンテンツのテストです。",
130
+ "image": {
131
+ "type": "markdown",
132
+ "markdown": {
133
+ "header": "# ドキュメントタイトル",
134
+ "content": "## 本文\n\nここに詳細な説明文が入ります。\n\n1. 手順1\n2. 手順2\n3. 手順3"
135
+ }
136
+ }
137
+ },
138
+ {
139
+ "id": "content-full",
140
+ "speaker": "Presenter",
141
+ "text": "フルレイアウト(ヘッダー+サイドバー+content)のテストです。",
142
+ "image": {
143
+ "type": "markdown",
144
+ "markdown": {
145
+ "header": "# ユーザーガイド",
146
+ "sidebar-left": "**目次**\n\n1. 概要\n2. インストール\n3. 使い方",
147
+ "content": "## 概要\n\nこのアプリケーションは...\n\n### 特徴\n\n- 簡単操作\n- 高速処理\n- 拡張可能"
148
+ }
149
+ }
150
+ }
151
+ ]
152
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.0",
4
+ "credit": "closing"
5
+ },
6
+ "title": "Markdown with Mermaid Test",
7
+ "speechParams": {
8
+ "speakers": {
9
+ "Presenter": {
10
+ "voiceId": "shimmer",
11
+ "displayName": {
12
+ "en": "Presenter"
13
+ }
14
+ }
15
+ }
16
+ },
17
+ "beats": [
18
+ {
19
+ "speaker": "Presenter",
20
+ "text": "This slide shows markdown with embedded mermaid using row-2 layout.",
21
+ "image": {
22
+ "type": "markdown",
23
+ "markdown": {
24
+ "row-2": [
25
+ ["# Architecture Overview", "", "- Component A handles requests", "- Component B processes data", "", "Key points about the flow..."],
26
+ ["```mermaid", "graph TD", " A[Component A] --> B[Component B]", " B --> C[Database]", "```"]
27
+ ]
28
+ }
29
+ }
30
+ },
31
+ {
32
+ "speaker": "Presenter",
33
+ "text": "This slide shows a simple markdown with mermaid in content area.",
34
+ "image": {
35
+ "type": "markdown",
36
+ "markdown": {
37
+ "header": "# System Architecture",
38
+ "content": ["## Flow Diagram", "", "```mermaid", "flowchart LR", " User --> API", " API --> Service", " Service --> DB[(Database)]", "```"]
39
+ }
40
+ }
41
+ },
42
+ {
43
+ "speaker": "Presenter",
44
+ "text": "This uses 2x2 layout with mermaid in one cell.",
45
+ "image": {
46
+ "type": "markdown",
47
+ "markdown": {
48
+ "2x2": [
49
+ ["# Input", "User provides data"],
50
+ ["```mermaid", "graph TD", " Input --> Process", "```"],
51
+ ["# Processing", "Data is transformed"],
52
+ ["```mermaid", "graph TD", " Process --> Output", "```"]
53
+ ]
54
+ }
55
+ }
56
+ }
57
+ ]
58
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "lang": "en",
4
+ "title": "Markdown Styles Test",
5
+ "beats": [
6
+ {
7
+ "text": "Corporate Blue style",
8
+ "image": {
9
+ "type": "markdown",
10
+ "markdown": "# Corporate Blue\n\n## Business Presentation\n\n- Professional design\n- Clean gradients\n- Modern typography",
11
+ "style": "corporate-blue"
12
+ }
13
+ },
14
+ {
15
+ "text": "Cyber Neon style",
16
+ "image": {
17
+ "type": "markdown",
18
+ "markdown": "# Cyber Neon\n\n## Tech Presentation\n\n- Neon glow effects\n- Dark background\n- Futuristic feel",
19
+ "style": "cyber-neon"
20
+ }
21
+ },
22
+ {
23
+ "text": "Sakura Pink style",
24
+ "image": {
25
+ "type": "markdown",
26
+ "markdown": "# 桜ピンク\n\n## 日本風デザイン\n\n- 桜をイメージ\n- 柔らかいグラデーション\n- 和のテイスト",
27
+ "style": "sakura-pink"
28
+ }
29
+ },
30
+ {
31
+ "text": "Minimalist clean white style",
32
+ "image": {
33
+ "type": "markdown",
34
+ "markdown": "# Clean White\n\n## Minimalist Design\n\n- Simple and elegant\n- White space\n- Light typography",
35
+ "style": "clean-white"
36
+ }
37
+ },
38
+ {
39
+ "text": "Rainbow Gradient style",
40
+ "image": {
41
+ "type": "markdown",
42
+ "markdown": "# Rainbow Gradient\n\n## Creative Design\n\n- Bold colors\n- Eye-catching\n- Playful feel",
43
+ "style": "rainbow-gradient"
44
+ }
45
+ }
46
+ ],
47
+ "canvasSize": { "width": 1920, "height": 1080 },
48
+ "speechParams": {
49
+ "speakers": {
50
+ "Presenter": { "provider": "openai", "voiceId": "alloy" }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.0",
4
+ "credit": "closing"
5
+ },
6
+ "title": "Text Slide Style Test",
7
+ "speechParams": {
8
+ "speakers": {
9
+ "Presenter": {
10
+ "voiceId": "shimmer",
11
+ "displayName": {
12
+ "en": "Presenter"
13
+ }
14
+ }
15
+ }
16
+ },
17
+ "beats": [
18
+ {
19
+ "speaker": "Presenter",
20
+ "text": "This is a corporate blue style slide.",
21
+ "image": {
22
+ "type": "textSlide",
23
+ "slide": {
24
+ "title": "Corporate Blue",
25
+ "subtitle": "Business Style",
26
+ "bullets": ["Professional appearance", "Blue gradient background", "Clean typography"]
27
+ },
28
+ "style": "corporate-blue"
29
+ }
30
+ },
31
+ {
32
+ "speaker": "Presenter",
33
+ "text": "This is a cyber neon style slide.",
34
+ "image": {
35
+ "type": "textSlide",
36
+ "slide": {
37
+ "title": "Cyber Neon",
38
+ "subtitle": "Tech Style",
39
+ "bullets": ["Glowing green text", "Dark background", "Futuristic feel"]
40
+ },
41
+ "style": "cyber-neon"
42
+ }
43
+ },
44
+ {
45
+ "speaker": "Presenter",
46
+ "text": "This is a zen garden style slide.",
47
+ "image": {
48
+ "type": "textSlide",
49
+ "slide": {
50
+ "title": "Zen Garden",
51
+ "subtitle": "Japanese Style",
52
+ "bullets": ["Minimalist design", "Calm colors", "Elegant typography"]
53
+ },
54
+ "style": "zen-garden"
55
+ }
56
+ },
57
+ {
58
+ "speaker": "Presenter",
59
+ "text": "This slide uses default style without specifying style property.",
60
+ "image": {
61
+ "type": "textSlide",
62
+ "slide": {
63
+ "title": "Default Style",
64
+ "subtitle": "No Style Specified",
65
+ "bullets": ["Uses textSlideParams", "Fallback behavior"]
66
+ }
67
+ }
68
+ }
69
+ ]
70
+ }
@@ -1,5 +1,8 @@
1
1
  {
2
- "$schema": "../../assets/schema.json",
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
3
6
  "title": "Vertex AI Test",
4
7
  "description": "Test Vertex AI integration",
5
8
  "lang": "en",
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "../../assets/schema.json",
3
+ "title": "Vertex AI Test",
4
+ "description": "Test Vertex AI integration",
5
+ "lang": "en",
6
+ "imageParams": {
7
+ "provider": "google",
8
+ "model": "imagen-4.0-generate-001",
9
+ "vertexai_project": "${GOOGLE_PROJECT_ID}",
10
+ "vertexai_location": "us-central1"
11
+ },
12
+ "speechParams": {
13
+ "provider": "mock"
14
+ },
15
+ "beats": [
16
+ {
17
+ "text": "Hello",
18
+ "imagePrompt": "A simple blue circle on white background"
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "lang": "ja",
4
+ "title": "実践例",
5
+ "speechParams": {
6
+ "speakers": {
7
+ "Presenter": {
8
+ "provider": "openai",
9
+ "voiceId": "shimmer"
10
+ }
11
+ }
12
+ },
13
+ "beats": [
14
+ {
15
+ "speaker": "Presenter",
16
+ "text": "3つの機能を組み合わせた実践例です。",
17
+ "duration": 3,
18
+ "image": {
19
+ "type": "markdown",
20
+ "markdown": {
21
+ "header": "# プロジェクトフロー",
22
+ "row-2": [
23
+ ["```mermaid", "graph TD", " A[企画] --> B[設計]", " B --> C[開発]", " C --> D[テスト]", " D --> E[リリース]", "```"],
24
+ [
25
+ "## フェーズ説明",
26
+ "",
27
+ "1. **企画**: 要件定義",
28
+ "2. **設計**: アーキテクチャ設計",
29
+ "3. **開発**: 実装",
30
+ "4. **テスト**: 品質保証",
31
+ "5. **リリース**: 本番デプロイ"
32
+ ]
33
+ ]
34
+ },
35
+ "style": "corporate-blue"
36
+ }
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "lang": "ja",
4
+ "title": "レイアウトサンプル",
5
+ "description": "Zenn記事用レイアウトサンプル",
6
+ "speechParams": {
7
+ "speakers": {
8
+ "Presenter": {
9
+ "provider": "openai",
10
+ "voiceId": "shimmer"
11
+ }
12
+ }
13
+ },
14
+ "beats": [
15
+ {
16
+ "speaker": "Presenter",
17
+ "text": "2列レイアウト",
18
+ "duration": 3,
19
+ "image": {
20
+ "type": "markdown",
21
+ "markdown": {
22
+ "row-2": [
23
+ ["# 左カラム", "", "左側のコンテンツです。", "", "- 項目1", "- 項目2"],
24
+ ["# 右カラム", "", "右側のコンテンツです。", "", "- 項目A", "- 項目B"]
25
+ ]
26
+ },
27
+ "style": "soft-gray"
28
+ }
29
+ },
30
+ {
31
+ "speaker": "Presenter",
32
+ "text": "4分割レイアウト",
33
+ "duration": 3,
34
+ "image": {
35
+ "type": "markdown",
36
+ "markdown": {
37
+ "2x2": [
38
+ ["# 左上", "", "セクション1の内容"],
39
+ ["# 右上", "", "セクション2の内容"],
40
+ ["# 左下", "", "セクション3の内容"],
41
+ ["# 右下", "", "セクション4の内容"]
42
+ ]
43
+ },
44
+ "style": "soft-gray"
45
+ }
46
+ },
47
+ {
48
+ "speaker": "Presenter",
49
+ "text": "ヘッダー付きレイアウト",
50
+ "duration": 3,
51
+ "image": {
52
+ "type": "markdown",
53
+ "markdown": {
54
+ "header": "# ページタイトル",
55
+ "row-2": [
56
+ ["## 左コンテンツ", "", "左側の説明文です。"],
57
+ ["## 右コンテンツ", "", "右側の説明文です。"]
58
+ ]
59
+ },
60
+ "style": "soft-gray"
61
+ }
62
+ },
63
+ {
64
+ "speaker": "Presenter",
65
+ "text": "サイドバー付きレイアウト",
66
+ "duration": 3,
67
+ "image": {
68
+ "type": "markdown",
69
+ "markdown": {
70
+ "sidebar-left": ["## メニュー", "", "- 項目1", "- 項目2", "- 項目3"],
71
+ "content": ["# メインコンテンツ", "", "ここにメインの内容が入ります。", "", "サイドバーはナビゲーションや目次に便利です。"]
72
+ },
73
+ "style": "soft-gray"
74
+ }
75
+ },
76
+ {
77
+ "speaker": "Presenter",
78
+ "text": "Mermaid埋め込み",
79
+ "duration": 3,
80
+ "image": {
81
+ "type": "markdown",
82
+ "markdown": {
83
+ "row-2": [
84
+ ["```mermaid", "graph TD", " A[開始] --> B[処理1]", " B --> C[処理2]", " C --> D[終了]", "```"],
85
+ ["# フロー説明", "", "このフローチャートは:", "", "1. 開始から処理1へ", "2. 処理1から処理2へ", "3. 処理2から終了へ"]
86
+ ]
87
+ },
88
+ "style": "soft-gray"
89
+ }
90
+ }
91
+ ]
92
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "lang": "ja",
4
+ "title": "Markdown機能デモ",
5
+ "description": "MulmoCastのMarkdown機能デモ",
6
+ "speechParams": {
7
+ "speakers": {
8
+ "Presenter": {
9
+ "provider": "openai",
10
+ "voiceId": "shimmer"
11
+ }
12
+ }
13
+ },
14
+ "beats": [
15
+ {
16
+ "speaker": "Presenter",
17
+ "text": "スタイル機能のデモです。corporate-blueスタイルを適用しています。",
18
+ "duration": 3,
19
+ "image": {
20
+ "type": "markdown",
21
+ "markdown": [
22
+ "# MulmoCast スタイル機能",
23
+ "",
24
+ "## 100種類のプリセットスタイル",
25
+ "",
26
+ "- ビジネス向けスタイル",
27
+ "- テック系スタイル",
28
+ "- 日本風スタイル",
29
+ "- ダークモード"
30
+ ],
31
+ "style": "corporate-blue"
32
+ }
33
+ },
34
+ {
35
+ "speaker": "Presenter",
36
+ "text": "2列レイアウトのデモです。左右に異なるコンテンツを配置できます。",
37
+ "duration": 3,
38
+ "image": {
39
+ "type": "markdown",
40
+ "markdown": {
41
+ "row-2": [
42
+ ["# 左カラム", "", "左側のコンテンツです。", "", "- 項目1", "- 項目2"],
43
+ ["# 右カラム", "", "右側のコンテンツです。", "", "- 項目A", "- 項目B"]
44
+ ]
45
+ },
46
+ "style": "nordic-light"
47
+ }
48
+ },
49
+ {
50
+ "speaker": "Presenter",
51
+ "text": "Mermaid埋め込みのデモです。図とテキストを並べて表示できます。",
52
+ "duration": 3,
53
+ "image": {
54
+ "type": "markdown",
55
+ "markdown": {
56
+ "row-2": [
57
+ ["```mermaid", "graph TD", " A[開始] --> B[処理1]", " B --> C[処理2]", " C --> D[終了]", "```"],
58
+ ["# フロー説明", "", "このフローチャートは:", "", "1. 開始から処理1へ", "2. 処理1から処理2へ", "3. 処理2から終了へ"]
59
+ ]
60
+ },
61
+ "style": "clean-white"
62
+ }
63
+ },
64
+ {
65
+ "speaker": "Presenter",
66
+ "text": "テキストスライドにもスタイルを適用できます。",
67
+ "duration": 3,
68
+ "image": {
69
+ "type": "textSlide",
70
+ "slide": {
71
+ "title": "TextSlide + スタイル",
72
+ "subtitle": "cyber-neonスタイル適用",
73
+ "bullets": ["テック感のあるデザイン", "ネオングリーンの文字", "ダークな背景"]
74
+ },
75
+ "style": "cyber-neon"
76
+ }
77
+ }
78
+ ]
79
+ }