Skip to content

Pankaj-Meharchandani/Waller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

366 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Waller

Beautiful gradient wallpapers for Android β€” generated, previewed, and applied in seconds.

Β  Β  Β 

Β 




✦ Table of Contents


✦ Highlights

🎨 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

✦ Features

Wallpaper Generation

  • 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.

Marketplace & Community

  • 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.

Live Wallpaper

  • 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.

Effects

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.

Advanced Preview Overlay

  • 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.

Favourites

  • 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 .wall files or bulk-import multiple at once.
  • Export all favourites as a single .wall file to share or back up.

Apply & Share

  • Apply to Home screen, Lock screen, or Both.
  • Download as PNG to Pictures/Waller via MediaStore.
  • Share as PNG bitmap, .wall file, SVG, or CSS.
  • SVG export mirrors BitmapUtils rendering math exactly (gradient anchoring, stripe pattern, noise filter, base64 overlays).
  • CSS export produces ready-to-use classes with linear-gradient / conic-gradient / radial-gradient and filter: blur() β€” paste straight into a project.

✦ Download

Β 

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.


✦ Getting Started

git clone https://github.com/Pankaj-Meharchandani/Waller.git
cd Waller

Open in Android Studio (Koala or newer), let Gradle sync, then run on a device or emulator.

Or from the command line:

./gradlew assembleDebug
./gradlew installDebug

Tip: To open a .wall file from a file manager or another app, just tap it β€” Waller registers itself as a handler for application/octet-stream via 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

✦ Permissions

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.


✦ How It Works

Color Generation

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.

Bitmap Rendering (BitmapUtils.kt)

When applying or downloading, createGradientBitmap() draws into an Android Canvas in layer order using drawWallpaperOnCanvas():

  1. Gradient β€” LinearGradient, RadialGradient, SweepGradient, or Pastels (Abstract rendering) via drawRect.
  2. Effects β€” Iterates through EffectMap and applies overlays based on WallpaperEffects registry.
  3. Snow β€” random white circles at ~2% pixel density with randomized alpha.
  4. Stripes β€” canvas rotated βˆ’45Β°, soft-fade gradient rects at width/12 spacing.
  5. Glass overlay β€” overlay_stripes.png scaled to canvas with per-alpha Paint.
  6. Geometric overlay β€” overlay_geometric.png scaled to width with per-alpha Paint.
  7. Blur β€” pure-Kotlin Stack Blur (stackBlur()), radius 1–25 px scaled by blurAlpha. Applied last so it affects the fully composited image.

Compose Preview Rendering

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 & .wall File Format

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.


✦ Key Files / Structure

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

✦ Adding a New Effect

The architecture uses a Single Source of Truth registry in WallpaperModels.kt. To add a new effect:

  1. Register: Add an EffectDef to WallpaperEffects.ALL in WallpaperModels.kt.
  2. Render: Add the drawing logic in BitmapUtils.kt (for Bitmaps) and PreviewWallpaperRender.kt (for Compose Preview).

That's it. The UI chips, sliders, and serialization will automatically adapt to the new effect.


✦ Troubleshooting

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.


✦ Contributing

Contributions are welcome!

  1. Fork the repo and create a feature branch: git checkout -b feat/my-feature
  2. Commit with a clear message: git commit -m "Add my feature"
  3. Push and open a pull request.

Please keep both rendering paths (Compose + Android Canvas) in sync when touching effect logic.


✦ Community


✦ License

This project is licensed under the GPL License. See the LICENSE file for details.


Made with β™₯ by Pankaj Meharchandani

About

Generate and set stunning gradient wallpapers on your Android device with Waller. Easily customize your home and lock screens with a variety of vibrant backgrounds.

Topics

Resources

License

Stars

105 stars

Watchers

2 watching

Forks

Packages

 
 
 

Contributors

Languages