# ComfyUI Icons Guide ComfyUI supports three types of icons that can be used throughout the interface. All icons are automatically imported - no manual imports needed! ## Quick Start - Code Examples ### 1. PrimeIcons ```vue ``` [Browse all PrimeIcons →](https://primevue.org/icons/#list) ### 2. Iconify Icons (Recommended) ```vue ``` [Browse 200,000+ icons →](https://icon-sets.iconify.design/) ### 3. Custom Icons ```vue ``` ## Icon Usage Patterns ### In Buttons ```vue ``` ### Conditional Icons ```vue ``` ### With Tooltips ```vue ``` ## Using Iconify Icons ### Finding Icons 1. Visit [Iconify Icon Sets](https://icon-sets.iconify.design/) 2. Search or browse collections 3. Click on any icon to get its name 4. Use with `i-[collection]:[icon-name]` format ### Popular Collections - **Lucide** (`i-lucide:`) - Our primary icon set, clean and consistent - **Material Design Icons** (`i-mdi:`) - Comprehensive Material Design icons - **Heroicons** (`i-heroicons:`) - Beautiful hand-crafted SVG icons - **Tabler** (`i-tabler:`) - 3000+ free SVG icons - **Carbon** (`i-carbon:`) - IBM's design system icons ## Adding Custom Icons ### 1. Add Your SVG Place your SVG file in `packages/design-system/src/icons/`: ``` packages/design-system/src/icons/ ├── workflow-duplicate.svg ├── node-preview.svg └── your-icon.svg ``` ### 2. SVG Format Requirements ```xml ``` **Important:** - Use `viewBox` for proper scaling (24x24 is standard) - Don't include `width` or `height` attributes - Use `currentColor` for theme-aware icons - Keep SVGs optimized and simple ### 3. Use Immediately ```vue ``` No imports needed - icons are auto-discovered! ## Icon Guidelines ### Naming Conventions - **Files**: `kebab-case.svg` (workflow-icon.svg) - **Usage**: `` ### Size & Styling ```vue ``` ### Theme Compatibility Always use `currentColor` in SVGs for automatic theme adaptation: ```xml ``` ## Migration Guide ### From PrimeIcons to Iconify/Custom ```vue ``` ### From Inline SVG to Custom Icon ```vue ``` ## Technical Details ### Auto-Import System Icons are automatically imported using `unplugin-icons` - no manual imports needed! Just use the icon component directly. ### Configuration The icon system has two layers: 1. **Build-time Processing** (`packages/design-system/src/iconCollection.ts`): - Scans `packages/design-system/src/icons/` for SVG files - Validates SVG content and structure - Creates Iconify collection for Tailwind CSS - Provides error handling for malformed files 2. **Vite Runtime** (`vite.config.mts`): - Enables direct SVG import as Vue components - Supports dynamic icon loading ```typescript // Build script creates Iconify collection export const iconCollection: IconifyCollection = { prefix: 'comfy', icons: { 'workflow': { body: '...' }, 'node': { body: '...' } } } // Vite configuration for component-based usage Icons({ compiler: 'vue3', customCollections: { comfy: FileSystemIconLoader('packages/design-system/src/icons') } }) ``` ### TypeScript Support Icons are fully typed. If TypeScript doesn't recognize a new custom icon: 1. Restart the dev server 2. Ensure the SVG file is valid 3. Check filename follows kebab-case ## Troubleshooting ### Icon Not Showing 1. **Check filename**: Must be kebab-case without special characters 2. **Restart dev server**: Required after adding new icons 3. **Verify SVG**: Ensure it's valid SVG syntax (build script validates automatically) 4. **Check console**: Look for Vue component resolution errors 5. **Build script errors**: Check console during build - malformed SVGs are logged but don't break builds ### Icon Wrong Color - Replace hardcoded colors with `currentColor` - Use `stroke="currentColor"` for outlines - Use `fill="currentColor"` for filled shapes ### Icon Wrong Size - Remove `width` and `height` from SVG - Ensure `viewBox` is present - Use CSS classes for sizing: `class="w-6 h-6"` ## Best Practices 1. **Optimize SVGs**: Use tools like [SVGO](https://jakearchibald.github.io/svgomg/) to minimize file size 2. **Consistent viewBox**: Stick to 24x24 or 16x16 for consistency 3. **Semantic names**: Use descriptive names like `workflow-duplicate` not `icon1` 4. **Theme support**: Always use `currentColor` for adaptable icons 5. **Test both themes**: Verify icons look good in light and dark modes ## Adding Icon Collections To add an entire icon set from npm: 1. Install the icon package 2. Configure in `vite.config.mts` 3. Use with the appropriate prefix See the [unplugin-icons documentation](https://github.com/unplugin/unplugin-icons) for details. ## Resources - [PrimeIcons List](https://primevue.org/icons/#list) - [Iconify Icon Browser](https://icon-sets.iconify.design/) - [Lucide Icons](https://lucide.dev/icons/) - [unplugin-icons docs](https://github.com/unplugin/unplugin-icons)