{"id":49339291,"url":"https://github.com/acture/glyphweave","last_synced_at":"2026-04-27T03:02:24.050Z","repository":{"id":298428918,"uuid":"999697781","full_name":"Acture/glyphweave","owner":"Acture","description":"Shape-constrained SVG word clouds, built for speed. Fast Rust CLI + library.","archived":false,"fork":false,"pushed_at":"2026-03-06T09:07:00.000Z","size":263,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-06T18:07:20.532Z","etag":null,"topics":["cli","creative-coding","layout-algorithms","rust","svg","visualization","wordcloud"],"latest_commit_sha":null,"homepage":"https://docs.rs/glyphweave","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Acture.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-10T16:42:07.000Z","updated_at":"2026-03-06T09:07:04.000Z","dependencies_parsed_at":"2025-06-11T04:25:27.373Z","dependency_job_id":"9c370165-a0d2-438e-86f4-f9f7bb792277","html_url":"https://github.com/Acture/glyphweave","commit_stats":null,"previous_names":["acture/char-cloud","acture/glyphweave"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Acture/glyphweave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Acture%2Fglyphweave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Acture%2Fglyphweave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Acture%2Fglyphweave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Acture%2Fglyphweave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Acture","download_url":"https://codeload.github.com/Acture/glyphweave/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Acture%2Fglyphweave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32320683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":["cli","creative-coding","layout-algorithms","rust","svg","visualization","wordcloud"],"created_at":"2026-04-27T03:02:20.141Z","updated_at":"2026-04-27T03:02:24.045Z","avatar_url":"https://github.com/Acture.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GlyphWeave\n\n[![Crates.io](https://img.shields.io/crates/v/glyphweave)](https://crates.io/crates/glyphweave)\n[![Release Build](https://github.com/Acture/glyphweave/actions/workflows/release.yml/badge.svg)](https://github.com/Acture/glyphweave/actions/workflows/release.yml)\n[![License](https://img.shields.io/crates/l/glyphweave)](LICENSE)\n\n## Shape-constrained SVG word clouds, built for speed.\n\nGlyphWeave is a fast Rust CLI + library for generating bold SVG word clouds inside text and shape masks with multiple layout engines, reproducible runs, and palette control.\n\n- Fast by default\n- Visual by design\n- CLI + library\n\n## Example Gallery\n\nGenerated with fixed seeds, `fast-grid`, and `fonts/Roboto-Regular.ttf`.\n\n| RUST (`auto`) | AI (`complementary`) |\n|---|---|\n| ![RUST auto palette](docs/examples/example-fast-grid.svg) | ![AI complementary palette](docs/examples/example-complementary.svg) |\n\n| DATA (`analogous`) | CODE (`vibrant`) |\n|---|---|\n| ![DATA analogous palette](docs/examples/example-analogous.svg) | ![CODE vibrant palette](docs/examples/example-vibrant.svg) |\n\nReproduce these assets:\n\n```bash\nbash docs/examples/generate.sh\n```\n\n## Why It Feels Different\n\n- Fast layouts out of the box with `fast-grid`, plus `mcts`, `simulated-annealing`, `spiral-greedy`, and `random-baseline`\n- Strong visual control with palette strategies, weighted words, rotations, and SVG output\n- Reproducible runs through `--seed`, config files, and library integration for automation\n\n## Install\n\n```bash\ncargo install glyphweave\n```\n\nOptional: include embedded Noto Sans SC at build time.\n\n```bash\ncargo install glyphweave --features embedded_fonts\n```\n\n## Quick Start\n\n```bash\nglyphweave \\\n  --text \"RUST\" \\\n  --words \"cloud,speed,layout,mask,svg,grid\" \\\n  --canvas-size 1400,800 \\\n  --algorithm fast-grid \\\n  --palette auto \\\n  --seed 42 \\\n  --output output.svg\n```\n\nUse weighted input from file:\n\n```text\n# words.txt\nrust,3\ncloud,2\nlayout,2\nmask\nsvg\n```\n\n```bash\nglyphweave --text \"AI\" --word-file words.txt --algorithm spiral-greedy --rotations 0,90 --output ai.svg\n```\n\nShow all flags:\n\n```bash\nglyphweave --help\n```\n\n## Use Cases\n\n- Design assets and posters with text-shaped SVG output that stays easy to post-process\n- Data storytelling visuals where the shape matters as much as the words\n- Scripted and batch generation pipelines through the Rust API or CLI configs\n\n## Library Example\n\n```rust\nuse glyphweave::{\n\tgenerate, load_font_from_file, AlgorithmKind, CanvasConfig, CloudRequest, FontSizeSpec,\n\tRenderOptions, ShapeConfig, StyleConfig, WordEntry,\n};\nuse std::{path::Path, sync::Arc};\n\nlet font = load_font_from_file(Path::new(\"fonts/NotoSansSC-Regular.ttf\"))?;\nlet result = generate(CloudRequest {\n\tcanvas: CanvasConfig { width: 1200, height: 700, margin: 12 },\n\tshape: ShapeConfig { text: \"DATA\".into(), font_size: FontSizeSpec::AutoFit },\n\twords: vec![WordEntry::new(\"rust\", 2.0), WordEntry::new(\"svg\", 1.0)],\n\tstyle: StyleConfig::default(),\n\talgorithm: AlgorithmKind::FastGrid,\n\tratio_threshold: 0.85,\n\tmax_try_count: 10_000,\n\tseed: Some(7),\n\tfont: Arc::new(font),\n\trender: RenderOptions::default(),\n})?;\nstd::fs::write(\"cloud.svg\", result.svg)?;\n# Ok::\u003c(), Box\u003cdyn std::error::Error\u003e\u003e(())\n```\n\n## Algorithm Cheat Sheet\n\n| Algorithm | Speed | Fill Quality | Best Use Case |\n|---|---:|---:|---|\n| `fast-grid` | High | High | Default production choice |\n| `mcts` | Medium-Low | High | Search-driven quality improvements |\n| `simulated-annealing` | Medium-Low | Medium-High | Stochastic optimization and exploration |\n| `spiral-greedy` | Medium | Medium-High | Center-focused, stable visual structure |\n| `random-baseline` | Low | Medium | Baseline and regression comparison |\n\n## Fonts\n\n- Default behavior: try system fonts automatically\n- Use `--font \u003cpath\u003e` to pin a `.ttf/.otf`\n- Use `--choose-system-font` for interactive font selection\n- Embedded font feature: `embedded_fonts` (off by default)\n- Embedded font: Noto Sans SC, SIL Open Font License 1.1\n- License text: `fonts/OFL-NotoSansSC.txt`\n\n## Config\n\nConfig precedence (later overrides earlier):\n\n1. `~/.config/glyphweave/config.toml` (or `$XDG_CONFIG_HOME/glyphweave/config.toml`)\n2. `.glyphweave.toml` in current directory\n3. `--config \u003cpath\u003e`\n4. CLI flags\n\nMinimal example:\n\n```toml\ncanvas_size = [1600, 900]\nalgorithm = \"fast-grid\"\npalette = \"analogous\"\npalette_base = \"#0EA5E9\"\nratio = 0.85\nmax_tries = 12000\nrotations = [0, 90]\n```\n\n## Documentation\n\n- [Architecture](docs/architecture.md)\n- [Library API](docs/library-api.md)\n- [Algorithms](docs/algorithms.md)\n- [Tuning](docs/tuning.md)\n- [Migration v0.2](docs/migration-v0.2.md)\n\n## For Maintainers\n\nThe `Release` workflow supports tag-driven and manual publishing to GitHub Releases, crates.io, and the `Acture/homebrew-ac` tap.\n\n- Secrets: `HOMEBREW_TAP_TOKEN`\n- Manual inputs: `tag`, `upload_assets`, `publish_cargo`, `update_homebrew`\n- crates.io publishing uses Trusted Publishing via GitHub OIDC; configure `Acture/glyphweave`, workflow `release.yml`, and environment `release` as a trusted publisher on crates.io\n- The first publish of a brand-new crate can be done locally; once the crate exists, rerun the workflow or use future tags for Trusted Publishing\n- Use the `release` environment if you gate publishing with environment approvals\n\n## License\n\nAGPL-3.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facture%2Fglyphweave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facture%2Fglyphweave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facture%2Fglyphweave/lists"}