Create stunning presentations using HTML slides with full asset support
WebSlider is a browser-based presentation tool that lets you build slideshows using HTML files, with full support for relative paths and local assets (images, CSS, JS, fonts, etc.) using the browser's Cache API.
if you had problem with converting your slides to pdf
- HTML-Based Slides: Use HTML, CSS, and JavaScript to create beautiful slides
- Asset Support: Upload entire folders with images, CSS, JS, fonts - relative paths work!
- Cache API Storage: Assets stored in browser cache for proper path resolution
- TAR Project Format: Save projects as
.websliderfiles (TAR format) including all assets - Multiple Preset Sizes: PowerPoint 16:9, 4:3, A4, Letter, HD 1080p, Instagram, and more
- Presentation Mode: Full-screen presentation with keyboard navigation
- PDF Export: Export your presentation as a PDF document
- Sample Templates: Start quickly with pre-built presentation templates
- Open
index.htmlin a modern web browser - Click "New Presentation" or choose a template
- Click "+ Add Slide" to upload HTML files or folders with assets
- Use "
βΆοΈ Present" to view fullscreen - Export as PDF or save your project as
.webslider
webslider/
βββ index.html # Landing page
βββ editor.html # Slide editor
βββ present.html # Presentation mode
βββ README.md # This documentation
βββ css/
β βββ common.css # Shared styles
β βββ index.css # Landing page styles
β βββ editor.css # Editor styles
β βββ present.css # Presentation styles
βββ js/
βββ common.js # Shared utilities, TAR, Cache API, Storage
βββ samples.js # Sample templates
βββ index.js # Landing page logic
βββ editor.js # Editor logic
βββ present.js # Presentation
Projects are saved as TAR archives with the following structure:
project.webslider (TAR)
βββ manifest.json # Project metadata
βββ slides/
βββ 0/
β βββ index.html # Slide HTML content
β βββ images/ # Slide assets (preserved structure)
β β βββ logo.png
β βββ css/
β β βββ styles.css
β βββ js/
β βββ script.js
βββ 1/
β βββ index.html
β βββ ...
βββ ...
{
"name": "My Presentation",
"slideSize": {
"width": 1280,
"height": 720,
"name": "PowerPoint 16:9"
},
"slides": [
{
"source": "title.html",
"hasAssets": true
},
{
"source": "content.html",
"hasAssets": false
}
]
}WebSlider uses the browser's Cache API to store slide assets:
- On Main Page Load: All caches are cleared to ensure fresh state
- When Adding Folder: All files are stored in cache at
/webslider-cache/{slide_index}/{relative_path} - When Rendering Slides: HTML is processed to resolve relative paths from cache
- On Going Home: Caches are cleared when user confirms
Cache: 'webslider-assets-v1'
βββ /webslider-cache/0/images/logo.png
βββ /webslider-cache/0/css/styles.css
βββ /webslider-cache/0/js/animations.js
βββ /webslider-cache/1/background.jpg
βββ ...
When a slide with assets is rendered:
- Parse the HTML document
- Find all resource references (img src, link href, script src, url())
- For each relative path, fetch from cache
- Convert to blob URLs
- Inject the modified HTML into iframe
Upload a single HTML file. All styles and content must be inline or from external CDNs.
Upload a folder containing:
index.html(or any.htmlfile - first one found is used)- Any local assets (images, CSS, JS, fonts, etc.)
The folder structure is preserved in the cache:
my-slide/
βββ index.html β Stored as slide content
βββ images/
β βββ logo.png β Cached at /webslider-cache/{slide}/images/logo.png
β βββ hero.jpg β Cached at /webslider-cache/{slide}/images/hero.jpg
βββ css/
β βββ styles.css β Cached at /webslider-cache/{slide}/css/styles.css
βββ js/
βββ app.js β Cached at /webslider-cache/{slide}/js/app.js
| Shortcut | Action |
|---|---|
F5 |
Start presentation from beginning |
Shift + F5 |
Start from current slide |
β / Space |
Next slide (presentation mode) |
β / Backspace |
Previous slide (presentation mode) |
Escape |
Exit presentation mode |
Ctrl + S |
Save/Export project |
F |
Toggle fullscreen (presentation mode) |
Home |
Go to first slide |
End |
Go to last slide |
- Bootstrap 5.3 - UI framework
- jsPDF - PDF generation
- html-to-image - HTML to image conversion
- Cache API - Browser cache for asset storage
- TAR Format - Project file packaging (pure JavaScript implementation)
| File | Purpose |
|---|---|
common.js |
Shared utilities: TAR encoder/decoder, Cache manager, Storage, Utils |
samples.js |
Built-in sample presentation templates |
index.js |
Landing page: project creation, import, sample selection |
editor.js |
Slide editor: thumbnails, main view, file uploads, PDF export |
present.js |
Presentation mode: fullscreen display, navigation |
there are more types , some common ones :
| Type | Extensions |
|---|---|
| HTML | .html, .htm |
| CSS | .css |
| JavaScript | .js |
| Images | .png, .jpg, .jpeg, .gif, .svg, .webp, .ico |
| Fonts | .woff, .woff2, .ttf, .eot |
| Audio | .mp3 |
| Video | .mp4, .webm |
| Other | .json, .pdf |
- Chrome 40+ (full support)
- Firefox 39+ (full support)
- Safari 11.1+ (full support)
- Edge 17+ (full support)
Note: Folder upload requires webkitdirectory support (all modern browsers).
- Cache Size: Browser cache has size limits (varies by browser, typically 50-100MB)
- Session Persistence: Cache persists during navigation between editor/present pages
- Same Origin: Assets must be local files; external URLs are not cached
- Folder Upload: Uses
webkitdirectoryattribute (Chrome, Firefox, Edge, Safari)
- Check browser console for errors
- Ensure the folder was uploaded correctly (look for π badge on slide)
- Try re-uploading the folder
- Make sure relative paths in HTML match the folder structure
- Use
./images/logo.pngorimages/logo.png(not absolute paths) - Check console for "Not in cache" messages
- Verify slides show π badge indicating they have assets
- Check console during export for asset count
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="slide">
<img src="images/logo.png" alt="Logo">
<h1>My Slide Title</h1>
<p>Content goes here</p>
</div>
<script src="js/animations.js"></script>
</body>
</html>my-slide/
βββ index.html # Main slide file
βββ css/
β βββ style.css # Slide styles
βββ js/
β βββ animations.js # Optional JavaScript
βββ images/
βββ logo.png
βββ background.jpg
- Use relative paths (
./images/logo.pngorimages/logo.png) - Set
height: 100vhon body for full-slide layouts - Include all assets in the folder
- Test your slide by opening
index.htmldirectly first
MIT License
Made with β€οΈ for the web development community