Generate srcset images for a variety of resolutions from OCaml
1# srcsetter
2
3Responsive image generation for HTML srcset attributes.
4
5## Overview
6
7Srcsetter processes a directory of images and outputs responsive variants
8suitable for embedding as `<img srcset>` tags in websites. It uses ImageMagick
9for image processing and outputs WebP format.
10
11## Packages
12
13- **srcsetter** - Core library for image entry management
14- **srcsetter-cmd** - CLI tool for batch processing
15
16## Installation
17
18```
19opam install srcsetter # Library only
20opam install srcsetter-cmd # CLI tool (includes library)
21```
22
23## Usage
24
25### Library
26
27```ocaml
28(* Load entries from JSON *)
29match Srcsetter.list_of_json json_string with
30| Ok entries ->
31 List.iter (fun entry ->
32 let name = Srcsetter.name entry in
33 let (w, h) = Srcsetter.dims entry in
34 Printf.printf "%s: %dx%d\n" name w h;
35 (* Access variants *)
36 Srcsetter.MS.iter (fun variant_name (vw, vh) ->
37 Printf.printf " %s: %dx%d\n" variant_name vw vh
38 ) (Srcsetter.variants entry)
39 ) entries
40| Error msg -> Printf.printf "Error: %s\n" msg
41```
42
43### CLI
44
45```bash
46srcsetter process input_dir/ output_dir/
47```
48
49## Image Entry Structure
50
51Each entry tracks:
52- **name** - Output filename (e.g., `photo.webp`)
53- **slug** - URL-safe identifier
54- **origin** - Original source file path
55- **dims** - Base image dimensions (width, height)
56- **variants** - Map of variant filenames to dimensions
57
58## JSON Format
59
60```json
61[
62 {
63 "name": "photo.webp",
64 "slug": "photo",
65 "origin": "photos/DSC_1234.jpg",
66 "dims": [1920, 1080],
67 "variants": {
68 "photo-640.webp": [640, 360],
69 "photo-1280.webp": [1280, 720]
70 }
71 }
72]
73```
74
75## Requirements
76
77- ImageMagick CLI tools
78
79## License
80
81ISC