A self-hosted web interface for managing your Meural digital art frames. Bulk operations, playlist management, and frame control that the official app doesn't provide.
- Grid view of your entire library with sorting and filtering
- Bulk select and delete — finally
- Filter by orientation (portrait/landscape) and year
- Add photos directly from browser with drag & drop upload
- Automatic resizing for photos over 20MB
- Create, edit, and delete playlists
- Add/remove photos from playlists
- View playlist contents in a clean grid
- See all your frames and their online status
- Assign playlists to specific frames
- Quick switching between collections
# Clone the repo
git clone https://github.com/davemorin/meural-manager.git
cd meural-manager
# Install dependencies
npm install
# Set up your credentials
cp .env.example .env
# Edit .env with your Meural account email
# Create .meural-password with your password
# Run it
npm startOpen http://localhost:3333 — or access it from any device on your network.
Create a .env file:
MEURAL_USERNAME=your@email.com
PORT=3333And a .meural-password file with just your password (this handles passwords with special characters like #):
yourpassword
- Backend: Express.js wrapping the Meural REST API + AWS Cognito auth
- Frontend: Vanilla HTML/CSS/JS (no build step, no framework bloat)
- Image Processing: Sharp for automatic resizing
This wraps Meural's private API, which uses AWS Cognito for authentication. Key endpoints:
GET /user— account info and storage limitsGET /user/items— your photo libraryGET /user/galleries— your playlistsGET /user/devices— your framesPOST /items— upload photosDELETE /items/:id— delete photos
# Using pm2
npm install -g pm2
pm2 start server.js --name meural-manager
pm2 save
pm2 startup- The Meural API occasionally rate limits; bulk operations include small delays
- No official API documentation means things could break if Netgear changes their backend
- Photos over 20MB are automatically resized to fit Meural's limits
MIT — do whatever you want with it.