{"id":20527157,"url":"https://github.com/indiscipline/catalay","last_synced_at":"2026-05-27T13:34:15.732Z","repository":{"id":157680129,"uuid":"633601946","full_name":"indiscipline/catalay","owner":"indiscipline","description":"Automate the layout of image catalogues made with Adobe InDesign, using simple declarative configuration files as input.","archived":false,"fork":false,"pushed_at":"2023-04-30T11:38:35.000Z","size":471,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-08T21:45:47.789Z","etag":null,"topics":["catalogue","catalogues","design","indesign","indesign-scripts","layout","nim"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/indiscipline.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-27T21:47:23.000Z","updated_at":"2025-09-09T13:15:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"3effb3db-d8e4-4b03-9119-e40d606a16c4","html_url":"https://github.com/indiscipline/catalay","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/indiscipline/catalay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indiscipline%2Fcatalay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indiscipline%2Fcatalay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indiscipline%2Fcatalay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indiscipline%2Fcatalay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indiscipline","download_url":"https://codeload.github.com/indiscipline/catalay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indiscipline%2Fcatalay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33568857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["catalogue","catalogues","design","indesign","indesign-scripts","layout","nim"],"created_at":"2024-11-15T23:17:35.891Z","updated_at":"2026-05-27T13:34:15.725Z","avatar_url":"https://github.com/indiscipline.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catalay \u003cimg src=\"catalay.svg\" align=\"right\" alt=\"Catalay logo\" title=\"Catalay go purrr!\" width=\"30%\"/\u003e\n[![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](LICENSE.md)\n\n\u003e TLDR: *Write a declarative config, Catalay go purrr, perfect catalogue layout in InDesign ready.*\n\nCatalay is a free software suite designed to automate the layout of image catalogues made with Adobe InDesign, using simple, declarative, human readable and editable configuration files in TOML or YAML formats as input.\n\nThe main feature of Catalay is finding the optimal grid layouts for multiple distinctive groups of items, preserving their relative size ratios while filling as much space on the page as possible[^killerfeature].\n\nThe main stand-alone program processes the user-provided input files, calculates the best layouts for each page, generates the HTML preview for quick visual inspection and outputs a JSON file, which is then used by the complimentary [Catalay.jsx](#catalayjsx-) script to compile the catalogue in InDesign.\n\nCatalay can significantly reduce the time and effort required for creating complex image catalogues, freeing the users of routine labour and allowing them to focus on less tedious and more meaningful parts of their job. The resulting layouts are highly efficient, precise and ready for fine-tuning.\n\nAlthough Catalay is tailored for a specific use-case, it probably means it's the only alternative to incessant unassisted drudgery of selecting, moving, resizing and aligning.\n\n| Catalay processes input files, | outputs an HTML preview, | Catalay.jsx compiles the layout. |\n| --- | --- | --- |\n| \u003ca href=\"assets/stage1.png\"\u003e\u003cimg src=\"assets/stage1.png\" alt=\"Stage 1: Catalay processes the input config\" width=\"100%\"/\u003e\u003c/a\u003e | \u003ca href=\"assets/stage2.png\"\u003e\u003cimg src=\"assets/stage2.png\" alt=\"Stage 2: Catalay outputs an HTML preview\" width=\"100%\"/\u003e\u003c/a\u003e | \u003ca href=\"assets/stage3.png\"\u003e\u003cimg src=\"assets/stage3.png\" alt=\"Catalay.jsx compiles the layout\" width=\"100%\"/\u003e\u003c/a\u003e |\n\n# Table of Contents\n\n- [Usage](#usage)\n  * [Usage example](#usage-example)\n  * [Input file description](#input-file-description)\n  * [Output file description](#output-file-description)\n  * [Installation](#installation)\n  * [Catalay.jsx](#catalayjsx-)\n- [FAQ](#faq)\n- [TODO:](#todo)\n- [Contributing](#contributing)\n- [License](#license)\n- [Disclaimer](#disclaimer)\n\n# Usage\n\nRun `catalay --help` to list all the available options.\n\n## Usage example\n\nTo create a catalogue with Catalay, download it, install the Catalay.jsx script and follow these steps:\n\n1. Create a configuration file in either TOML or YAML format, following the configuration file description below.\n2. Run `catalay MY_CONFIG.toml`, substituting the name of the config file.\n3. Inspect the produced layout opening `preview.html` (saved along the output JSON) in your browser.\n4. Open InDesign, open the *Scripts panel* and run the Catalay.jsx script.\n5. Select the produced output file in the opened file dialog and follow along.\n6. Catalay.jsx will compile the new catalogue, filling the rectangle placeholders with the appropriate images and text.\n\nDuring its execution, Catalay will print the calculation statistics and save the results to `out.json` (or the provided file path). Unless the `-H` option was used, Catalay will also save the `preview.html` with all the pages. Individual page layouts can also be saved as SVG files using the `--svg` option.\n\n## Input file description\n\nConfig files for Catalay are meant to be the only thing the user needs to spend his time on to layout and compile the catalogue.\n\nCatalay supports input in TOML and YAML formats with an identical schema. A config file describes the basic page preferences for the document and properties of the images that will be included in the catalogue. The format is designed for simple integration in common spreadsheet-heavy work environments.\n\nA thorough description of the input format is included in the example files ([TOML](src/example.toml), [YAML](src/example.yaml)) available from the program:\n\n```\n# Print the annotated input configuration in TOML:\ncatalay --exampleToml\n\n# Print the annotated input configuration in YAML:\ncatalay --exampleYaml\n```\nTo save the examples to a file, use redirection: `catalay --exampleToml \u003e in.toml`.\n\n## Output file description\n\nCatalay generates an HTML preview of the catalogue layout for quick visual inspection and finetuning of the input, and the main JSON file for Catalay.jsx to process and compile in InDesign.\n\nThis multi-step process was chosen for:\n\n- The ease of integrating into various workflows and simplifying the possible interaction with other tools\n- Increased overall performance\n- Separation of concerns that lowers the barrier to entry for further development\n\n## Installation\n\nCatalay is tested to work under Windows and GNU/Linux. It should work on macOS with no changes.\n\nDownload the Catalay binary or the source code and Catalay.jsx from the [release assets](https://github.com/indiscipline/catalay/releases/latest).\n\nThe program can be compiled with all the dependencies by using Nim's Nimble package manager with the following command:\n\n```\nnimble install http://github.com/indiscipline/catalay\n```\n\n## Catalay.jsx \u003cimg src=\"catalay.jsx/catalay.jsx.svg\" align=\"right\" alt=\"Catalay.jsx logo\" width=\"20%\"/\u003e\n\nCatalay.jsx is a script for Adobe InDesign. It reads the output JSON file produced by the main program and compiles the catalogue. Install it following [Adobe documentation](https://helpx.adobe.com/indesign/using/scripting.html):\n\n\u003e A quick way to locate the Scripts Panel folder is to right-click (Windows) or Control-click (macOS) a script in the Scripts panel and choose Reveal In Explorer (Windows) or Reveal In Finder (macOS).\n\nAdditional information on Catalay.jsx available in its own [readme](Catalay.jsx/README.md).\n\n\n# FAQ\n\n- \u003e Why doesn't this program have feature X?\n\nWe encourage users to file feature requests and bug reports as issues in this repository. Even though the author cannot guarantee your request will be implemented, any feedback (including negative) is useful and much appreciated.\n\n- \u003e I click on the program executable and nothing opens, is it broken?\n\nNo, Catalay is a command-line interface (CLI) program. You need to run it from a terminal or Command Prompt. **On Windows** you can open a command prompt by pressing Win+R, typing `cmd`, and pressing Enter. **On macOS**: press Cmd+Space to open spotlight search, type `terminal` and press return. **On GNU\\Linux**… really? Or, may be it *is* broken. [File a bug report](https://github.com/indiscipline/catalay/issues/new) then!\n\n- \u003e How exactly does the program calculate the optimal layout?\n\nCatalay uses a combination of a simple heuristic and a stochastic optimization algorithm to calculate the grid layout for multiple distinctive groups of items on a page in a close to optimal way and in constant time.\n\n- \u003e Why is it free (noncommercial)?\n\nCatalay is a niche tool and not likely to generate significant interest, even though it's designed (and battle tested) to be useful in a *work* situation, where it proved to save time. If you happen to find Catalay useful, consider making a donation[^donations]. Just sharing it with others or contacting the author is great too. Catalay is released as Free Software because it's the only right thing to do.\n\n- \u003e What's with the logo?\n\nIt's a cat, it lays on a catalogue. It probably purrs.\n\n\n# TODO\n\n- [ ] Introduce group weights to quickly fine-tune relative scaling of the image groups on the page. For now you can just tweak the group sizes.\n- [ ] Support omitting group titles. For now it's possible to just leave the group title field empty (\"\"), but the space will not be reused for image placement.\n- [ ] Introduce additional layout constraints, such as minimal item margin.\n\n\n# Contributing\n\nThe project is open for contributions. Open an [issue](https://github.com/indiscipline/catalay/issues/) for bugs, ideas and feature requests.\n\n\n# License\n\nCatalay and Catalay.jsx are licensed under GNU General Public License version 3.0 or later; See [`LICENSE.md`](LICENSE.md) for full details.\n\n[Catalay](catalay.svg) and [Catalay.jsx](catalay.jsx/catalay.jsx.svg) logos are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)\n\n\n# Disclaimer\n\nAdobe InDesign product and logo are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.\n\n[^killerfeature]: Why is this useful? Most catalogues represent real world items. Preserving more specifics of their appearance, such as their relative dimensions, in printed media helps users make informed decisions and helps the sales people justifying their pricing policies.\n\n[^donations]: There's [a couple of options](https://indiscipline.github.io/about#donations) on author's \"About\" page.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findiscipline%2Fcatalay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findiscipline%2Fcatalay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findiscipline%2Fcatalay/lists"}