dorkhub

Waller

Generate and set stunning gradient wallpapers on your Android device with Waller. Easily customize your home and lock s…

Pankaj-Meharchandani
Kotlin1066 forksGPL-3.0updated 1 week ago
git clone https://github.com/Pankaj-Meharchandani/Waller.gitPankaj-Meharchandani/Waller

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
🕒 History Automatically track and re-apply the last 50 wallpapers you've used
📤 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 & History

  • Favourites: Heart any wallpaper from the grid or inside the preview. Stores exact effect flags and opacities.
  • History: Automatically tracks the last 50 wallpapers you've applied. Supports re-applying or previewing with one tap.
  • Default Tab Setting: Choose whether the 2nd navigation item opens Favourites or History by default.
  • Import/Export: Import individual .wall files or bulk-import multiple at once. Export all favourites as a single .wall file.

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. GradientLinearGradient, 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 overlayoverlay_stripes.png scaled to canvas with per-alpha Paint.
  6. Geometric overlayoverlay_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

more like this

DailyWallpaperHub

多源壁纸聚合平台 · 自动归档 Bing + Unsplash 精选壁纸 · AI 视觉故事生成 · 企业微信推送 · GitHub Pages 在线画廊

Python50

search

search projects, people, and tags