- Add case 'v' to node creation hotkeys in WorkflowCanvas
- Creates generateVideo node at viewport center
- Update CLAUDE.md documentation with new shortcut
- Add ModelSearchDialog renders for image and video model selection
- Dialogs use onModelSelected callback to update local state
- Image dialog uses initialCapabilityFilter='image'
- Video dialog uses initialCapabilityFilter='video'
- Selected models are stored with provider, modelId, and displayName
- Add third tab 'Node Defaults' after Project and Providers
- Add NodeDefaultsConfig state and load/save on modal open/close
- Create UI sections for GenerateImage, GenerateVideo, and LLM defaults
- GenerateImage/Video sections show selected model or system default
- LLM section has provider/model dropdowns and temperature slider
- Clear buttons allow resetting each section to undefined
- Import provider icons and helper types from existing modules
Enable storing default model and settings per node type in localStorage.
New nodes created via shortcuts will use these stored preferences.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change categories from product/style/composition to simple/advanced
- Add provider filter to sidebar (currently shows Gemini)
- Display provider tags on template cards
- Update tests for new category structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace model image with new model.png for the Model + Product template,
update the Style Transfer prompt to watercolor children's book style.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Resize workflow screenshot thumbnails from 1024px to 288px
- Create resized primary thumbnails (288px) from large sample images
- Use static paths instead of dynamic content lookup
- 288px = 2x retina for 144px display
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change thumbnail from 160x112 to 144x144 (square)
- Use object-contain instead of object-cover to prevent cropping/distortion
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add template thumbnails to public/template-thumbnails/
- Add hover images for model-product and style-transfer templates
- Update TemplateCard to support hover image with opacity transition
- Replace street-scene.jpg with new-bg-model-product.png in model-product
- Replace house-lake.jpg with style-transfer-reference.png in style-transfer
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Increase dialog max-width from 4xl to 6xl
- Increase max-height from 80vh to 85vh
- Change card layout to two-column grid
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace WorkflowPreview component with actual template screenshot image
- Remove unused presetWorkflows memo from TemplateExplorerView
- Pass previewImage prop instead of workflow to TemplateDetailModal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- TemplateDetailModal: full details view with description, workflow preview,
metadata, and "Use this workflow" button
- TemplateCard: simplified - removed preview icon and tags row,
card click now opens detail modal
- TemplateExplorerView: wired up new flow where card opens detail modal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace solid colored boxes with outlined nodes
- Add labels inside each node (Image Input, Prompt, etc.)
- Show model name for generate nodes (Gemini Pro, etc.)
- Use smoothstep edges for visible connections
- Simplify modal by removing redundant legend
- Restore image thumbnails as main preview in TemplateCard
- Add small icon button in top right to trigger workflow preview
- Create WorkflowPreviewModal for larger preview display
- Fix WorkflowPreview to properly show all nodes with fitView
- Add legend showing node type colors in modal
- Replace static previewImage with workflow prop in TemplateCard
- Render WorkflowPreview showing node layout and connections
- Remove getTemplateContent import (no longer needed)
- Pass workflow data from PRESET_TEMPLATES to cards
Phase 26: Template Preview Rendering
- 1 plan created
- 3 tasks defined (2 auto + 1 human-verify)
- Ready for execution
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- overflow-hidden creates a scroll container that captures wheel events
- overflow-clip just clips visually without capturing events
- Applied to both modal container and content wrapper
- Add min-h-0 to flex containers to allow shrinking below content size
- Add flex-shrink-0 to header to prevent it from shrinking
- This fixes flexbox default min-height: auto preventing overflow scroll
- Remove carousel animation, use single static preview image
- Simplify TemplateCard props from previewImages[] to previewImage
- Ready for future GIF replacement
- Replace QuickstartTemplatesView with TemplateExplorerView
- Widen modal from max-w-3xl to max-w-4xl for sidebar layout
- Add max-h-[80vh] constraint for overflow handling
- Add search input with 200ms debounce for filtering by name/description
- Add category filter buttons (All, Product, Style, Composition, Community)
- Add tag pill buttons with multi-select OR logic
- Implement filtering logic: search AND category AND tags
- Add empty state with clear filters button
- Restructure layout: sidebar (w-48) + main grid area
- Update createPredictedCost helper for new breakdown format with provider, modelId, unit fields
- Add createMultiProviderCost helper for testing multi-provider scenarios (Gemini, fal.ai, Replicate)
- Add test cases for Known Costs section with provider grouping
- Add test cases for Pricing Unavailable section with Replicate models
- Add test cases for billing units (per image, per 5 seconds, etc.)
- Add test for Replicate help text with external link
- Add test for empty sections being hidden
- Add test for incurred cost tracking note
- Update Pricing Reference tests for new dynamic format
- All existing functionality tests preserved (close, reset, escape key)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Redesign CostDialog to show provider-grouped cost information
- Add two-section layout: Known Costs (Gemini, fal.ai) and Pricing Unavailable (Replicate)
- Add ProviderIcon component with colored dots for each provider
- Group breakdown items by provider with provider headers
- Show billing units (per image, per video, per second) for each model
- Add Replicate help text with link to replicate.com
- Update Incurred Cost section with note "Tracks Gemini and fal.ai only"
- Hide empty sections dynamically
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add SelectedModelPricing interface to providers.ts
- Update SelectedModel type with optional pricing field
- Track fal.ai costs in nanoBanana execution and regeneration
- Track fal.ai costs in generateVideo execution and regeneration
- Skip cost tracking for Replicate (no pricing API available)
- Gemini continues to use hardcoded pricing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Grid layout with 2 columns on mobile, 3 on larger screens
- Uses TemplateCard for preset templates with metadata
- Community workflows section with custom cards
- Loads presets from getAllPresets() with node count calculation
- Fetches community workflows from /api/community-workflows
- Template selection via /api/quickstart POST and community API
- Loading states per template, error handling with dismissible alert
- Discord CTA for community contributions
- Update test data to use new multi-provider interface fields
- Add test for unknown pricing indicator
- Remove resolution-specific test that no longer applies
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Card layout with 48x48 icon area
- Template name and 2-line description with line-clamp
- Node count badge and category badge with color coding
- Tag pills display (max 4 shown)
- Loading state with spinner animation
- Disabled state with reduced opacity
- Hover states for interactive feedback
- Update calculatePredictedCost to produce CostBreakdownItem[] format
- Add unknownPricingCount to return value (was missing)
- CostDialog already using modelName property
- Add TemplateMetadata interface with nodeCount, category, tags, previewImage
- Add TemplateCategory type (product, style, composition, community)
- Update PresetTemplate interface with category and tags fields
- Add category and tags to all 6 preset templates
- Add getTemplateMetadata() to extract node count from workflow
- Add getPresetWithMetadata() to get template with full metadata
- Update getAllPresets() to include category and tags in return type
Phase 25: Template Explorer UI
- 2 plans created
- 5 total tasks defined
- Ready for execution
Plan 01: Template types, TemplateCard, grid layout (3 tasks)
Plan 02: Sidebar filters, WelcomeModal integration (2 tasks + checkpoint)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>