A wallpaper branding tool with GUI and CLI modes
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.
- 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
.\WallBrandPro.ps1.\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 5Use -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.
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.
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.
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=1080x1920If -MatrixOutputFolder is omitted, outputs go to wallbrand-matrix beside
the source image (or in the current folder for a source-less composition).
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.
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.
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.
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.
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 10Run 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.
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 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 30The 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.
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.
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.
- Windows 10/11
- PowerShell 5.1+
MIT License
