Generate srcset images for a variety of resolutions from OCaml

Documentation and code quality improvements across libraries

- Add README files for jsonwt, owntracks, monopam, and srcsetter
- Fix langdetect language count (47→49) in dune-project
- Remove unused variable in crockford encode function
- Improve retention type documentation in zulip channels.mli
- Refactor conpool is_healthy to reduce nesting and improve clarity
- Document unimplemented IDNA features in punycode README

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

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