# Photo Collage & Image Joiner > Make a photo grid or join photos horizontally and vertically. Upload photos in a ZIP to compose a collage, a contact-sheet grid, or a continuous horizontal or vertical strip. Control spacing, margins, fit and background, then download a PNG, JPEG or WebP. Part of usefulweb.app (https://usefulweb.app/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://luminaphotolayout.usefulweb.app/ (interactive tool at https://luminaphotolayout.usefulweb.app/tool) - JSON API: POST https://luminaphotolayout.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://luminaphotolayout.usefulweb.app/api/v1/tool) - OpenAPI: https://luminaphotolayout.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://luminaphotolayout.usefulweb.app/mcp - tool `lumina_photo_layout` ## Inputs - images (file, required): Photo or ZIP of photos - Up to 24 PNG, JPEG, WebP or GIF images (first frame). ZIP order is preserved. Decoded total: 32 MP; each photo: 16 MP. - mode (select): Layout - width (integer): Canvas width (px) - height (integer): Grid height (px; joins calculate this) - columns (integer): Grid columns - gap (integer): Gap (px) - margin (integer): Margin (px) - fit (select): Photo fit - background (text): Background (#RRGGBB) - format (select): Output ## Method - Images are detected by content, auto-oriented and converted to sRGB. ZIP entries keep their archive order. - The same integer layout geometry powers Lumina Photo Lab. Fill crops from the center; fit adds the selected background. - Contact mode places a small numbered index in each reserved caption strip; the browser Photo Lab also supports filename captions. - Canvas limit: 16 MP and 16000 px per side. Metadata is stripped. Download artifacts expire after about two hours.