Skip to content

Surya8991/slidecraft

Repository files navigation

SlideCraft

A full-featured web-based slide editor with OCR text editing, AI-powered logo removal, shape tools, image filters, video processing, templates, version history, and more.


What is SlideCraft?

SlideCraft is a web-based PowerPoint slide editor built for editing image-based presentations (like those generated by NotebookLM, Gamma, or similar AI tools). It lets you:

  • Edit text directly on slide images using EasyOCR detection
  • Remove NotebookLM watermarks from slides and videos seamlessly
  • Draw shapes, freehand, add images with a full creative toolkit
  • Apply image filters — brightness, contrast, blur, grayscale, sepia
  • Manage versions and templates — save, restore, reuse
  • Process videos — remove logos with real-time progress and stop control
  • Export as PPTX, PDF, PNG ZIP, or animated GIF

Built with Flask + vanilla JS. No React, no build step. Just python app.py and go.


Screenshots

Upload your PPTX, edit text with OCR, remove logos, export clean slides.


Features at a Glance (40+)

Drawing & Shape Tools

Feature Description
Text Overlays Styled text boxes with full typography controls
Rectangle Colored rectangles with fill and opacity
Circle / Ellipse Draw circles and ellipses
Line / Arrow Draw lines with arrowheads
Callout Speech bubble callout shapes
Freehand Drawing Pen tool — draw anything with mouse
Cover & Type Draw over text to cover + replace it
Image Overlays Upload and place images on slides

Text Editing & OCR

Feature Description
EasyOCR Detection One-click text detection — no external binaries needed
Click to Edit Click any detected text region to replace it
Auto Color Match Samples background + text color from the original image
Auto Font Weight Detects normal/semibold/bold/extrabold via ink density analysis
Auto-Fit Text Text auto-shrinks to fit within the bounding box
Inline Editing Double-click any text to edit directly on the canvas
Apply / Bake Burns all edits permanently into the slide image

Typography Controls

Feature Description
Font Family 12 system fonts: Arial, Segoe UI, Calibri, Verdana, Georgia, Tahoma, etc.
Font Size 8-72pt with precise numeric control
Bold / Italic / Underline Full text style controls
Text Alignment Left, center, right
Letter Spacing -5 to 20px tracking adjustment
Line Height 0.8x to 3x multiplier
Text Transform None, UPPERCASE, lowercase, Title Case
Text Shadow Drop shadow with custom color picker
Text Outline Stroke outline with custom color
Bullet / Numbered Lists Toggle list formatting

Image Filters

Filter Description
Brightness +/- Adjust slide brightness
Contrast +/- Adjust slide contrast
Saturation +/- Adjust color saturation
Blur Gaussian blur effect
Sharpen Sharpen details
Grayscale Convert to black & white
Sepia Vintage warm tone
Reset Revert to original

Logo & Watermark Removal (Slides)

Feature Description
One-Click Logo Removal "Remove Logo" strips NotebookLM watermark from all slides
Auto Watermark Detection Scans slide corners for watermarks/logos using edge analysis
Remove from Single Slide Remove detected watermark from current slide only
Remove from All Slides Remove detected watermark across all slides at once
Confirmation Dialog Delete confirmation before any destructive watermark removal
OpenCV Inpainting Telea algorithm — samples from all surrounding edges seamlessly

Custom Watermark (Add Your Own)

Feature Description
Text Watermark Add text like "CONFIDENTIAL", "DRAFT", custom text
Image Watermark Upload a logo/image as watermark overlay
Position Control Center, Top-Left, Top-Right, Bottom-Left, Bottom-Right, Tiled
Opacity Control 5% to 80% transparency
Scale Control Image watermark size as % of slide width
Apply to All Watermark applied to every slide at once

Video Logo Remover

Feature Description
Any Format MP4, MOV, AVI, MKV and more
Any Length Handles 3-8+ minute videos
Visual Region Select Drag a resizable box over the logo on a preview frame
OpenCV Inpainting Same seamless per-frame removal as slides
Audio Preserved Audio track muxed back via MoviePy
Real-Time Progress Live frame count, percentage, ETA, and elapsed time
Stop Button Cancel processing mid-way — cleans up temp files
Auto Logo Detection Automatic corner analysis to suggest logo position
Replace Logo Swap the logo with your own image instead of removing
Video Trimming Cut start/end before processing
Batch Video Upload Upload multiple videos at once

Editing Tools

Feature Description
Resize Handles 8-point resize on any selected overlay
Drag & Reposition Move overlays by dragging
Undo / Redo Ctrl+Z / Ctrl+Y with 50-step history per slide
Copy / Paste Ctrl+C / Ctrl+V across slides
Snap Grid Toggle alignment grid (every 10%) with 5% snapping
Slide Reordering Drag thumbnails to rearrange
Crop Tool Crop slide images to a selected region
Rotate Rotate slides 90 CW / CCW
Right-Click Menu Context menu: Edit, Duplicate, Delete, Bring to Front, Send to Back
Keyboard Shortcuts Press ? to see the full shortcut cheatsheet

Insert Tools

Feature Description
QR Code Generator Enter a URL, generates QR code as an image overlay
Custom Watermark Add text watermark — center, bottom-right, or tiled, with opacity control
Find & Replace Search and replace text across all slide overlays

Templates & Version History

Feature Description
Save Template Save current slides + overlays as a reusable named template
Load Template Restore slides from a saved template
Delete Template Remove templates you no longer need
Save Version Snapshot current state for rollback
Restore Version Revert to any previously saved version
Version List Browse all saved versions with slide count

Comments & Annotations

Feature Description
Comment Tool Click anywhere on a slide to place a comment pin
Comment Panel Right panel tab listing all comments per slide
Resolve Comments Mark comments as resolved
Delete Comments Remove individual comments

Export Options

Format Description
PPTX PowerPoint with slide images + editable text overlay layers
PDF Multi-page PDF of all slides
PNG ZIP Download all slides as a ZIP of PNG images
Animated GIF Export slides as an animated GIF slideshow (custom duration)
Video Clean MP4 with logo removed and audio preserved

Presentation Mode

Feature Description
Fullscreen F5 enters distraction-free fullscreen presentation
Arrow Navigation Left/Right arrows to navigate slides
Escape to Exit Press Escape to return to editor

UI / UX

Feature Description
Glassmorphism Theme Modern frosted glass dark theme with Inter font
Organized Toolbar Labeled tool groups: TOOLS, EDIT, INSERT, SLIDE, MANAGE
Drag & Drop Upload Drop PPTX files anywhere to upload
Auto-Save Indicator Pulsing orange dot when unsaved, green checkmark on save
Loading Overlay Spinner during long operations
Toast Notifications Success / error / info messages with icons
Crossfade Navigation Smooth slide transitions
Responsive Toolbar Wraps on smaller screens

Installation

Fastest path — see INSTALL.md for the full cross-platform guide. TL;DR:

# Clone the repo from GitHub to your machine
git clone https://github.com/Layruss98266/slidecraft.git

# Move into the project folder
cd slidecraft

# Run the launcher for your OS — it will:
#   1. Create a Python virtual environment in .venv/
#   2. Install everything listed in requirements.txt
#   3. Warn you if LibreOffice isn't installed
#   4. Start the Flask server on http://127.0.0.1:5050
./run.sh              # macOS / Linux  (chmod +x run.sh once if needed)
# or run.bat          # Windows (cmd.exe / double-click)
# or .\run.ps1        # Windows (PowerShell)

The launcher creates .venv/, installs requirements.txt, warns if LibreOffice isn't installed, then starts the server at http://127.0.0.1:5050. First run takes ~3 min (LibreOffice optional but strongly recommended for high-fidelity slide rendering).


How to Run

Option A — one-command launcher (recommended)

After the install steps above, just re-run the launcher whenever you want to start the editor. It's idempotent — it skips the venv/install steps if they've already been done.

# macOS / Linux
./run.sh
:: Windows (cmd.exe)
run.bat
# Windows (PowerShell)
.\run.ps1

Then open http://127.0.0.1:5050 in any modern browser (Chrome, Edge, Firefox, Safari).

Option B — manual (if you already have the venv set up)

# 1. Activate the virtual environment
source .venv/bin/activate        # macOS / Linux
.venv\Scripts\Activate.ps1       # Windows PowerShell
.venv\Scripts\activate.bat       # Windows cmd.exe

# 2. Start the server (Ctrl+C to stop)
python app.py

Configuration via environment variables

All optional — sensible defaults if unset.

# Bind on all interfaces so other machines on your LAN can reach the editor.
# WARNING: there's no built-in auth — only do this on a trusted network.
HOST=0.0.0.0 python app.py

# Use a different port (e.g. if 5050 is taken)
PORT=8080 python app.py

# Allow larger uploads (default is 60 MB total per request)
MAX_UPLOAD_MB=200 python app.py

# Combine multiple
HOST=0.0.0.0 PORT=8080 MAX_UPLOAD_MB=200 python app.py

On Windows PowerShell use $env:HOST = "0.0.0.0"; python app.py instead.

See INSTALL.md for the full list.

Stopping the server

Press Ctrl+C in the terminal where it's running. State on disk (uploaded PPTX, slide images, history snapshots) is preserved — the next start picks up where you left off.

Typical first-run flow

1. Run the launcher                        →  server listens on :5050
2. Open http://127.0.0.1:5050 in a browser →  empty editor
3. Click "Upload" and pick a .pptx file    →  slides appear in the strip
4. Edit / OCR / watermark / filter / etc.  →  every change auto-saves
5. Click "Export" → "PowerPoint (PPTX)"    →  download the edited deck

The first slide upload triggers a one-time ~64 MB EasyOCR model download to ~/.EasyOCR/. After that, OCR is instant.


Installation (Step by Step)

Step 1: Install Python

SlideCraft requires Python 3.10 or higher.

Windows
  1. Go to python.org/downloads
  2. Download the latest Python installer (e.g. Python 3.12.x)
  3. Run the installer
  4. IMPORTANT: Check the box "Add Python to PATH" at the bottom of the installer
  5. Click "Install Now"
  6. Verify installation — open Command Prompt and run:
    python --version
    
    You should see something like Python 3.12.x
macOS
  1. Install Homebrew if you don't have it:
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Install Python:
    brew install python
  3. Verify:
    python3 --version
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install python3 python3-pip python3-venv
python3 --version

Step 2: Download SlideCraft

Option A — Clone with Git (recommended):

git clone https://github.com/YOUR_USERNAME/slidecraft.git
cd slidecraft

Option B — Download ZIP:

  1. Click the green "Code" button on GitHub
  2. Click "Download ZIP"
  3. Extract the ZIP file
  4. Open a terminal/command prompt in the extracted folder

Step 3: Create a Virtual Environment (Recommended)

This keeps SlideCraft's packages separate from your system Python.

Windows:

python -m venv venv
venv\Scripts\activate

macOS / Linux:

python3 -m venv venv
source venv/bin/activate

You'll see (venv) at the start of your terminal prompt when the virtual environment is active.


Step 4: Install Dependencies

pip install -r requirements.txt

This installs all required packages:

Package What it does Size
flask Web server ~2 MB
python-pptx Read/write PowerPoint files ~5 MB
Pillow Image processing & filters ~10 MB
opencv-python-headless Inpainting, video frames, filters ~40 MB
easyocr Text detection (OCR) ~150 MB
moviepy Video audio handling & trimming ~5 MB
numpy Array operations (with opencv)
torch AI backend for EasyOCR ~200-800 MB

Note: First install may take 2-5 minutes. The torch package is the largest (~200MB CPU-only).

If you get an error with pip, try:

python -m pip install -r requirements.txt

Optional — for QR code generation:

pip install qrcode[pil]

Step 5: Run SlideCraft

Windows:

set PYTHONIOENCODING=utf-8 && python app.py

macOS / Linux:

PYTHONIOENCODING=utf-8 python3 app.py

Dev mode: To enable Flask debug mode (auto-reload on code changes), set FLASK_DEBUG=true:

FLASK_DEBUG=true PYTHONIOENCODING=utf-8 python app.py

You should see:

 * Running on http://0.0.0.0:5050

Step 6: Open in Browser

Open your browser and go to:

http://localhost:5050

That's it! SlideCraft is running.

First time using OCR? The first time you click the "OCR" button, EasyOCR will download its text detection models (~100 MB). This is a one-time download.


Optional: Install LibreOffice (for better PPTX conversion)

LibreOffice enables high-fidelity PPTX-to-image conversion. Without it, SlideCraft falls back to extracting embedded images.

Windows: Download from libreoffice.org and install.

macOS:

brew install --cask libreoffice

Linux:

sudo apt install libreoffice

Usage Guide

Upload a Presentation

  • Click Upload in the header, or drag & drop a .pptx file anywhere
  • Slides are converted to images and loaded into the editor

Remove NotebookLM Logo (Slides)

  • Click Remove Logo in the header — all slides processed via OpenCV inpainting

Edit Text with OCR

  1. Click OCR in the toolbar — text regions highlighted with blue dashed boxes
  2. Click any region — creates a background cover + editable text overlay
  3. Edit text in the Properties panel, adjust font/size/color/weight
  4. Click Apply to burn changes permanently into the slide image

Manual Text Replacement (Cover & Type)

  1. Press C or click the Cover tool
  2. Draw a rectangle over text to replace
  3. Type replacement text in Properties panel
  4. Click Apply to bake

Draw Shapes & Freehand

  • Use toolbar tools: Rectangle (R), Circle, Line, Callout, Freehand Draw
  • All shapes are resizable and repositionable
  • Right-click for context menu: Duplicate, Delete, Bring to Front/Back

Apply Image Filters

  • Switch to Filters tab in the right panel
  • Click any filter button — applies instantly to the current slide

Manage Templates

  • Click Templates icon in toolbar
  • Save current state as a named template
  • Load any saved template to restore slides + overlays

Version History

  • Click History icon in toolbar
  • Save Version to snapshot current state
  • Restore any previous version

Comments

  • Click Comments tool, then click on the slide to place a pin
  • Enter comment text — visible as numbered pins on the canvas
  • Switch to Comments tab in the right panel to view/resolve/delete

Export

Button Output
PPTX PowerPoint with overlays as editable layers
PDF Multi-page PDF
PNG ZIP archive of all slides as PNG
GIF Animated GIF slideshow
Apply Burns overlays into slide images (no layers)

Remove Logo from Video

  1. Click Video in the header (or go to /video)
  2. Upload video file (any format)
  3. Drag the red box over the logo on the preview frame
  4. Click Remove Logo — watch real-time progress
  5. Click Stop to cancel if needed
  6. Download the clean video when done

Keyboard Shortcuts

Press ? in the editor to see the full cheatsheet.

Key Action
S Select tool
T Text tool
R Rectangle tool
C Cover & Type tool
G Toggle snap grid
? Show all keyboard shortcuts
F5 Fullscreen presentation mode
Ctrl+Z Undo
Ctrl+Y Redo
Ctrl+C Copy selected overlay
Ctrl+V Paste overlay
Ctrl+S Save current slide
Delete Delete selected overlay
Escape Exit presentation / close modals
Arrow Left/Right Navigate slides

Project Structure

slidecraft/
├── app.py                  # Flask backend — 44 API routes
├── requirements.txt        # Python dependencies
├── LICENSE                 # MIT license
├── .gitignore              # Git ignore rules
├── slide_data.json         # Auto-generated overlay data store
├── comments.json           # Auto-generated comments store
├── static/
│   └── slides/             # Slide JPG images (auto-generated)
├── uploads/                # Uploaded PPTX files
├── exports/                # Exported PPTX/PDF/ZIP/GIF files
├── videos/                 # Uploaded & processed videos
├── history/                # Version history snapshots
├── templates_saved/        # Saved slide templates
└── templates/
    ├── index.html          # Main slide editor UI (~3900 lines)
    └── video.html          # Video logo remover UI

API Reference (44 Routes)

Slide Endpoints

Method Endpoint Description
GET / Main editor page
GET /api/slide/<num> Get overlays + notes for a slide
POST /api/slide/<num> Save overlays + notes
POST /api/slide/<num>/bake Burn overlays into slide image
POST /api/slide/<num>/preview Render composite preview with overlays
POST /api/slide/<num>/filter Apply image filter
POST /api/slide/<num>/crop Crop slide image
POST /api/slide/<num>/rotate Rotate slide image
POST /api/upload Upload PPTX file
POST /api/remove-logo Remove NotebookLM logo from all slides
POST /api/reorder Reorder slides
POST /api/upload-image Upload image for overlay use
POST /api/ocr/<num> Run EasyOCR on a slide
POST /api/sample-color/<num> Sample bg color, text color, font weight
POST /api/qr-generate Generate QR code image
POST /api/watermark Add text watermark to all slides
POST /api/watermark-image Add image/logo watermark to all slides
POST /api/detect-watermark/<num> Auto-detect watermark regions in a slide
POST /api/remove-watermark/<num> Remove watermark from single slide
POST /api/remove-watermark-all Remove watermark from all slides
POST /api/find-replace Find and replace text in overlays

Export Endpoints

Method Endpoint Description
POST /api/export Export as PPTX
POST /api/export-pdf Export as PDF
POST /api/export-png-zip Export as PNG ZIP
POST /api/export-gif Export as animated GIF

Batch Endpoints

Method Endpoint Description
POST /api/batch/remove-logo Bulk upload up to 20 PPTX, remove logos, return ZIP

Template Endpoints

Method Endpoint Description
GET /api/templates List saved templates
POST /api/templates/save Save current state as template
POST /api/templates/load Load a template
POST /api/templates/delete Delete a template

Version History Endpoints

Method Endpoint Description
GET /api/history List all versions
POST /api/history/save Save a version snapshot
POST /api/history/restore Restore a version

Comment Endpoints

Method Endpoint Description
GET /api/comments/<num> Get comments for a slide
POST /api/comments/<num> Add a comment
POST /api/comments/<num>/resolve Resolve a comment
POST /api/comments/<num>/delete Delete a comment

Video Endpoints

Method Endpoint Description
GET /video Video logo remover page
POST /api/video/upload Upload video file
POST /api/video/preview-frame Get a preview frame
POST /api/video/remove-logo Start logo removal (returns jobId)
GET /api/video/progress/<jobId> Poll job progress
POST /api/video/stop/<jobId> Stop a running job
GET /api/video/download/<file> Download processed video

Tech Stack

Layer Technology
Backend Python 3.10+, Flask 3.x
PPTX python-pptx
Image Processing Pillow, OpenCV (inpainting, filters)
OCR EasyOCR (PyTorch-based, no external binary)
Video OpenCV (frames), MoviePy (audio mux, trim)
Frontend Vanilla JavaScript, HTML5 Canvas, CSS3
Theme Glassmorphism dark theme, Inter font
Icons Inline SVG stroke icons

How It Works

Logo Removal

Uses OpenCV's Telea inpainting algorithm:

  1. Binary mask marks the logo region
  2. Algorithm propagates pixels from all surrounding edges inward
  3. Follows natural color gradients and textures
  4. Result: seamless removal with no flat bands

OCR Text Editing

  1. EasyOCR detects text regions with bounding boxes
  2. sample-color API analyzes the region:
    • Background color from a strip above the text
    • Text color from pixels with highest contrast
    • Font weight from ink density (normal/semibold/bold/extrabold)
  3. Cover rectangle + text overlay created with matched colors/weight
  4. Apply burns it into the image using Pillow with correct system font

Video Processing

  1. Background thread processes each frame with OpenCV inpainting
  2. Progress reported via polling API (frame count, percentage, ETA)
  3. Cancellation supported — stops the thread cleanly
  4. MoviePy muxes audio from original into the clean video

Troubleshooting

Issue Solution
OCR not working EasyOCR downloads models on first use (~100MB). Ensure internet access.
UnicodeEncodeError on Windows Run with set PYTHONIOENCODING=utf-8 && python app.py
Video processing slow ~10-30 fps depending on resolution. 1080p 5min = ~5-8 min.
Fonts don't match exactly Use the Font Family dropdown in Properties.
PPTX upload shows blank slides Install LibreOffice for proper conversion.
QR code shows placeholder Install qrcode package: pip install qrcode[pil]
Stop button not working Wait a few seconds — cancellation is checked every frame.

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

MIT License. See LICENSE for details.


Built with Flask + Pillow + OpenCV + EasyOCR + MoviePy
44 API routes | 45+ features | 0 build steps

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

 
 
 

Contributors