Image2Asset Development Assistant
This skill helps you work with the Image2Asset codebase, a Next.js 14 application that converts images to 3D models through a multi-step AI pipeline.
What This Skill Does
Provides context-aware assistance for developing, debugging, and extending Image2Asset, including understanding the three-tier architecture, service integrations, and asset processing pipeline.
Instructions
When working with the Image2Asset codebase:
1. Architecture Understanding
The application follows a three-tier structure:
**Client Layer** (`/app`, `/components`)
App Router pages in `/app/page.tsx` (main pipeline) and `/app/gallery/page.tsx`Pipeline components in `components/pipeline/`: ImageGenStep, BackgroundRemovalStep, Convert3DStep, BulkProcessorGallery components in `components/gallery/` for asset managementUI components in `components/ui/` including ModelViewer (Three.js/React Three Fiber)**API Layer** (`/app/api`)
`/api/generate` - Google Gemini image generation`/api/remove-bg` - Bria background removal via Fal.ai`/api/convert-3d` - Trellis 2D-to-3D conversion via Fal.ai`/api/enhance` - Gemini image enhancement`/api/bulk` - Batch processing with concurrency control`/api/jobs` - Job status tracking`/api/assets` - Asset CRUD and upload operations**Service Layer** (`/lib/services`)
`BaseService` - Abstract class providing retry logic, timeout handling, and progress callbacks`GeminiService`, `BriaService`, `TrellisService` - Service implementations extending BaseService**Storage Layer** (`/lib/storage`)
`assets.ts` - Manages asset registry (`/data/assets.json`) and file operations`jobs.ts` - Tracks jobs (`/data/jobs.json`) with parent-child relationships2. Data Storage Locations
`/public/assets/generated/` - AI-generated images`/public/assets/no-bg/` - Background-removed images`/public/assets/uploads/` - User-uploaded images`/models/` - GLB 3D model files`/data/` - JSON registries (created at runtime)3. Configuration
The `config.json` file controls:
Service settings (Gemini model, Trellis texture size/mesh simplification)Bulk processing (concurrency limits, retry attempts)Storage pathsConfiguration is validated using Zod schemas in `/lib/config/`.
4. Key Development Patterns
**Path alias**: `@/*` resolves to project root**Retry logic**: All service calls use exponential backoff (configurable attempts)**Asset lineage**: Track relationships: source → no-bg → 3D model**Progress callbacks**: Real-time UI updates during async operations**Data URL conversion**: Local URLs converted to data URLs for Fal.ai API compatibility5. Development Commands
```bash
npm run dev # Start development server on port 3000
npm run build # Create production build
npm run lint # Run ESLint via Next.js
npm start # Start production server
```
6. Environment Setup
Required environment variables in `.env.local`:
`GEMINI_API_KEY` - Google Gemini API key for image generation/enhancement`FAL_KEY` - Fal.ai API key for Bria (background removal) and Trellis (3D conversion)7. Working with Services
When modifying or debugging services:
All services extend `BaseService` which provides consistent error handling and retry logicServices accept progress callbacks for real-time status updatesConfiguration in `config.json` affects service behavior (timeouts, model parameters)Fal.ai services require data URLs, not file paths8. Asset Management
When working with assets:
Assets are tracked in `/data/assets.json` with relationships preservedFile operations go through `lib/storage/assets.ts`Use `getAssetPath()` and `getModelPath()` helpers for consistent path resolutionAsset types: 'generated', 'no-bg', 'upload', 'model'9. Job Tracking
For async operations:
Jobs tracked in `/data/jobs.json` with status, progress, and error informationParent-child relationships for bulk processingJob statuses: 'pending', 'processing', 'completed', 'failed'Access via `/api/jobs` endpointsExamples
**Example 1: Adding a new AI service**
When adding a new AI service integration, extend `BaseService` in `/lib/services/`, implement required methods with retry logic, add API endpoint in `/app/api/`, and update configuration schema.
**Example 2: Debugging pipeline failures**
Check job status via `/api/jobs`, review service logs for retry attempts, verify API keys in `.env.local`, check `config.json` for timeout/retry settings, and ensure asset paths exist.
**Example 3: Extending the UI**
New pipeline steps go in `components/pipeline/`, use progress callbacks for real-time updates, integrate with appropriate `/app/api/` endpoint, and update asset registry through storage layer.
Constraints
Always use the storage layer (`lib/storage/*`) for file operations and registry updatesRespect concurrency limits defined in `config.json` for bulk operationsConvert local file paths to data URLs when calling Fal.ai servicesMaintain asset lineage relationships when creating derived assetsUse TypeScript path alias `@/*` for importsFollow existing retry/timeout patterns from `BaseService`