Skip to content

Latest commit

 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WallBrand

A wallpaper branding tool with GUI and CLI modes

Screenshot

License Language Type Version

A wallpaper branding tool with GUI and CLI modes. Add logos, watermarks, and text overlays to wallpapers for corporate branding, digital signage, or personal customization.

Features

  • GUI Mode — Visual interface for interactive wallpaper branding with live preview
  • CLI Mode — Batch process wallpapers from the command line
  • Logo Placement — Position logos with configurable size, opacity, and corner placement
  • Text Overlays — Add custom text with font, color, and position controls
  • Batch Processing — Brand multiple wallpapers at once
  • Campaign Presets — Save reusable JSON templates with embedded logo and source paths
  • Resolution Matrix — Export one composition to desktop, ultrawide, and mobile targets
  • ICC Color Management — Normalize tagged sources to sRGB and embed a destination profile
  • Deployment Bundles — Package branded images with GPO scripts and ADMX policy definitions
  • Multi-Monitor Preview — Compare per-monitor compositions side by side in the GUI
  • Safe-Zone Snapping — Snap dragged logo and text elements to taskbar/lock-screen safe-zone edges
  • Composition History — Undo and redo GUI changes within the current session
  • Content-Aware Placement — Recommend the lowest-entropy logo corner from a wallpaper
  • SVG and Video Export — Tint/rasterize SVG logos and render MP4 signage sequences through ffmpeg
  • Metadata and Dry Run — Preserve EXIF fields, write copyright tags, and preview planned batch outputs
  • Dark Theme — Professional WPF dark-themed interface

Usage

GUI Mode

.\WallBrandPro.ps1

CLI Mode

.\WallBrandPro.ps1 -CLI -InputPath "C:\Wallpapers" -LogoPath "C:\logo.png"

Batch output defaults to a sibling <input>-branded folder, or can be set explicitly:

.\WallBrandPro.ps1 -CLI -InputPath "C:\Campaign\Incoming" -OutputFolder "C:\Campaign\Branded" -LogoPath "C:\logo.png"
.\WallBrandPro.ps1 -Watch -InputPath "C:\Campaign\Incoming" -OutputFolder "C:\Campaign\Branded" -WatchIntervalSeconds 5

Use -Recursive to include nested folders. Watch mode processes existing and new or changed images until the process is stopped.

Use -OutputTemplate for date- and folder-aware destinations. Supported tokens include {orig}, {name}, {ext}, {YYYY}, {YY}, {MM}, {DD}, {folder}, and {relative}:

.\WallBrandPro.ps1 -CLI -InputPath "C:\Campaign\Incoming" -OutputFolder "C:\Campaign\Branded" -Recursive -OutputTemplate "{YYYY}\{MM}\{relative}\{orig}_branded.{ext}" -DryRun

-DryRun prints the planned outputs without creating files. Use -PreserveMetadata, -ExifCopyright, -ExifArtist, and -ExifDescription to carry supported metadata into rendered JPEG/TIFF outputs.

Content-Aware Logo Placement

Analyze a wallpaper's four corners and print a low-entropy placement recommendation. The result includes the sampled score for every corner:

.\WallBrandPro.ps1 -RecommendLogoPlacement -InputPath "C:\Campaign\hero.jpg"

Set AutoOrientation in JSON, with PortraitPosition and LandscapePosition, to choose different anchors for portrait and landscape outputs. RepeatWatermark: true tiles a logo from the canvas center using RepeatSpacing so crops retain visible branding.

Campaign Presets

Export the current configuration and its referenced logo/source paths as a portable JSON preset, then reuse it for a batch or folder watch:

.\WallBrandPro.ps1 -ConfigPath "C:\Campaign\config.json" -ExportPreset "C:\Campaign\briefing.json"
.\WallBrandPro.ps1 -PresetPath "C:\Campaign\briefing.json" -CLI -InputPath "C:\Campaign\Incoming" -OutputFolder "C:\Campaign\Branded"

Relative asset paths in a preset are resolved from the preset file's folder. The preset contains the full layer configuration and an asset manifest so a campaign can be recreated with one command.

Multi-Resolution Export

Export a preset or source composition to the standard target set, or provide custom targets as Name=WIDTHxHEIGHT:

.\WallBrandPro.ps1 -PresetPath "C:\Campaign\briefing.json" -ExportMatrix 1080p,1440p,2160p,Ultrawide,MobilePortrait -MatrixOutputFolder "C:\Campaign\Exports"
.\WallBrandPro.ps1 -ConfigPath "C:\Campaign\config.json" -InputPath "C:\Campaign\source.jpg" -ExportMatrix Desktop=2560x1440,Mobile=1080x1920

If -MatrixOutputFolder is omitted, outputs go to wallbrand-matrix beside the source image (or in the current folder for a source-less composition).

ICC / Color-Profile-Aware Export

Enable color management in a JSON config with EnableColorManagement: true. Tagged source images are converted to an sRGB working space before compositing; set SourceColorProfilePath for untagged assets and OutputColorProfilePath for a specific destination .icm profile. The CLI switches -ColorManaged, -SourceColorProfilePath, and -OutputColorProfilePath provide the same controls for headless exports.

GPO / ADMX Deployment Bundle

Create a self-contained deployment bundle with desktop and optional lock-screen assets, a logon script, and policy definitions for the DesktopImagePath and LockScreenImagePath values:

.\WallBrandPro.ps1 -ExportDeployment "C:\Campaign\GPO" -DeploymentWallpaperPath "C:\Campaign\desktop.png" -DeploymentLockScreenPath "C:\Campaign\lockscreen.jpg"

The generated Deploy-GPO.ps1 reads the policy values when present and applies the cached images for offline logons. Import WallBrand.admx and its matching en-US\WallBrand.adml into the central store to expose those values in Group Policy.

OU-Specific GPO Package

Use an OU map to render different branding for each organizational unit. Each property value is a configuration override; an OUs wrapper or an array of Name/Config entries is also supported:

{
  "OU=Sales,DC=example,DC=com": { "PrimaryText": "Sales", "FontColor": "FF4444" },
  "OU=Marketing,DC=example,DC=com": { "PrimaryText": "Marketing", "FontColor": "44FF44" }
}
.\WallBrandPro.ps1 -ExportOUPackage "C:\Campaign\OU-Package" -OUInputPath "C:\Campaign\source.png" -OUConfigPath "C:\Campaign\ou.json"

The package contains rendered images under Images, one editable GPO script per OU under GPO, and OU-Deployment.json as the deployment manifest.

Active Setup / RunOnce Package

Generate a one-time wallpaper push for new logons. The package includes the assets, an apply script, elevated Active Setup registration/uninstall scripts, and a per-user RunOnce fallback:

.\WallBrandPro.ps1 -ExportActiveSetup "C:\Campaign\ActiveSetup" -ActiveSetupWallpaperPath "C:\Campaign\desktop.png" -ActiveSetupLockScreenPath "C:\Campaign\lockscreen.jpg"

Run Install-ActiveSetup.ps1 elevated when deploying the package, or use Register-RunOnce.ps1 for a single current-user bootstrap.

Digital Signage Rotation

Package a folder of branded images into a hidden cycling worker with a batch launcher and scheduled-task registration:

.\WallBrandPro.ps1 -ExportDigitalSignage "C:\Signage\WallBrand" -DigitalSignageInputFolder "C:\Campaign\Exports" -DigitalSignageIntervalMinutes 10

Run Cycle-Wallpapers.bat for an on-demand rotation, or install the generated Install-SignageTask.ps1 to start it at logon. Uninstall-SignageTask.ps1 removes the scheduled task.

Portable Branding Package

Export a ZIP containing a portable Template.json, referenced logo/source assets, an asset manifest, and configured font files. Set FontPaths in JSON or pass -FontPath when exporting:

.\WallBrandPro.ps1 -ConfigPath "C:\Campaign\config.json" -FontPath "C:\Brand\Corporate.ttf" -ExportBrandingPackage "C:\Campaign\WallBrand-Campaign.zip"

Extract the archive and pass its Template.json to -PresetPath; relative asset paths resolve from the extracted template folder.

SVG Logo and MP4 Export

SVG logo paths are rasterized headlessly with ImageMagick. Set SvgTint to replace SVG fill/stroke colors at render time, and optionally set SvgRasterizerPath when magick.exe is not on PATH.

Render a folder of branded images to an MP4 signage sequence with ffmpeg:

.\WallBrandPro.ps1 -ExportVideo "C:\Signage\campaign.mp4" -VideoInputFolder "C:\Signage\Images" -VideoFrameDurationSeconds 8 -VideoFps 30

The video export uses a fixed canvas based on the first source image and runs ffmpeg without opening a console window.

Recursive batch processing with a shared preset, relative coordinates, and an output template provides grouped campaign rendering for a department or photo set while keeping crop and branding placement consistent.

Multi-Monitor Preview and Composition History

Choose Per-Monitor in the GUI to render a side-by-side preview for each detected display. Per-monitor overrides from PerMonitorConfig are applied to their corresponding thumbnail. While dragging logo, text, or system-info elements, enable safe-zone snapping to align them with the configured taskbar or lock-screen boundaries. Use Ctrl+Z/Ctrl+Y (or Ctrl+Shift+Z) to undo and redo changes during the current composition session.

Layered Compositing

Config JSON files can define an ordered Layers array containing Fill, Gradient, Logo, Text, and Shape layers. Each layer supports pixel, percent, or relative coordinates and the Normal, Multiply, Screen, Overlay, and Soft Light blend modes. Logo and text layers can also opt into Shadow, OuterGlow, and InnerBevel effects.

{
  "BackgroundMode": "Gradient",
  "BackgroundColor": "142030",
  "BackgroundColor2": "243B55",
  "Layers": [
    { "Type": "Shape", "Shape": "RoundedRectangle", "CoordinateMode": "Relative", "X": 0.04, "Y": 0.72, "Width": 0.92, "Height": 0.2, "Fill": "000000", "Opacity": 55 },
    { "Type": "Text", "Text": "Customer Briefing", "CoordinateMode": "Relative", "X": 0.08, "Y": 0.78, "FontSize": 42, "Color": "FFFFFF", "Bold": true, "Shadow": true, "OuterGlow": true }
  ]
}

Run a layered config headlessly with -ConfigPath and -Silent -OutputPath. For legacy logo/text fields, set ScalingMode to HeightPercent with LogoHeightPercent/FontHeightPercent, or use ScalingMode: "DPI" and override the detected display density with -Dpi 144 when needed.

Set EnableSafeZoneOverlay to true to draw taskbar and lock-screen reserved regions over the preview/output. SafeZoneMode accepts Taskbar, LockScreen, or Both; the taskbar guide uses the selected monitor's Windows working area when available.

Requirements

  • Windows 10/11
  • PowerShell 5.1+

License

MIT License

About

A wallpaper branding tool with GUI and CLI modes

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages