#!/usr/bin/env bun import { resolve } from 'path'; import type { GenerateOptions, EmojiPrompt, EmojiResult, ImageProvider } from './types'; import { PromptGenerator } from './prompt-generator'; import { OpenAIProvider } from './providers/openai'; import { GeminiProvider } from './providers/gemini'; import { ImageProcessor } from './image-processor'; function parseArgs(): GenerateOptions | null { const args = process.argv.slice(2); if (args.length === 0 || args[0] === '--help' || args[0] === '-h') { printHelp(); return null; } if (args[0] !== 'generate') { console.error(`Unknown command: ${args[0]}`); console.error('Run with --help for usage information'); process.exit(1); } const options: Partial = { count: 5, provider: 'openai', size: 128, style: 'flat', format: 'directory', concurrency: 3, }; for (let i = 1; i < args.length; i++) { const arg = args[i]; switch (arg) { case '--theme': case '-t': options.theme = args[++i]; break; case '--count': case '-c': options.count = parseInt(args[++i], 10); break; case '--provider': case '-p': options.provider = args[++i] as 'openai' | 'gemini'; break; case '--size': case '-s': options.size = parseInt(args[++i], 10); break; case '--style': options.style = args[++i] as GenerateOptions['style']; break; case '--output': case '-o': options.output = args[++i]; break; case '--format': case '-f': options.format = args[++i] as 'zip' | 'directory'; break; case '--concurrency': options.concurrency = parseInt(args[++i], 10); break; default: console.error(`Unknown option: ${arg}`); process.exit(1); } } // Validate required options if (!options.theme) { console.error('Error: --theme is required'); process.exit(1); } if (!options.output) { // Default output based on format options.output = options.format === 'zip' ? `./emoji-${options.theme.toLowerCase().replace(/\s+/g, '-')}.zip` : `./emoji-${options.theme.toLowerCase().replace(/\s+/g, '-')}`; } // Validate provider if (!['openai', 'gemini'].includes(options.provider!)) { console.error('Error: Invalid provider. Choose from: openai, gemini'); process.exit(1); } // Validate style if (!['flat', '3d', 'outline', 'gradient'].includes(options.style!)) { console.error('Error: Invalid style. Choose from: flat, 3d, outline, gradient'); process.exit(1); } // Validate count if (options.count! < 1 || options.count! > 50) { console.error('Error: Count must be between 1 and 50'); process.exit(1); } return options as GenerateOptions; } function printHelp(): void { console.log(` Emoji Pack Generator Skill Generate emoji packs using AI-powered prompt generation and image creation. USAGE: bun run src/index.ts generate [OPTIONS] OPTIONS: --theme, -t Theme for emoji pack (e.g., "Christmas", "Food") [required] --count, -c Number of emojis to generate (1-50, default: 5) --provider, -p Image provider: openai, gemini (default: openai) --size, -s Output size in pixels (default: 128) --style