Transform your images into calendar wallpapers. Check it out.
- Choose between the 12 months, the formatting of the month, be it short, long or numeric.
- Switch the starting day of the week (Sun/Mon).
- Funky collections of fonts, with option to upload custom font.
- Move around the calendar block according to your wallpaper.
- Get a LIVE preview of the changes and download the 4K wallpaper!!!
- NEW: Share it with the world (in the Community section)
- API Access: Generate wallpapers programmatically via the
/api/createendpoint.
Wallendar exposes a REST API to generate wallpapers programmatically. You can upload an image or provide a URL, along with a configuration object to customize the calendar.
Endpoint: POST /api/create
We provide an OpenAPI specification for easy integration with tools like Postman or Insomnia.
See API_REFERENCE.md for full documentation, the OpenAPI spec download, and detailed usage guides.
curl -X POST https://www.wallendar.shop/api/create \
-F "image=https://www.wallendar.shop/samples/sample-bg2.jpg" \
--output wallpaper.png- Node.js 18+
- npm/yarn/pnpm
- PostgreSQL database (local or hosted)
- AWS S3 bucket (optional, for wallpaper uploads)
- Upstash Redis account (optional, for download/publish tracking)
- GitHub OAuth App (optional, for authentication)
- Google OAuth App (optional, for authentication)
# Clone the repo
git clone https://github.com/shm-dtt/wallendar
cd wallendar
# Install dependencies
npm install
# Set up environment variables
cp env.example .env.local
# Update .env.local with your values (see Environment Variables section below)
# Set up the database
npx prisma migrate dev
# Run dev server
npm run devVisit http://localhost:3000 to get started.
This project uses node-canvas for server-side image generation. This library relies on native system dependencies (Cairo, Pango) that must be installed on the deployment environment.
Debian/Ubuntu/Vercel:
sudo apt-get install build-essential libcairo2-dev libpango1.0-devmacOS:
brew install pkg-config cairo pango libpng jpeg giflib librsvgCopy env.example to .env.local and fill in the following variables:
AWS_REGION- AWS region where your S3 bucket is located (e.g.,us-east-1)AWS_ACCESS_KEY_ID- AWS access key IDAWS_SECRET_ACCESS_KEY- AWS secret access keyAWS_S3_BUCKET_NAME- Name of your S3 bucket for storing wallpapers
To enable GitHub and Google login:
DATABASE_URL- PostgreSQL connection string (e.g.,postgresql://user:password@localhost:5432/wallendar)BETTER_AUTH_SECRET- Secret key for Better Auth (generate withopenssl rand -base64 32)BETTER_AUTH_URL- Your application URL (e.g.,http://localhost:3000for dev,https://yourdomain.comfor production)GITHUB_CLIENT_ID- GitHub OAuth App client IDGITHUB_CLIENT_SECRET- GitHub OAuth App client secretGOOGLE_CLIENT_ID- Google OAuth App client IDGOOGLE_CLIENT_SECRET- Google OAuth App client secret
For production download and publishing tracking:
UPSTASH_REDIS_REST_URL- Redis URL from UpstashUPSTASH_REDIS_REST_TOKEN- Redis token from Upstash
TRUST_PROXY- Set totrueif deploying behind a proxy (like Vercel) to ensure correct IP rate limiting.
Note: The app will work without Redis, OAuth, and S3 in development mode, but these are required for full functionality in production.
Made with Next.js, shadcn/ui, and Zustand by shm-dtt
Credits for the color picker: Ryan Mogk
