Free Poster Maker β Split any image into multi-page sheets and export a print-ready PDF. Turn any picture into a giant wall poster using only a regular home printer.
Try it now: https://meowdev1011.github.io/PosterCraft/
No installation, no download. Everything runs in your browser.
PosterCraft is a lightweight, dependency-free web application that takes one or more images and slices them into a grid of printable sheets. Each sheet is exported as a page in a PDF, so you can print them on any standard home or office printer and glue them together to create a giant poster β no plotter required.
Think of it as Blockposters in a single HTML file, but with more paper sizes, better quality control, and full multilingual support.
Everything runs 100% in the browser. No server, no uploads, no tracking. Your images never leave your device.
- Upload 1 to 500 images at once
- Single image β fills the entire poster and gets split into sheets (true puzzle mode)
- Multiple images β composed into a customizable grid
- Support for JPEG, PNG, WebP, GIF, BMP, and SVG
- Automatic image validation (max 30,000 px per side, 250 MP per image)
- ISO A series (A0βA10)
- ISO B series (B0βB10)
- ISO C series (envelopes)
- US / ANSI (Letter, Legal, Tabloid, Ledger, ANSI AβF)
- ARCH (AβE1)
- Canadian (P1βP6)
- JIS (Japanese B series)
- Chinese GB/T
- French classics (Cloche, CarrΓ©, Cavalier, Colombierβ¦)
- DIN (German)
- Traditional Japanese (Kiku, Shirokubanβ¦)
- Photo sizes in inches and cm (including β exact 4 Γ 6 in)
- Square sizes for social media
- Posters, plafonds, billboards
- Custom dimensions (any width Γ height in mm)
- Real physical size on the PDF (A4 stays A4, 4Γ6 stays 4Γ6)
- Required name dialog before download β output saved as
{yourname}_poster.pdf - Filename sanitization (safe for all operating systems)
- Cancel button during generation
- Progress bar with real-time percentage
- Print directly from the browser β no need to open the PDF manually
- Uses the native browser print dialog (
window.print()via jsPDFautoPrint()) - Works on Chrome, Edge, Firefox, and Safari
- Pick printer, paper size, orientation, and scale from the system dialog
- Animated post-download prompt appears after each successful download:
"Tired of printing? We do it for you. Just tap the button and we print it on your printer."
- One click on "Print now" opens the print dialog instantly
- Close with X β dismiss the prompt and return to the app
- Fully translated into all 5 languages
- Two modes:
- By number of sheets (columns Γ rows)
- By final physical size (define the target poster and let it calculate)
- Overlap (glue margin) to prevent content loss when cutting
- Individual margins (top, bottom, left, right)
- Crop marks with adjustable thickness, length, and color
- Page numbering on every sheet
- Configurable columns Γ rows grid
- Adjustable spacing between cells
- Borders with customizable color
- Three fit modes per cell:
cover,contain,stretch
- Resolution up to 1200 DPI
- Progressive downscaling for high-quality resampling (avoids aliasing)
- jsPDF compression modes:
SLOW,MEDIUM,FAST,NONE - JPEG quality slider (50β100%)
- Choice between JPEG (small) and PNG (lossless)
- Transparent background support (auto-forces PNG)
- Live PPI/DPI quality indicator per sheet
- 5 languages built in:
- πͺπΈ Spanish
- π¬π§ English
- π§π· Portuguese
- π«π· French
- π©πͺ German
- Automatic detection from
navigator.language - Fallback to English if the detected language isn't supported
- Manual switcher in the sidebar (applies instantly, no reload)
- Live poster preview with grid overlay
- Per-sheet thumbnail preview (verifies the puzzle before generating)
- Grid overlay showing cut lines and sheet boundaries
- Page numbers rendered directly on the preview
- Real physical size on the PDF (A4 stays A4, 4Γ6 stays 4Γ6)
- Required name dialog before download β output saved as
{yourname}_poster.pdf - Filename sanitization (safe for all operating systems)
- Cancel button during generation
- Progress bar with real-time percentage
- Single reusable canvas β avoids memory leaks
- Master canvas β renders the whole poster once, then slices
toBlob()async instead oftoDataURL()β no UI freezing- Batched rendering with
setTimeout(0)between sheets - Handles 500 images Γ 9 sheets smoothly
- Progressive disclosure: basic β advanced β expert
- Collapsible
<details>sections keep the interface clean - Works on desktop, tablet, and mobile
- Dark theme by default
- Zero network requests after initial load (only jsPDF from CDN)
- No analytics, no telemetry, no cookies
- No server-side processing β everything happens locally
Just visit https://meowdev1011.github.io/PosterCraft/ and start making posters.
git clone https://github.com/MeowDev1011/PosterCraft.git
cd PosterCraftThen open index.html in any modern browser. That's it.
Option 3 β Local server (optional)
# Python 3
python -m http.server 8000
# Node.js (with npx)
npx serveThen visit http://localhost:8000/index.html.
π Usage
Basic workflow
- Upload one or more images
- Choose a paper size (e.g., β Foto 4 Γ 6 in Β· 10,2 Γ 15,2 cm)
- Set how many sheets: columns Γ rows (e.g., 3 Γ 3 = 9 sheets)
- (Optional) Open Advanced settings to tune margins, overlap, or grid
- (Optional) Open Expert settings to adjust DPI, compression, or crop marks
- Click Preview sheets to verify the puzzle is correct
- Click Download PDF β type a name β the file saves as {name}_poster.pdf
- Print each page, cut along the crop marks, and glue them together
Example: making a 60 Γ 80 cm poster with A4 sheets
- Paper: A4 Β· 210 Γ 297 mm
- Mode: By final size β Width: 60 cm, Height: 80 cm
- Overlap: 10 mm (default)
- Margins: 10 mm on all sides (default)
- Result: 3 Γ 3 = 9 sheets β poster of exactly 60.4 Γ 80.3 cm
Example: making a giant wall poster with 4 Γ 6 photo sheets
- Paper: β Foto 4 Γ 6 in Β· 10,2 Γ 15,2 cm
- Mode: By number of sheets β Columns: 4, Rows: 6
- Result: 24 sheets β final poster of 39.6 Γ 90.4 cm
πΌοΈ Adding your own logo
PosterCraft looks for a file called postercraft_logo.png in the same folder as index.html.
Β· If found: it's displayed as the app logo (transparent background recommended) Β· If missing: an inline SVG logo is used instead
You can drop in your own logo (recommended height: 80β120 px, transparent PNG).
π οΈ Tech Stack
Layer Technology UI Vanilla HTML + CSS (no framework) Logic Vanilla JavaScript (ES6+) PDF generation jsPDF 4.2.1 Icons Inline SVG (Lucide-style) i18n Custom lightweight system Hosting GitHub Pages
No build step. No npm install. No bundler. Everything is in a single HTML file.
π Project structure
PosterCraft/
βββ index.html β the entire application
βββ postercraft_logo.png β optional logo (transparent PNG)
βββ README.md β this file
βββ LICENSE β MIT License
βββ screenshots/
βββ main.png
βββ preview.png
βββ pdf-output.png
π Translations
Currently supported locales:
Code Language Status es Spanish β Complete en English β Complete pt Portuguese β Complete fr French β Complete de German β Complete
Adding a new language
- Open index.html
- Find the I18N object
- Copy the en block and translate all values
- Add the new to the #langSelect element
- Make sure the key matches the ISO 639-1 two-letter code (e.g., it, ru, ja)
π Deploying to GitHub Pages
This project is already deployed on GitHub Pages from the main branch root.
To deploy your own fork:
- Go to your repository on GitHub
- Open Settings β Pages
- Under Source, select Deploy from a branch
- Choose Branch: main and folder: / (root)
- Click Save
- Wait ~1 minute β your site will be live at https://.github.io/PosterCraft/
Because the entry file is named index.html, GitHub Pages serves it automatically.
π Security & privacy
Β· No image upload: everything is processed locally in your browser Β· No external calls except loading jsPDF from the official CDN Β· Input validation: image dimensions capped at 30,000 Γ 30,000 px and 250 MP Β· Defensive clamping: prevents out-of-bounds reads during the tiling process Β· Filename sanitization: strips OS-reserved characters (/:*?"<>|) Β· Safe URLs: external links use rel="noopener noreferrer"
π Known limitations
Β· Very large posters (>200 sheets) will prompt a confirmation before generating Β· Safari < 15 may struggle with 1200 DPI on huge posters (use 300 DPI instead) Β· Transparent backgrounds require PNG format (auto-switched) Β· Requires an internet connection on first load (to fetch jsPDF from CDN)
πΊοΈ Roadmap
β Offline mode (bundle jsPDF locally) β Save/load project settings as JSON β Additional export formats (SVG, PNG per sheet) β Preset templates ("A2 poster on A4", "Instagram grid"β¦) β More languages (Italian, Russian, Japanese, Chinese, Arabic) β PDF metadata customization β Print directly from the browser
Have an idea? Open an issue.
π€ Contributing
Contributions, bug reports, and feature requests are welcome!
- Fork the repository
- Create a branch: git checkout -b feature/my-feature
- Commit your changes: git commit -m "Add some feature"
- Push to the branch: git push origin feature/my-feature
- Open a Pull Request
Please make sure:
Β· The code stays framework-free Β· New UI strings are added to all 5 languages Β· You test on Chrome and Firefox before submitting
π License
This project is licensed under the MIT License β see the LICENSE file for details.
You are free to use, modify, and distribute this software, including for commercial purposes, as long as the original copyright notice is preserved.
π€ Author
π Acknowledgments
Β· jsPDF β client-side PDF generation Β· Lucide β icon inspiration Β· Blockposters β the original inspiration Β· GitHub Pages β free static hosting Β· Everyone who reported bugs and suggested features
β Show your support
If PosterCraft saved you from buying an expensive plotter, consider giving it a star on GitHub. It helps others discover the project.
Made with β€οΈ by MeowDev1011
PosterCraft β Free Poster Maker Β· MIT Licensed