mulmocast 2.1.19 → 2.1.20
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.
- package/assets/templates/sensei_and_taro.json +3 -3
- package/lib/actions/audio.js +3 -9
- package/lib/agents/index.d.ts +1 -2
- package/lib/agents/index.js +1 -2
- package/lib/data/promptTemplates.js +6 -6
- package/lib/data/templateDataSet.js +1 -1
- package/lib/types/agent.d.ts +0 -4
- package/lib/types/provider2agent.d.ts +0 -5
- package/lib/types/provider2agent.js +0 -5
- package/lib/utils/filters.d.ts +0 -1
- package/lib/utils/filters.js +0 -8
- package/package.json +5 -2
- package/scripts/test/test.json +3 -3
- package/scripts/test/test2.json +1 -1
- package/scripts/test/test_all_tts.json +1 -1
- package/scripts/test/test_lang.json +1 -1
- package/scripts/test/test_mixed_providers.json +1 -1
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
},
|
|
17
17
|
"speechParams": {
|
|
18
18
|
"speakers": {
|
|
19
|
-
"Announcer": { "provider": "
|
|
20
|
-
"Student": { "provider": "
|
|
21
|
-
"Teacher": { "provider": "
|
|
19
|
+
"Announcer": { "provider": "gemini", "displayName": { "ja": "アナウンサー" }, "voiceId": "Aoede" },
|
|
20
|
+
"Student": { "provider": "gemini", "displayName": { "ja": "太郎" }, "voiceId": "Puck" },
|
|
21
|
+
"Teacher": { "provider": "gemini", "displayName": { "ja": "先生" }, "voiceId": "Charon" }
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
},
|
package/lib/actions/audio.js
CHANGED
|
@@ -2,9 +2,9 @@ import dotenv from "dotenv";
|
|
|
2
2
|
import { GraphAI, TaskManager, GraphAILogger } from "graphai";
|
|
3
3
|
import * as agents from "@graphai/vanilla";
|
|
4
4
|
import { fileWriteAgent } from "@graphai/vanilla_node_agents";
|
|
5
|
-
import {
|
|
5
|
+
import { ttsOpenaiAgent, ttsGoogleAgent, ttsGeminiAgent, ttsElevenlabsAgent, ttsKotodamaAgent, addBGMAgent, combineAudioFilesAgent, mediaMockAgent, } from "../agents/index.js";
|
|
6
6
|
import { text2SpeechProviderSchema } from "../types/index.js";
|
|
7
|
-
import { fileCacheAgentFilter
|
|
7
|
+
import { fileCacheAgentFilter } from "../utils/filters.js";
|
|
8
8
|
import { getAudioArtifactFilePath, getAudioFilePath, getOutputStudioFilePath, resolveDirPath, defaultBGMPath, mkdir, writingMessage } from "../utils/file.js";
|
|
9
9
|
import { localizedText, settings2GraphAIConfig } from "../utils/utils.js";
|
|
10
10
|
import { text2hash } from "../utils/utils_node.js";
|
|
@@ -214,14 +214,9 @@ const agentFilters = [
|
|
|
214
214
|
agent: fileCacheAgentFilter,
|
|
215
215
|
nodeIds: ["tts"],
|
|
216
216
|
},
|
|
217
|
-
{
|
|
218
|
-
name: "nijovoiceTextAgentFilter",
|
|
219
|
-
agent: nijovoiceTextAgentFilter,
|
|
220
|
-
nodeIds: ["tts"],
|
|
221
|
-
},
|
|
222
217
|
];
|
|
223
218
|
const getConcurrency = (context) => {
|
|
224
|
-
// Check if any speaker uses
|
|
219
|
+
// Check if any speaker uses elevenlabs or kotodama (providers that require concurrency = 1)
|
|
225
220
|
const hasLimitedConcurrencyProvider = Object.values(context.presentationStyle.speechParams.speakers).some((speaker) => {
|
|
226
221
|
const provider = text2SpeechProviderSchema.parse(speaker.provider);
|
|
227
222
|
return provider2TTSAgent[provider].hasLimitedConcurrency;
|
|
@@ -232,7 +227,6 @@ const audioAgents = {
|
|
|
232
227
|
...vanillaAgents,
|
|
233
228
|
fileWriteAgent,
|
|
234
229
|
ttsOpenaiAgent,
|
|
235
|
-
ttsNijivoiceAgent,
|
|
236
230
|
ttsGoogleAgent,
|
|
237
231
|
ttsGeminiAgent,
|
|
238
232
|
ttsKotodamaAgent,
|
package/lib/agents/index.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ import movieGenAIAgent from "./movie_genai_agent.js";
|
|
|
8
8
|
import movieReplicateAgent from "./movie_replicate_agent.js";
|
|
9
9
|
import mediaMockAgent from "./media_mock_agent.js";
|
|
10
10
|
import ttsElevenlabsAgent from "./tts_elevenlabs_agent.js";
|
|
11
|
-
import ttsNijivoiceAgent from "./tts_nijivoice_agent.js";
|
|
12
11
|
import ttsOpenaiAgent from "./tts_openai_agent.js";
|
|
13
12
|
import ttsGoogleAgent from "./tts_google_agent.js";
|
|
14
13
|
import ttsGeminiAgent from "./tts_gemini_agent.js";
|
|
@@ -21,4 +20,4 @@ import { browserlessAgent } from "@graphai/browserless_agent";
|
|
|
21
20
|
import { textInputAgent } from "@graphai/input_agents";
|
|
22
21
|
import { openAIAgent } from "@graphai/openai_agent";
|
|
23
22
|
import { fileWriteAgent } from "@graphai/vanilla_node_agents";
|
|
24
|
-
export { openAIAgent, fileWriteAgent, browserlessAgent, textInputAgent, addBGMAgent, combineAudioFilesAgent, imageGenAIAgent, imageOpenaiAgent, imageReplicateAgent, tavilySearchAgent, movieGenAIAgent, movieReplicateAgent, mediaMockAgent, ttsElevenlabsAgent,
|
|
23
|
+
export { openAIAgent, fileWriteAgent, browserlessAgent, textInputAgent, addBGMAgent, combineAudioFilesAgent, imageGenAIAgent, imageOpenaiAgent, imageReplicateAgent, tavilySearchAgent, movieGenAIAgent, movieReplicateAgent, mediaMockAgent, ttsElevenlabsAgent, ttsOpenaiAgent, ttsGoogleAgent, ttsGeminiAgent, ttsKotodamaAgent, validateSchemaAgent, soundEffectReplicateAgent, lipSyncReplicateAgent, puppeteerCrawlerAgent, };
|
package/lib/agents/index.js
CHANGED
|
@@ -8,7 +8,6 @@ import movieGenAIAgent from "./movie_genai_agent.js";
|
|
|
8
8
|
import movieReplicateAgent from "./movie_replicate_agent.js";
|
|
9
9
|
import mediaMockAgent from "./media_mock_agent.js";
|
|
10
10
|
import ttsElevenlabsAgent from "./tts_elevenlabs_agent.js";
|
|
11
|
-
import ttsNijivoiceAgent from "./tts_nijivoice_agent.js";
|
|
12
11
|
import ttsOpenaiAgent from "./tts_openai_agent.js";
|
|
13
12
|
import ttsGoogleAgent from "./tts_google_agent.js";
|
|
14
13
|
import ttsGeminiAgent from "./tts_gemini_agent.js";
|
|
@@ -22,4 +21,4 @@ import { textInputAgent } from "@graphai/input_agents";
|
|
|
22
21
|
import { openAIAgent } from "@graphai/openai_agent";
|
|
23
22
|
// import * as vanilla from "@graphai/vanilla";
|
|
24
23
|
import { fileWriteAgent } from "@graphai/vanilla_node_agents";
|
|
25
|
-
export { openAIAgent, fileWriteAgent, browserlessAgent, textInputAgent, addBGMAgent, combineAudioFilesAgent, imageGenAIAgent, imageOpenaiAgent, imageReplicateAgent, tavilySearchAgent, movieGenAIAgent, movieReplicateAgent, mediaMockAgent, ttsElevenlabsAgent,
|
|
24
|
+
export { openAIAgent, fileWriteAgent, browserlessAgent, textInputAgent, addBGMAgent, combineAudioFilesAgent, imageGenAIAgent, imageOpenaiAgent, imageReplicateAgent, tavilySearchAgent, movieGenAIAgent, movieReplicateAgent, mediaMockAgent, ttsElevenlabsAgent, ttsOpenaiAgent, ttsGoogleAgent, ttsGeminiAgent, ttsKotodamaAgent, validateSchemaAgent, soundEffectReplicateAgent, lipSyncReplicateAgent, puppeteerCrawlerAgent, };
|
|
@@ -890,22 +890,22 @@ export const promptTemplates = [
|
|
|
890
890
|
displayName: {
|
|
891
891
|
ja: "アナウンサー",
|
|
892
892
|
},
|
|
893
|
-
provider: "
|
|
894
|
-
voiceId: "
|
|
893
|
+
provider: "gemini",
|
|
894
|
+
voiceId: "Aoede",
|
|
895
895
|
},
|
|
896
896
|
Student: {
|
|
897
897
|
displayName: {
|
|
898
898
|
ja: "太郎",
|
|
899
899
|
},
|
|
900
|
-
provider: "
|
|
901
|
-
voiceId: "
|
|
900
|
+
provider: "gemini",
|
|
901
|
+
voiceId: "Puck",
|
|
902
902
|
},
|
|
903
903
|
Teacher: {
|
|
904
904
|
displayName: {
|
|
905
905
|
ja: "先生",
|
|
906
906
|
},
|
|
907
|
-
provider: "
|
|
908
|
-
voiceId: "
|
|
907
|
+
provider: "gemini",
|
|
908
|
+
voiceId: "Charon",
|
|
909
909
|
},
|
|
910
910
|
},
|
|
911
911
|
},
|
|
@@ -73,7 +73,7 @@ export const templateDataSet = {
|
|
|
73
73
|
"```",
|
|
74
74
|
sensei_and_taro: "全てを高校生にも分かるように、太郎くん(Student)と先生(Teacher)の会話、という形の台本にして。ただし要点はしっかりと押さえて。以下に別のトピックに関するサンプルを貼り付けます。このJSONフォーマットに従って。\n" +
|
|
75
75
|
"```JSON\n" +
|
|
76
|
-
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"韓国の戒厳令とその日本への影響","description":"韓国で最近発令された戒厳令とその可能性のある影響について、また日本の憲法に関する考慮事項との類似点を含めた洞察に満ちた議論。","lang":"ja","beats":[{"speaker":"Announcer","text":"今日は、韓国で起きた戒厳令について、太郎くんが先生に聞きます。","imagePrompt":"A classroom setting with a curious Japanese student (Taro) and a kind teacher. Calm atmosphere, early morning light coming through the window."},{"speaker":"Student","text":"先生、今日は韓国で起きた戒厳令のことを教えてもらえますか?","imagePrompt":"The student (Taro) sitting at his desk with a serious expression, raising his hand to ask a question. Teacher is slightly surprised but attentive."},{"speaker":"Teacher","text":"もちろんだよ、太郎くん。韓国で最近、大統領が「戒厳令」っていうのを突然宣言したんだ。","imagePrompt":"TV screen showing a breaking news headline in Korean: 'President Declares Martial Law'. Students watching with concern."},{"speaker":"Student","text":"戒厳令ってなんですか?","imagePrompt":"A close-up of the student's puzzled face, with a speech bubble saying '戒厳令って?'"},{"speaker":"Teacher","text":"簡単に言うと、国がすごく危ない状態にあるとき、軍隊を使って人々の自由を制限するためのものなんだ。","imagePrompt":"Illustration of soldiers standing in the street, people being stopped and questioned, with a red 'X' on a protest sign. Moody and serious tone."},{"speaker":"Student","text":"それって怖いですね。なんでそんなことをしたんですか?","imagePrompt":"Student looking anxious, thinking deeply. Background shows a shadowy image of a politician giving orders to the military."},{"speaker":"Teacher","text":"大統領は「国会がうまく機能していないから」と言っていたけど…","imagePrompt":"A tense scene of military personnel entering a national assembly building in Korea, lawmakers looking shocked and resisting."},{"speaker":"Student","text":"ええっ!?国会議員を捕まえようとするなんて、すごく危ないことじゃないですか。","imagePrompt":"The student reacts with shock, comic-style expression with wide eyes and open mouth. Background fades into a dramatic courtroom or parliament chaos."},{"speaker":"Teacher","text":"その通りだよ。もし軍隊が国会を占拠していたら…","imagePrompt":"Dark visual of a locked parliament building with soldiers blocking the entrance, ominous sky in the background."},{"speaker":"Student","text":"韓国ではどうなったんですか?","imagePrompt":"Student leans forward, curious and worried. Background shows a hopeful scene of people holding protest signs with candles at night."},{"speaker":"Teacher","text":"幸い、野党の議員や市民たちが急いで集まって抗議して…","imagePrompt":"Peaceful protest scene in Seoul, citizens holding candles and banners, united. Hopeful tone."},{"speaker":"Student","text":"それは大変なことですね…。日本ではそんなこと起きないんですか?","imagePrompt":"Student looking toward the Japanese flag outside the school window, pensive mood."},{"speaker":"Teacher","text":"実はね、今、日本でも似たような話があるんだよ。","imagePrompt":"Teacher pointing to a newspaper headline: '緊急事態条項の議論進む'. Classroom chalkboard shows a map of Korea and Japan."},{"speaker":"Student","text":"緊急事態宣言って、韓国の戒厳令と同じようなものなんですか?","imagePrompt":"Split screen image: left side shows a soldier in Korea, right side shows a suited Japanese politician giving a press conference."},{"speaker":"Teacher","text":"似ている部分があるね。たとえば、総理大臣が…","imagePrompt":"Diagram-style visual showing the flow of emergency powers from PM to local governments. Simple, clean infographic style."},{"speaker":"Student","text":"それって便利そうですけど、なんだか心配です。","imagePrompt":"Student's concerned expression, behind him a blurry image of a street with emergency sirens glowing in red."},{"speaker":"Teacher","text":"そうだね。もちろん、緊急時には素早い対応が必要だけど…","imagePrompt":"Illustration of a balance scale: one side is 'freedom', the other 'security'. The scale is slightly tilting."},{"speaker":"Student","text":"韓国みたいに、軍隊が政治に口を出してくることもあり得るんですか?","imagePrompt":"Student imagining a military tank next to the Japanese parliament, shown as a thought bubble."},{"speaker":"Teacher","text":"完全にあり得ないとは言えないからこそ、注意が必要なんだ。","imagePrompt":"Japanese citizens reading newspapers and watching news with concerned faces, civic awareness growing."},{"speaker":"Student","text":"ありがとうございます。とても良い勉強になりました。","imagePrompt":"The student bows slightly to the teacher with a grateful expression. The classroom is peaceful again."},{"speaker":"Announcer","text":"ご視聴、ありがとうございました。次回の放送もお楽しみに。","imagePrompt":"Ending screen with soft background music, showing the show's logo and a thank-you message in Japanese."}],"canvasSize":{"width":1536,"height":1024},"imageParams":{"style":"<style>Ghibli style. Student (Taro) is a young teenager with a dark short hair with glasses. Teacher is a middle-aged man with grey hair and moustache.</style>"},"speechParams":{"speakers":{"Announcer":{"provider":"
|
|
76
|
+
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"韓国の戒厳令とその日本への影響","description":"韓国で最近発令された戒厳令とその可能性のある影響について、また日本の憲法に関する考慮事項との類似点を含めた洞察に満ちた議論。","lang":"ja","beats":[{"speaker":"Announcer","text":"今日は、韓国で起きた戒厳令について、太郎くんが先生に聞きます。","imagePrompt":"A classroom setting with a curious Japanese student (Taro) and a kind teacher. Calm atmosphere, early morning light coming through the window."},{"speaker":"Student","text":"先生、今日は韓国で起きた戒厳令のことを教えてもらえますか?","imagePrompt":"The student (Taro) sitting at his desk with a serious expression, raising his hand to ask a question. Teacher is slightly surprised but attentive."},{"speaker":"Teacher","text":"もちろんだよ、太郎くん。韓国で最近、大統領が「戒厳令」っていうのを突然宣言したんだ。","imagePrompt":"TV screen showing a breaking news headline in Korean: 'President Declares Martial Law'. Students watching with concern."},{"speaker":"Student","text":"戒厳令ってなんですか?","imagePrompt":"A close-up of the student's puzzled face, with a speech bubble saying '戒厳令って?'"},{"speaker":"Teacher","text":"簡単に言うと、国がすごく危ない状態にあるとき、軍隊を使って人々の自由を制限するためのものなんだ。","imagePrompt":"Illustration of soldiers standing in the street, people being stopped and questioned, with a red 'X' on a protest sign. Moody and serious tone."},{"speaker":"Student","text":"それって怖いですね。なんでそんなことをしたんですか?","imagePrompt":"Student looking anxious, thinking deeply. Background shows a shadowy image of a politician giving orders to the military."},{"speaker":"Teacher","text":"大統領は「国会がうまく機能していないから」と言っていたけど…","imagePrompt":"A tense scene of military personnel entering a national assembly building in Korea, lawmakers looking shocked and resisting."},{"speaker":"Student","text":"ええっ!?国会議員を捕まえようとするなんて、すごく危ないことじゃないですか。","imagePrompt":"The student reacts with shock, comic-style expression with wide eyes and open mouth. Background fades into a dramatic courtroom or parliament chaos."},{"speaker":"Teacher","text":"その通りだよ。もし軍隊が国会を占拠していたら…","imagePrompt":"Dark visual of a locked parliament building with soldiers blocking the entrance, ominous sky in the background."},{"speaker":"Student","text":"韓国ではどうなったんですか?","imagePrompt":"Student leans forward, curious and worried. Background shows a hopeful scene of people holding protest signs with candles at night."},{"speaker":"Teacher","text":"幸い、野党の議員や市民たちが急いで集まって抗議して…","imagePrompt":"Peaceful protest scene in Seoul, citizens holding candles and banners, united. Hopeful tone."},{"speaker":"Student","text":"それは大変なことですね…。日本ではそんなこと起きないんですか?","imagePrompt":"Student looking toward the Japanese flag outside the school window, pensive mood."},{"speaker":"Teacher","text":"実はね、今、日本でも似たような話があるんだよ。","imagePrompt":"Teacher pointing to a newspaper headline: '緊急事態条項の議論進む'. Classroom chalkboard shows a map of Korea and Japan."},{"speaker":"Student","text":"緊急事態宣言って、韓国の戒厳令と同じようなものなんですか?","imagePrompt":"Split screen image: left side shows a soldier in Korea, right side shows a suited Japanese politician giving a press conference."},{"speaker":"Teacher","text":"似ている部分があるね。たとえば、総理大臣が…","imagePrompt":"Diagram-style visual showing the flow of emergency powers from PM to local governments. Simple, clean infographic style."},{"speaker":"Student","text":"それって便利そうですけど、なんだか心配です。","imagePrompt":"Student's concerned expression, behind him a blurry image of a street with emergency sirens glowing in red."},{"speaker":"Teacher","text":"そうだね。もちろん、緊急時には素早い対応が必要だけど…","imagePrompt":"Illustration of a balance scale: one side is 'freedom', the other 'security'. The scale is slightly tilting."},{"speaker":"Student","text":"韓国みたいに、軍隊が政治に口を出してくることもあり得るんですか?","imagePrompt":"Student imagining a military tank next to the Japanese parliament, shown as a thought bubble."},{"speaker":"Teacher","text":"完全にあり得ないとは言えないからこそ、注意が必要なんだ。","imagePrompt":"Japanese citizens reading newspapers and watching news with concerned faces, civic awareness growing."},{"speaker":"Student","text":"ありがとうございます。とても良い勉強になりました。","imagePrompt":"The student bows slightly to the teacher with a grateful expression. The classroom is peaceful again."},{"speaker":"Announcer","text":"ご視聴、ありがとうございました。次回の放送もお楽しみに。","imagePrompt":"Ending screen with soft background music, showing the show's logo and a thank-you message in Japanese."}],"canvasSize":{"width":1536,"height":1024},"imageParams":{"style":"<style>Ghibli style. Student (Taro) is a young teenager with a dark short hair with glasses. Teacher is a middle-aged man with grey hair and moustache.</style>"},"speechParams":{"speakers":{"Announcer":{"provider":"gemini","displayName":{"ja":"アナウンサー"},"voiceId":"Aoede"},"Student":{"provider":"gemini","displayName":{"ja":"太郎"},"voiceId":"Puck"},"Teacher":{"provider":"gemini","displayName":{"ja":"先生"},"voiceId":"Charon"}}}}\n` +
|
|
77
77
|
"```",
|
|
78
78
|
shorts: "This script is for YouTube shorts. The first beat should be a hook, which describes the topic. Another AI will generate images for each beat based on the image prompt of that beat. Movie prompts must be written in English.\n" +
|
|
79
79
|
"```JSON\n" +
|
package/lib/types/agent.d.ts
CHANGED
|
@@ -113,10 +113,6 @@ export type OpenAITTSAgentParams = TTSAgentParams & {
|
|
|
113
113
|
model: string;
|
|
114
114
|
speed: number;
|
|
115
115
|
};
|
|
116
|
-
export type NijivoiceTTSAgentParams = TTSAgentParams & {
|
|
117
|
-
speed: number;
|
|
118
|
-
speed_global: number;
|
|
119
|
-
};
|
|
120
116
|
export type KotodamaTTSAgentParams = TTSAgentParams & {
|
|
121
117
|
decoration: string;
|
|
122
118
|
};
|
package/lib/utils/filters.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { AgentFilterFunction } from "graphai";
|
|
2
|
-
export declare const nijovoiceTextAgentFilter: AgentFilterFunction;
|
|
3
2
|
export declare const fileCacheAgentFilter: AgentFilterFunction;
|
|
4
3
|
export declare const browserlessCacheGenerator: (cacheDir: string) => AgentFilterFunction;
|
|
5
4
|
export declare const getBackupFilePath: (originalPath: string) => string;
|
package/lib/utils/filters.js
CHANGED
|
@@ -6,15 +6,7 @@ import { GraphAILogger } from "graphai";
|
|
|
6
6
|
import { writingMessage, isFile } from "./file.js";
|
|
7
7
|
import { text2hash } from "./utils_node.js";
|
|
8
8
|
import { MulmoStudioContextMethods } from "../methods/mulmo_studio_context.js";
|
|
9
|
-
import { replacementsJa, replacePairsJa } from "../utils/string.js";
|
|
10
9
|
dotenv.config({ quiet: true });
|
|
11
|
-
export const nijovoiceTextAgentFilter = async (context, next) => {
|
|
12
|
-
const { text, provider, lang } = context.namedInputs;
|
|
13
|
-
if (provider === "nijivoice" && lang === "ja") {
|
|
14
|
-
context.namedInputs.text = replacePairsJa(replacementsJa)(text);
|
|
15
|
-
}
|
|
16
|
-
return next(context);
|
|
17
|
-
};
|
|
18
10
|
export const fileCacheAgentFilter = async (context, next) => {
|
|
19
11
|
const { force, file, index, mulmoContext, sessionType, id, withBackup } = context.namedInputs.cache;
|
|
20
12
|
/*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mulmocast",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.20",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.node.js",
|
|
@@ -65,7 +65,10 @@
|
|
|
65
65
|
"nijivoice": "npx tsx batch/niji_sample.ts && yarn run movie scripts/samples/niji_voice.json",
|
|
66
66
|
"generate_action_docs": "npx tsx ./automation/generate_actions_docs/generate_action_docs.ts"
|
|
67
67
|
},
|
|
68
|
-
"repository":
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "git+ssh://git@github.com/receptron/mulmocast-cli.git"
|
|
71
|
+
},
|
|
69
72
|
"author": "snakajima",
|
|
70
73
|
"license": "AGPL-3.0-only",
|
|
71
74
|
"bugs": {
|
package/scripts/test/test.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"speechParams": {
|
|
20
20
|
"speakers": {
|
|
21
21
|
"Announcer": {
|
|
22
|
-
"provider": "
|
|
22
|
+
"provider": "gemini",
|
|
23
23
|
"displayName": {
|
|
24
24
|
"ja": "アナウンサー"
|
|
25
25
|
},
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"Student": {
|
|
32
|
-
"provider": "
|
|
32
|
+
"provider": "gemini",
|
|
33
33
|
"displayName": {
|
|
34
34
|
"ja": "生徒"
|
|
35
35
|
},
|
|
36
36
|
"voiceId": "a7619e48-bf6a-4f9f-843f-40485651257f"
|
|
37
37
|
},
|
|
38
38
|
"Teacher": {
|
|
39
|
-
"provider": "
|
|
39
|
+
"provider": "gemini",
|
|
40
40
|
"displayName": {
|
|
41
41
|
"ja": "先生"
|
|
42
42
|
},
|
package/scripts/test/test2.json
CHANGED