@conceptcraft/mindframes 0.1.11 → 0.1.12

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/dist/index.js CHANGED
@@ -3422,10 +3422,10 @@ cat scenes.json | ${cmd2} video create -o product-demo/public
3422
3422
 
3423
3423
  # 3. Implement in Remotion (see ${name}-video skill)
3424
3424
 
3425
- # 4. Render and add thumbnail
3425
+ # 4. Render and add thumbnail (version files: v1, v2, v3...)
3426
3426
  cd product-demo
3427
- pnpm exec remotion render FullVideo
3428
- ${cmd2} video thumbnail out/FullVideo.mp4 --frame 60
3427
+ pnpm exec remotion render FullVideo out/FullVideo-v1.mp4
3428
+ ${cmd2} video thumbnail out/FullVideo-v1.mp4 --frame 60
3429
3429
  \`\`\`
3430
3430
 
3431
3431
  ### Presentation from Research
@@ -3672,14 +3672,18 @@ cd my-video
3672
3672
 
3673
3673
  ### 3. Render Video
3674
3674
 
3675
+ **IMPORTANT:** Always version output files to avoid overwriting. Check existing files and increment version:
3676
+ - First render: \`out/video-v1.mp4\`
3677
+ - Re-render: \`out/video-v2.mp4\`, \`out/video-v3.mp4\`, etc.
3678
+
3675
3679
  **For landscape videos (16:9):**
3676
3680
  \`\`\`bash
3677
- pnpm exec remotion render FullVideo out/video.mp4
3681
+ pnpm exec remotion render FullVideo out/video-v1.mp4
3678
3682
  \`\`\`
3679
3683
 
3680
3684
  **For vertical videos (9:16) with captions:**
3681
3685
  \`\`\`bash
3682
- pnpm exec remotion render CaptionedVideo out/tiktok.mp4 \\
3686
+ pnpm exec remotion render CaptionedVideo out/tiktok-v1.mp4 \\
3683
3687
  --props='{"timeline":'$(cat public/video-manifest.json | jq -c .timeline)',"showCaptions":true}'
3684
3688
  \`\`\`
3685
3689
 
@@ -4117,7 +4121,8 @@ skillCommand.command("uninstall").description(`Remove ${brand.displayName} skill
4117
4121
  import { Command as Command15 } from "commander";
4118
4122
  import ora8 from "ora";
4119
4123
  import { writeFile as writeFile2 } from "fs/promises";
4120
- var generateCommand = new Command15("generate").description("Generate speech from text").requiredOption("-t, --text <text>", "Text to convert to speech").requiredOption("-o, --output <path>", "Output file path").option("-v, --voice <voice>", "Voice name or ID (e.g., Kore, Rachel, alloy)").option("-p, --provider <provider>", "Provider: gemini, elevenlabs, openai").option("-m, --model <model>", "Model (provider-specific)").option("-s, --speed <speed>", "Speech speed 0.25-4.0 (default: 1.0)").option("-f, --format <format>", "Output format: human, json, quiet", "human").action(async (options) => {
4124
+ var DEFAULT_ELEVENLABS_VOICE_ID = "21m00Tcm4TlvDq8ikWAM";
4125
+ var generateCommand = new Command15("generate").description("Generate speech from text (uses ElevenLabs)").requiredOption("-t, --text <text>", "Text to convert to speech").requiredOption("-o, --output <path>", "Output file path").option("--voice-id <voiceId>", `ElevenLabs voice ID (default: ${DEFAULT_ELEVENLABS_VOICE_ID})`).option("-m, --model <model>", "Model (provider-specific)").option("-s, --speed <speed>", "Speech speed 0.25-4.0 (default: 1.0)").option("-f, --format <format>", "Output format: human, json, quiet", "human").action(async (options) => {
4121
4126
  const format = options.format;
4122
4127
  const spinner = format === "human" ? ora8("Generating speech...").start() : null;
4123
4128
  let speed;
@@ -4130,11 +4135,13 @@ var generateCommand = new Command15("generate").description("Generate speech fro
4130
4135
  }
4131
4136
  }
4132
4137
  try {
4138
+ const voiceId = options.voiceId || DEFAULT_ELEVENLABS_VOICE_ID;
4133
4139
  const result = await generateSpeech({
4134
4140
  text: options.text,
4135
4141
  options: {
4136
- provider: options.provider,
4137
- voice: options.voice,
4142
+ provider: "elevenlabs",
4143
+ // Currently only ElevenLabs is supported
4144
+ voiceId,
4138
4145
  model: options.model,
4139
4146
  speed
4140
4147
  }
@@ -4167,31 +4174,28 @@ var generateCommand = new Command15("generate").description("Generate speech fro
4167
4174
  process.exit(EXIT_CODES.GENERAL_ERROR);
4168
4175
  }
4169
4176
  });
4170
- var voicesCommand = new Command15("voices").description("List available voices").option("-p, --provider <provider>", "Filter by provider: gemini, elevenlabs, openai").option("-f, --format <format>", "Output format: human, json", "human").action(async (options) => {
4177
+ var voicesCommand = new Command15("voices").description("List available voices (currently only ElevenLabs)").option("-f, --format <format>", "Output format: human, json", "human").action(async (options) => {
4171
4178
  const spinner = options.format === "human" ? ora8("Fetching voices...").start() : null;
4172
4179
  try {
4173
4180
  const result = await getVoices();
4174
4181
  spinner?.stop();
4182
+ const provider = "elevenlabs";
4175
4183
  if (options.format === "json") {
4176
- if (options.provider) {
4177
- const providerVoices = result.voices[options.provider];
4178
- printJson(providerVoices || []);
4179
- } else {
4180
- printJson(result.voices);
4181
- }
4184
+ const providerVoices = result.voices[provider];
4185
+ printJson(providerVoices || []);
4182
4186
  return;
4183
4187
  }
4184
- const providers = options.provider ? [options.provider] : ["gemini", "elevenlabs", "openai"];
4185
- for (const provider of providers) {
4186
- const voices = result.voices[provider];
4187
- if (!voices || voices.length === 0) continue;
4188
- console.log();
4189
- console.log(`${provider.toUpperCase()} Voices:`);
4190
- console.log("-".repeat(50));
4191
- for (const voice of voices) {
4192
- console.log(` ${voice.name} (${voice.id})`);
4193
- console.log(` ${voice.description}`);
4194
- }
4188
+ const voices = result.voices[provider];
4189
+ if (!voices || voices.length === 0) {
4190
+ info("No ElevenLabs voices available");
4191
+ return;
4192
+ }
4193
+ console.log();
4194
+ console.log(`ELEVENLABS Voices:`);
4195
+ console.log("-".repeat(50));
4196
+ for (const voice of voices) {
4197
+ console.log(` ${voice.name} (${voice.id})`);
4198
+ console.log(` ${voice.description}`);
4195
4199
  }
4196
4200
  } catch (err) {
4197
4201
  spinner?.stop();
@@ -5184,9 +5188,6 @@ var initCommand = new Command19("init").description("Create a new Remotion video
5184
5188
  ).replace(
5185
5189
  /export const VIDEO_HEIGHT = 1080;/,
5186
5190
  "export const VIDEO_HEIGHT = 1920; // TikTok 9:16"
5187
- ).replace(
5188
- /export const VIDEO_FPS = 60;/,
5189
- "export const VIDEO_FPS = 30; // TikTok standard"
5190
5191
  );
5191
5192
  await writeFile5(constantsPath, constantsContent, "utf-8");
5192
5193
  if (format === "human") {
@@ -5217,7 +5218,7 @@ var initCommand = new Command19("init").description("Create a new Remotion video
5217
5218
  if (options.type === "tiktok") {
5218
5219
  info("Format: TikTok/Reels/Shorts (1080x1920 @ 30fps)");
5219
5220
  } else {
5220
- info("Format: Landscape (1920x1080 @ 60fps)");
5221
+ info("Format: Landscape (1920x1080 @ 30fps)");
5221
5222
  }
5222
5223
  console.log();
5223
5224
  info("Next steps:");
@@ -5378,7 +5379,7 @@ var thumbnailCommand = new Command19("thumbnail").description("Embed a thumbnail
5378
5379
  var videoCommand = new Command19("video").description("Video asset generation commands").addCommand(initCommand).addCommand(createCommand3).addCommand(searchCommand2).addCommand(thumbnailCommand);
5379
5380
 
5380
5381
  // src/index.ts
5381
- var VERSION = "0.1.11";
5382
+ var VERSION = "0.1.12";
5382
5383
  var program = new Command20();
5383
5384
  var cmdName = brand.commands[0];
5384
5385
  program.name(cmdName).description(brand.description).version(VERSION, "-v, --version", "Show version number").option("--debug", "Enable debug logging").option("--no-color", "Disable colored output").configureOutput({