diff --git a/src/commands/music/generate.ts b/src/commands/music/generate.ts index 0199d34..dabe67d 100644 --- a/src/commands/music/generate.ts +++ b/src/commands/music/generate.ts @@ -15,9 +15,23 @@ export default defineCommand({ description: 'Generate a song (music-2.5)', usage: 'minimax music generate --prompt [--lyrics ] [--out ] [flags]', options: [ - { flag: '--prompt ', description: 'Music style description' }, - { flag: '--lyrics ', description: 'Song lyrics' }, - { flag: '--lyrics-file ', description: 'Read lyrics from file (use - for stdin)' }, + { flag: '--prompt ', description: 'Music style description (can be detailed — see examples)' }, + { flag: '--lyrics ', description: 'Song lyrics with structure tags. Use "无歌词" for instrumental music. Cannot be used with --instrumental.' }, + { flag: '--lyrics-file ', description: 'Read lyrics from file. Use "无歌词" for instrumental. (use - for stdin)' }, + { flag: '--vocals ', description: 'Vocal style, e.g. "warm male baritone", "bright female soprano", "duet with harmonies"' }, + { flag: '--genre ', description: 'Music genre, e.g. folk, pop, jazz' }, + { flag: '--mood ', description: 'Mood or emotion, e.g. warm, melancholic, uplifting' }, + { flag: '--instruments ', description: 'Instruments to feature, e.g. "acoustic guitar, piano"' }, + { flag: '--tempo ', description: 'Tempo description, e.g. fast, slow, moderate' }, + { flag: '--bpm ', description: 'Exact tempo in beats per minute', type: 'number' }, + { flag: '--key ', description: 'Musical key, e.g. C major, A minor, G sharp' }, + { flag: '--avoid ', description: 'Elements to avoid in the generated music' }, + { flag: '--use-case ', description: 'Use case context, e.g. "background music for video", "theme song"' }, + { flag: '--structure ', description: 'Song structure, e.g. "verse-chorus-verse-bridge-chorus"' }, + { flag: '--references ', description: 'Reference tracks or artists, e.g. "similar to Ed Sheeran, Taylor Swift"' }, + { flag: '--extra ', description: 'Additional fine-grained requirements not covered above' }, + { flag: '--instrumental', description: 'Generate instrumental music (no vocals)' }, + { flag: '--aigc-watermark', description: 'Embed AI-generated content watermark in audio for content provenance' }, { flag: '--format ', description: 'Audio format (default: mp3)' }, { flag: '--sample-rate ', description: 'Sample rate (default: 44100)', type: 'number' }, { flag: '--bitrate ', description: 'Bitrate (default: 256000)', type: 'number' }, @@ -25,18 +39,63 @@ export default defineCommand({ { flag: '--out ', description: 'Save audio to file (uses hex decoding)' }, ], examples: [ - 'minimax music generate --prompt "Upbeat pop" --lyrics "La la la..."', - 'minimax music generate --prompt "Indie folk, melancholic" --lyrics-file song.txt --out my_song.mp3', 'minimax music generate --prompt "Upbeat pop" --lyrics "La la la..." --out summer.mp3', + 'minimax music generate --prompt "Indie folk, melancholic" --lyrics-file song.txt --out my_song.mp3', + '# Detailed prompt with vocal characteristics — music-2.5 responds well to rich descriptions:', + 'minimax music generate --prompt "Warm morning folk" --vocals "male and female duet, harmonies in chorus" --instruments "acoustic guitar, piano" --bpm 95 --lyrics-file song.txt --out duet.mp3', + '# Instrumental (use --instrumental flag):', + 'minimax music generate --prompt "Cinematic orchestral, building tension" --instrumental --out bgm.mp3', + '# Or specify "无歌词" in lyrics:', + 'minimax music generate --prompt "Cinematic orchestral" --lyrics "无歌词" --out bgm.mp3', ], async run(config: Config, flags: GlobalFlags) { - const prompt = flags.prompt as string | undefined; + let prompt = flags.prompt as string | undefined; let lyrics = flags.lyrics as string | undefined; if (flags.lyricsFile) { lyrics = readTextFromPathOrStdin(flags.lyricsFile as string); } + // Check for conflicting flags: --instrumental and --lyrics/--lyrics-file + if (flags.instrumental && (lyrics || flags.lyricsFile)) { + throw new CLIError( + 'Cannot use --instrumental with --lyrics or --lyrics-file. For instrumental music, simply use --instrumental without --lyrics.', + ExitCode.USAGE, + 'minimax music generate --prompt