Procedural Vector Wallpaper Generator
AuraWall is a client-side web application that generates abstract, high-resolution wallpapers using procedural algorithms and vector graphics. Unlike AI-based generators, AuraWall creates deterministic, mathematically harmonious images that are infinitely scalable and lightweight.
- Overview
- Features
- Technology Stack
- Installation
- Usage
- Project Structure
- Customization
- Contributing
- License
AuraWall operates entirely in the browser with zero server dependencies. The application uses a JSON-based configuration system (WallpaperConfig) that describes shapes, colors, filters, and animations. This configuration is rendered reactively as SVG, then rasterized via Canvas API for export.
- Deterministic Generation: Same seed produces identical output every time
- Vector-First: All rendering happens in SVG until final export
- Procedural Intelligence: Curated randomness ensures aesthetic consistency
- Zero Dependencies: No backend, no AI APIs, no external services
| Engine | Aesthetic | Characteristics |
|---|---|---|
| Boreal | Ethereal, soft | High blur, analogous colors, multiply/screen blend modes |
| Chroma | Liquid, acidic | Low blur, complementary colors, difference/exclusion blend modes |
| Lava | Psychedelic, warm | Retro fluid motion, warm palettes, blob shapes |
| Midnight | Cosmic, deep | Dark backgrounds, nebula clouds, star particles |
| Geometrica | Bauhaus, grid | Strict grid alignment, primary colors, sharp shapes |
| Glitch | Digital chaos | RGB split (chromatic aberration), artifacts, digital noise |
| Sakura | Floral, gentle | Pastel pinks, petal shapes, wind simulation |
| Ember | Fire, ash | Dark coals, bright orange sparks, rising smoke |
| Oceanic | Aquatic, deep | Deep blues, organic fluid motion, underwater feel |
| Animation | Kinetic, flowing | CSS keyframe animations for drift, pulse, rotate, noise |
- Shape Management: Add, remove, and configure individual layers
- Color Science: Base gradients, hue constraints, harmonic selection
- Color Palette Extractor: Extract and copy the exact hex codes used in the composition
- Post-Processing: Vignette effect, procedural grain, blur intensity
- Motion Physics: Animation speed, flow direction, turbulence
- Zen Mode: Hide the UI for an immersive digital frame experience
| Format | Use Case |
|---|---|
| PNG | Lossless, transparent background support |
| JPG | Smaller file size, configurable quality |
| SVG | Vector source for editing in Illustrator/Figma |
- Desktop: 1920x1080, 2560x1440, 3840x2160 (4K)
- Mobile: iPhone, Android, iPad
- Custom: Any aspect ratio
| Category | Technology |
|---|---|
| Core | React 19, TypeScript |
| Build | Vite 6, PostCSS |
| Styling | Tailwind CSS v4 |
| Graphics | Native SVG DOM, Canvas API |
| i18n | i18next (8 languages) |
| Testing | Vitest, Playwright |
- Node.js 18 or higher (Node.js 20+ recommended)
- npm or yarn
# Clone the repository
git clone https://github.com/mafhper/aurawall.git
cd aurawall
# Install dependencies
npm install
# Start development server (Main App + Promo Site concurrently)
npm run dev
# OR start them individually:
# Main Application
npm run app
# Promotional Website
npm run promoThe application will be available at http://localhost:5173.
# Build both applications
npm run build
# Build main application only
npm run build-app
# Build promotional website only
npm run build-promo
# Preview production build
npm run previewAuraWall includes a comprehensive suite of scripts to ensure code quality, performance, and stability.
npm run health: Full system check (clean, install, build, test).npm run health:fast: Quick check (build validation + lint/structure tests).
npm run test:lint: Run ESLint static analysis.npm run test:structure: Verify file/folder structure integrity.npm run test:i18n: Validate translation keys parity.npm run test:contrast: Check color contrast compliance (WCAG AA).
npm run audit: Run Lighthouse audits on both App and Promo site.npm run perf:analyze: Analyze performance trends from reports.
See scripts/README.md for detailed documentation on automation scripts.
- Open the application in your browser
- Select a generation engine (Boreal or Chroma)
- Adjust parameters using the control panel
- Click "Generate" or use the randomizer
- Export in your preferred format and resolution
Configurations can be shared via URL. The application uses lz-string compression to encode the entire WallpaperConfig object into a shareable link.
https://aurawall.com/app/?config=N4IgDgTg...
Access the gallery to browse curated presets. Each preset can be:
- Downloaded directly as PNG (1920x1080)
- Opened in the editor for customization
- Used as a starting point for new creations
aurawall/
├── src/ # Main application source
│ ├── components/ # React components
│ │ ├── WallpaperRenderer.tsx # Core SVG renderer
│ │ ├── ControlPanel/ # UI controls
│ │ └── ExportModal.tsx # Export functionality
│ ├── services/ # Business logic
│ │ ├── svgGenerator.ts # Procedural generation
│ │ ├── colorService.ts # Color harmony algorithms
│ │ └── variationService.ts # Preset variations
│ ├── constants.ts # Presets and defaults
│ ├── types.ts # TypeScript definitions
│ └── App.tsx # Application root
│
├── website/ # Promotional site (separate build)
│ ├── src/
│ │ ├── pages/ # Landing, Gallery, About, etc.
│ │ ├── components/ # Site-specific components
│ │ └── i18n.ts # Translations
│ └── vite.config.ts # Site build configuration
│
├── public/ # Static assets
│ ├── icon.svg # Application icon
│ ├── og-image.png # Social sharing image
│ └── bg-*.svg # Background textures
│
├── _desenvolvimento/ # Internal documentation (Portuguese)
│ └── docs/ # Technical guides
│
├── vite.config.ts # Main app build configuration
├── tailwind.config.js # Tailwind CSS configuration
└── package.json # Dependencies and scripts
Presets are defined in src/constants.ts:
export const PRESETS: Preset[] = [
{
id: 'my-preset',
name: 'My Custom Preset',
collection: 'boreal', // or 'chroma'
config: {
baseColor: '#1a0a2e',
shapes: [...],
animation: { enabled: true, speed: 2 },
// ...
}
}
];Engines are now modular and defined in src/engines/. To create a new engine:
- Create a new file (e.g.,
src/engines/myEngine.ts) implementing theEngineDefinitioninterface. - Define metadata, default configuration, and a
randomizerfunction. - Register the engine in
src/engines/index.ts.
// src/engines/myEngine.ts
export const myEngine: EngineDefinition = {
id: 'my-engine',
meta: { name: 'My Engine', ... },
randomizer: (config) => { ... },
variations: [ ... ]
};The promotional website is a separate Vite project in /website. It shares components from the main application:
// Import from main app
import WallpaperRenderer from '../../../src/components/WallpaperRenderer';
import { PRESETS } from '../../../src/constants';- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -m 'Add your feature' - Push to branch:
git push origin feature/your-feature - Open a Pull Request
- Follow existing code style and patterns
- Add translations for any user-facing text
- Test across multiple browsers
- Update documentation as needed
MIT License - See LICENSE file for details.
Author: @mafhper
Repository: github.com/mafhper/aurawall
