{"id":13567792,"url":"https://github.com/bitbof/klecks","last_synced_at":"2026-01-06T04:54:24.405Z","repository":{"id":37997966,"uuid":"451938733","full_name":"bitbof/klecks","owner":"bitbof","description":"Community funded painting tool powering Kleki.com","archived":false,"fork":false,"pushed_at":"2024-09-28T19:26:47.000Z","size":6424,"stargazers_count":232,"open_issues_count":30,"forks_count":73,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-11-04T23:35:08.329Z","etag":null,"topics":["draw","image-editor","paint","paint-application","pixel-editor","typescript"],"latest_commit_sha":null,"homepage":"https://klecks.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitbof.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-01-25T15:45:06.000Z","updated_at":"2024-11-04T22:33:16.000Z","dependencies_parsed_at":"2024-08-01T13:39:55.073Z","dependency_job_id":null,"html_url":"https://github.com/bitbof/klecks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitbof%2Fklecks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitbof%2Fklecks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitbof%2Fklecks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitbof%2Fklecks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitbof","download_url":"https://codeload.github.com/bitbof/klecks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247111647,"owners_count":20885476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["draw","image-editor","paint","paint-application","pixel-editor","typescript"],"created_at":"2024-08-01T13:02:43.343Z","updated_at":"2026-01-06T04:54:24.399Z","avatar_url":"https://github.com/bitbof.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"🖌️ [Demo](https://kleki.com/) | ❓ [About](https://kleki.com/about/) | 📝 [Dev Blog](https://blog.kleki.com/)\n\n\u003cp style=\"text-align:center\"\u003e\n\u003cimg src=\"https://bitbof.com/stuff/2022-01-klecks/2022-03-klecks-github.png\" alt=\"Klecks\"\u003e\u003cbr\u003e\n\u003c/p\u003e\n\nKlecks (German for \"splash of color\", pronounced \"clex\") is the official open-source release of the community-funded online painting app [Kleki](https://kleki.com).\n\nKlecks can run in standalone mode (e.g. on [kleki.com](https://kleki.com)), or embed (e.g. on [2draw.net](https://2draw.net)) for drawing communities.\n\n## Features\n- Layers\n- Pen-support with pressure and stabilizer\n- Touch gestures\n- Brushes: pen, blend, sketchy, pixel, chemy, smudge, eraser\n- Tools: selection, paint bucket, text, shapes, gradient\n- WebGL-powered filters: blur, tilt-shift, curves, distort, noise.\n- Lineart extraction\n- Editing tools: transform, crop/expand, resize, perspective\n- Supports all major form factors: desktop, tablet and phone\n- Multi-language (10+ languages)\n\n---\n\nCreated by developer/artist [bitbof](https://bitbof.com)\n\n---\n\n# Commands\n- initialize via `npm ci` (requires node and npm to be installed already)\n- `npm run lang:build` - generate language files necessary to run Klecks\n- `npm run lang:build -- --missing` - generate language files and list all keys with a missing translation.\n- `npm run start` - dev server (to run it locally)\n- `npm run build` - build standalone into `/dist/`\n- `npm run build:embed` - build of embed into `/dist/`\n- `npm run build:help` - build help page (when clicking the question mark) into `/dist/`\n\n# Embed\nExample usage of the embed can be found under: `/examples/embed/`\n\n# Docker\nTo run Klecks (standalone) within a Docker container, run the following commands in project root:\n\n`docker-compose build`\n\n`docker-compose up -d`\n\nIt is then accessible through: http://localhost:5050\n\n# Contributing\n\nHow you can contribute to this project:\n- Bug reporting (detailed bug reports that are reproducible)\n- Contribute to a translation (see below)\n- Donate to this project (Klecks, Kleki) [Donate](https://kleki.com/donate/)\n\n# Translations\nAre you a native speaker or have advanced skills in a language? Any contribution by you is highly encouraged and appreciated!\n\n### Where are translation files?\nTranslations are located in `src/languages` where each translation is its own JSON5 file, e.g. `de.json5` for German.\nWithin such a file everything except `value` is to be kept in sync with `_base-en.json5`.\n\n### Structure of a translation file\n```json5\n{\n  // key by which this text is referenced in code\n  stabilizer: {\n    \n    // A hint, further explaining the text\n    hint: 'Common feature in drawing software to make lines smoother',\n    \n    // Original text (English)\n    original: 'Stabilizer',\n    \n    // Translated text\n    value: '抖动修正'\n  },\n  // ...\n}\n```\n\n### Creating/editing a translation\nTo **create a new translation** run `npm run lang:add \u003ccode\u003e`, which creates `src/languages/\u003ccode\u003e.json5`. You find all\n(ISO 639-1) language codes in `src/languages/languages.json`. The generated file will already include everything except `value`.\nTo **edit an existing translation**, simply edit one of the files in `src/languages`. If a language file is out of sync with\n`src/languages/_base-en.json5` (English), whatever key is out of sync will be ignored and fall back on English. English is the\nsource of truth. A translation cannot add new keys without them also being present in `_base-en.json5`.\n\nTo **see your changes** in Klecks, run `npm run lang:build`. It needs to be run whenever changes to `src/languages` are\nmade or it won't be up-to-date. Then build or start Klecks.\n\nA translation should try not to cause additional line-breaks in the UI if possible. Test to make sure translations\nfit the context of the application. Note, some texts are only visible in the standalone-version and vice versa with\nthe embed-version.\n\n### List of commands\n- `npm run lang:add \u003ccode\u003e` - creates new language file `src/languages/\u003ccode\u003e.json5`.\n  - See (ISO 639-1) language codes in `src/languages/languages.json`\n- `npm run lang:sync \u003ccode\u003e` - synchronizes with base file. (TODO)\n- `npm run lang:build` - generates JSON \u0026 TS files in `src/app/languages`\n  - Problems are printed to the command line output\n\n# Help fund this project\nKlecks and Kleki are community funded. [Donate today](https://kleki.com/donate/)\n\n# License\n\nbitbof © 2025 - Released under the MIT License. Icons by bitbof are public domain (excluding the Klecks logo, bitbof logo).\nWhile Kleki and Klecks are jointly developed, Kleki's license is separate from Klecks. Kleki must be licensed from bitbof.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitbof%2Fklecks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitbof%2Fklecks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitbof%2Fklecks/lists"}