Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Set up iterative design-to-code development loop with Anima SDK. Use when rapidly iterating on Figma-to-code output, comparing framework outputs, or building a local preview server for generated components. Trigger: "anima local dev", "anima dev loop", "anima preview", "anima iteration".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 4% | 0% |
Iterative development workflow for Anima design-to-code: generate from Figma, preview in browser, tweak settings, regenerate. Includes side-by-side comparison of React vs Vue vs HTML output.
bashmkdir anima-dev && cd anima-dev npm init -y npm install @animaapp/anima-sdk dotenv npm install -D vite @vitejs/plugin-react typescript
typescript// scripts/generate-preview.ts import { Anima } from '@animaapp/anima-sdk'; import fs from 'fs'; import 'dotenv/config'; const anima = new Anima({ auth: { token: process.env.ANIMA_TOKEN! } }); const SETTINGS_PRESETS = { 'react-tailwind': { language: 'typescript' as const, framework: 'react' as const, styling: 'tailwind' as const }, 'react-shadcn': { language: 'typescript' as const, framework: 'react' as const, styling: 'tailwind' as const, uiLibrary: 'shadcn' as const }, 'vue-tailwind': { language: 'typescript' as const, framework: 'vue' as const, styling: 'tailwind' as const }, 'html-css': { language: 'javascript' as const, framework: 'html' as const, styling: 'css' as const }, }; async function generateWithPreset(preset: keyof typeof SETTINGS_PRESETS, nodeId: string) { const settings = SETTINGS_PRESETS[preset]; const outputDir = `./generated/${preset}`; fs.mkdirSync(outputDir, { recursive: true }); const { files } = await anima.generateCode({ fileKey: process.env.FIGMA_FILE_KEY!, figmaToken: process.env.FIGMA_TOKEN!, nodesId: [nodeId], settings, }); for (const file of files) { fs.writeFileSync(`${outputDir}/${file.fileName}`, file.content); } console.log(`${preset}: ${files.length} files generated`); } // Compare all presets async function compareOutputs(nodeId: string) { for (const preset of Object.keys(SETTINGS_PRESETS) as Array<keyof typeof SETTINGS_PRESETS>) { await generateWithPreset(preset, nodeId); await new Promise(r => setTimeout(r, 2000)); // Rate limit } console.log('\nAll presets generated in ./generated/'); } const nodeId = process.argv[2] || '1:2'; compareOutputs(nodeId).catch(console.error);
json{ "scripts": { "generate": "tsx scripts/generate-preview.ts", "generate:node": "tsx scripts/generate-preview.ts", "preview": "vite", "dev": "npm run generate && npm run preview" } }
| Error | Cause | Solution | |-------|-------|----------| | Rate limited | Too many generations | Add 2s delay between calls | | Different outputs each run | Anima AI variation | Pin settings; use consistent node IDs |
For SDK patterns and best practices, see anima-sdk-patterns.
Other measured skills in the registry, with their headline benchmark lift.