Beautiful gradient wallpapers for Android β generated, previewed, and applied in seconds.
- Highlights
- Features
- Download
- Getting Started
- Permissions
- How It Works
- Key Files / Structure
- Adding a New Effect
- Troubleshooting
- Contributing
- Community
- License
| π¨ 5 Gradient Styles | Linear, Radial, Angular, Diamond, Pastels β each with unique rendering logic |
| β¨ 5 Visual Effects | Snow, Stripes, Glass overlay, Geometric grid, Blur β each with individual opacity |
| π Marketplace | Browse and download community-generated wallpapers |
| π Live Wallpaper | Set any of your favourites as an animated live wallpaper |
| π Live Preview Mode | Fullscreen overlay to tweak style, angle & effects before applying |
| β€οΈ Favourites | Snapshot any wallpaper including exact effects & alphas; import/export as .wall |
| π€ Share Anywhere | Export as PNG, .wall, SVG, or production-ready CSS |
| π Two Interaction Modes | Simple (tap β apply) or Advanced (tap β live preview) |
| π Beta Channel | Optional toggle in settings to receive pre-release update notifications |
| π Material You | Dynamic color, floating nav bar, animated chips, spring physics |
- Generate grids of 12, 16, or 20 wallpapers per refresh.
- Portrait (9:16) and Landscape (16:9) preview and bitmap output.
- Select up to 5 custom colors via HSV picker, or let the app generate random palettes.
- Three tone modes: Dark, Neutral, Light β applied during color generation and shading.
- Multi-color mode produces 3β5 stop gradients.
- Beta Updates: Optional toggle in settings to receive notifications for pre-release and beta versions.
- Toggle any combination of gradient types per session.
- Browse & Discovery: Access a curated feed of wallpapers from the community Telegram channel.
- Instant Preview: Tap any marketplace item to preview it with your current effects.
- Download & Share: Save community creations directly to your device or share them with others.
- Animated Backgrounds: Set any favourite wallpaper as a live wallpaper.
- Smooth Transitions: Experience subtle animations and transitions as you interact with your device.
- Battery Efficient: Optimized rendering to ensure minimal battery impact.
| Effect | Description |
|---|---|
| βοΈ Snow | Film-grain-style random white specks |
| γ°οΈ Stripes | Diagonal translucent stripe pattern |
| πͺ Glass | Nothing-style subtle glass overlay |
| π² Geometric | Grid and circle line overlay |
| π§ Blur | Full-image Stack Blur β pure Kotlin, no RenderScript |
Each effect has a 0β100% opacity slider in Advanced mode. Effects are snapshotted with favourites so the saved look is reproduced exactly on any device.
- Fullscreen wallpaper render in a device-frame style box.
- Switch gradient style and drag the angle slider without leaving the preview.
- Angle slider snaps to 90Β° increments with haptic feedback.
- Per-effect chips with a fill-progress bar showing current alpha.
- Heart button inside preview to favourite the current configuration.
- Done opens the apply/download dialog directly from the overlay.
- Heart any wallpaper from the grid or inside the preview.
- Favourites store the exact effect flags and opacities at save time.
- Reverse-chronological grid; supports portrait/landscape toggle.
- Import individual
.wallfiles or bulk-import multiple at once. - Export all favourites as a single
.wallfile to share or back up.
- Apply to Home screen, Lock screen, or Both.
- Download as PNG to
Pictures/Wallervia MediaStore. - Share as PNG bitmap,
.wallfile, SVG, or CSS. - SVG export mirrors
BitmapUtilsrendering math exactly (gradient anchoring, stripe pattern, noise filter, base64 overlays). - CSS export produces ready-to-use classes with
linear-gradient/conic-gradient/radial-gradientandfilter: blur()β paste straight into a project.
Grab the latest .apk from the Releases page. Pre-releases are clearly labelled β beta builds often ship new effects or UI experiments ahead of the stable channel.
git clone https://github.com/Pankaj-Meharchandani/Waller.git
cd WallerOpen in Android Studio (Koala or newer), let Gradle sync, then run on a device or emulator.
Or from the command line:
./gradlew assembleDebug
./gradlew installDebugTip: To open a
.wallfile from a file manager or another app, just tap it β Waller registers itself as a handler forapplication/octet-streamvia an intent filter in the manifest.
Requirements:
- Android Studio Koala or newer
- Kotlin (matching the project Kotlin version)
- Jetpack Compose with Material3
- Min SDK API 30 (Android 11.0) Β· Tested on Android 11β15
- Blur preview requires API 31+ and degrades gracefully on older devices
| Permission | When required |
|---|---|
SET_WALLPAPER |
Normal permission, no runtime prompt needed |
INTERNET |
Marketplace and Update checker |
The app uses MediaStore with RELATIVE_PATH and IS_PENDING β no storage permission required. Lock-screen wallpaper (WallpaperManager.FLAG_LOCK) works on API 24+; behavior on some OEM skins (MIUI, One UI) may vary.
ColorUtils.kt works in HSV space to apply tone-biased generation. generateRandomColor(toneMode) clamps the value (brightness) channel to a range matching the selected tone. createShade(color, toneMode, subtle) produces close variations with small hue/saturation/value deltas β making palette pairs feel cohesive rather than arbitrary.
When applying or downloading, createGradientBitmap() draws into an Android Canvas in layer order using drawWallpaperOnCanvas():
- Gradient β
LinearGradient,RadialGradient,SweepGradient, or Pastels (Abstract rendering) viadrawRect. - Effects β Iterates through
EffectMapand applies overlays based onWallpaperEffectsregistry. - Snow β random white circles at ~2% pixel density with randomized alpha.
- Stripes β canvas rotated β45Β°, soft-fade gradient rects at
width/12spacing. - Glass overlay β
overlay_stripes.pngscaled to canvas with per-alphaPaint. - Geometric overlay β
overlay_geometric.pngscaled to width with per-alphaPaint. - Blur β pure-Kotlin Stack Blur (
stackBlur()), radius 1β25 px scaled byblurAlpha. Applied last so it affects the fully composited image.
WallpaperItemCard and PreviewWallpaperRender mirror the same pipeline using Compose Brush, Canvas drawscope, and Image composables. Angular gradients use a SweepGradient shader drawn via nativeCanvas since Compose's sweep brush doesn't support rotation. Blur uses RenderEffect.createBlurEffect() (API 31+) on a graphicsLayer wrapping only the gradient/effects β keeping the bottom type/color tag sharp outside the blur group.
Favourites are stored as snapshots of Wallpaper and EffectMap. The .wall file is a JSON representation produced by kotlinx.serialization, allowing for easy sharing and backup of wallpaper configurations.
data/
βββ network/
βββ TelegramScraper.kt # Ktor-based scraper for marketplace items
βββ TelegramMarketplaceService.kt # Service for marketplace data
ui/
βββ WallerApp.kt # Root composable, global state, navigation
βββ marketplace/
β βββ MarketplaceScreen.kt # Community marketplace UI
βββ wallpaper/
β βββ WallpaperModels.kt # Single source of truth for Effects & Gradients
β βββ WallpaperGeneratorScreen.kt # Home screen grid & generator
β βββ FavoritesScreen.kt # Favourites management
β βββ BitmapUtils.kt # Core bitmap rendering & Stack Blur
β βββ ColorUtils.kt # HSV color generation logic
β βββ LiveWallpaperService.kt # Live Wallpaper engine
β βββ ShareUtils.kt # PNG / SVG / CSS export helpers
β βββ components/
β βββ WallpaperItemCard.kt # Grid preview (Compose Canvas)
β βββ previewOverlay/
β βββ WallpaperPreviewOverlay.kt # Fullscreen preview & controls
β βββ PreviewWallpaperRender.kt # Stateless preview renderer
βββ wallfile/
β βββ WallFileManager.kt # .wall file I/O
β βββ SvgExporter.kt # SVG and CSS generation
βββ settings/
βββ SettingsScreen.kt # App configuration
The architecture uses a Single Source of Truth registry in WallpaperModels.kt. To add a new effect:
- Register: Add an
EffectDeftoWallpaperEffects.ALLinWallpaperModels.kt. - Render: Add the drawing logic in
BitmapUtils.kt(for Bitmaps) andPreviewWallpaperRender.kt(for Compose Preview).
That's it. The UI chips, sliders, and serialization will automatically adapt to the new effect.
Blur preview not visible Requires API 31+ for live Compose blur. On older devices, the blur is still applied to the final saved/applied wallpaper via the Kotlin Stack Blur implementation.
Lock screen apply issues Some OEMs (MIUI, One UI) restrict programmatic lock-screen changes. If the apply fails, try setting the downloaded PNG manually via system settings.
Marketplace not loading Requires an active internet connection. If the channel is unreachable, the marketplace will show a connection error.
Contributions are welcome!
- Fork the repo and create a feature branch:
git checkout -b feat/my-feature - Commit with a clear message:
git commit -m "Add my feature" - Push and open a pull request.
Please keep both rendering paths (Compose + Android Canvas) in sync when touching effect logic.
This project is licensed under the GPL License. See the LICENSE file for details.
Made with β₯ by Pankaj Meharchandani












