python-lucide 0.4.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_lucide-0.4.0 → python_lucide-0.5.1}/PKG-INFO +57 -1
- {python_lucide-0.4.0 → python_lucide-0.5.1}/README.md +55 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/pyproject.toml +8 -3
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/cli.py +134 -29
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/config.py +11 -12
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/data/gemini-icon-descriptions.jsonl +35 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/data/lucide-icon-clusters.json +4829 -4674
- python_lucide-0.5.1/src/lucide/data/lucide-icons.db +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/search.py +1 -1
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/cli_test.py +105 -0
- python_lucide-0.4.0/src/lucide/data/lucide-icons.db +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/__init__.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/build_clusters.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/build_search.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/core.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/data/__init__.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/db.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/src/lucide/dev_utils.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/__init__.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/build_clusters_test.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/build_search_test.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/conftest.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/core_test.py +0 -0
- {python_lucide-0.4.0 → python_lucide-0.5.1}/tests/search_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: python-lucide
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A Python package for working with Lucide icons
|
|
5
5
|
Keywords: lucide,icons,svg,sqlite
|
|
6
6
|
Author: Mike Macpherson
|
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.14
|
|
17
17
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Requires-Dist: cairosvg>=2.7.0 ; extra == 'search'
|
|
18
19
|
Requires-Dist: fastembed>=0.4.0 ; extra == 'search'
|
|
19
20
|
Requires-Python: >=3.10
|
|
20
21
|
Project-URL: Bug Tracker, https://github.com/mmacpherson/python-lucide/issues
|
|
@@ -43,6 +44,7 @@ in your Python projects, with no javascript in sight.
|
|
|
43
44
|
|
|
44
45
|
## Features
|
|
45
46
|
- 🎨 **Access 1600+ Lucide icons** directly from Python
|
|
47
|
+
- 🔍 **Semantic search** - find icons by meaning, in the terminal or [in the browser](https://mmacpherson.github.io/python-lucide/)
|
|
46
48
|
- 🛠 **Customize icons** with classes, sizes, colors, and other SVG attributes
|
|
47
49
|
- 🚀 **Framework-friendly** with examples for FastHTML, Flask, Django, and more
|
|
48
50
|
- 📦 **Lightweight** with minimal dependencies
|
|
@@ -83,6 +85,60 @@ lucide_icon("user", fill="currentColor") # Inherit color from CSS
|
|
|
83
85
|
lucide_icon("user", stroke="#ff6b6b") # Hex colors work too
|
|
84
86
|
```
|
|
85
87
|
|
|
88
|
+
## Semantic Search
|
|
89
|
+
|
|
90
|
+
Find icons by describing what you mean, not what they're called — in English
|
|
91
|
+
or [50+ languages](https://mmacpherson.github.io/python-lucide/):
|
|
92
|
+
|
|
93
|
+
<p align="center">
|
|
94
|
+
<a href="https://mmacpherson.github.io/python-lucide/">
|
|
95
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-english.png" width="49%" alt="Searching "celebrate a big achievement" returns trophy, award, medal, party-popper">
|
|
96
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-multilingual.png" width="49%" alt="Searching in Japanese with the multilingual model returns key, user-key, lock icons">
|
|
97
|
+
</a>
|
|
98
|
+
</p>
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# One-off, no install (requires uv)
|
|
102
|
+
uvx --from "python-lucide[search]" lucide search "waiting for a download"
|
|
103
|
+
|
|
104
|
+
# Or install the search extra
|
|
105
|
+
pip install "python-lucide[search]"
|
|
106
|
+
lucide search "celebrate a big achievement"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-cli.png" width="360" alt="Terminal output of lucide search: each result icon renders inline next to its name and match score">
|
|
110
|
+
|
|
111
|
+
In terminals supporting the Kitty graphics protocol (kitty, Ghostty,
|
|
112
|
+
WezTerm), the icons render inline as above — inside tmux too, with
|
|
113
|
+
`tmux set -g allow-passthrough on`. Elsewhere you get the plain text
|
|
114
|
+
list. (Rendering uses the cairo system library; if it's missing, the
|
|
115
|
+
CLI prints a hint.)
|
|
116
|
+
|
|
117
|
+
Icons are matched against AI-generated descriptions using the same embedding
|
|
118
|
+
model the [web app](https://mmacpherson.github.io/python-lucide/) uses,
|
|
119
|
+
so descriptive phrases ("an idea just occurred to me") work better than
|
|
120
|
+
keywords. Options:
|
|
121
|
+
|
|
122
|
+
- `--model multilingual` — search in 50+ languages (default `bge-small` ranks
|
|
123
|
+
best for English)
|
|
124
|
+
- `--limit N` — number of results; `--verbose` — include each icon's description
|
|
125
|
+
|
|
126
|
+
The first search downloads the embedding model (~67 MB) and the pre-built
|
|
127
|
+
search index (11 MB); both are cached, and every search after that runs
|
|
128
|
+
locally in well under a second.
|
|
129
|
+
|
|
130
|
+
The same search is available as a Python API:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from lucide.search import search_icons
|
|
134
|
+
|
|
135
|
+
for r in search_icons("secure login", limit=5):
|
|
136
|
+
print(r.name, r.score)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Prefer not to install anything? The [browser version](https://mmacpherson.github.io/python-lucide/)
|
|
140
|
+
runs the whole pipeline client-side.
|
|
141
|
+
|
|
86
142
|
## Framework Integration Examples
|
|
87
143
|
|
|
88
144
|
### Starlette
|
|
@@ -18,6 +18,7 @@ in your Python projects, with no javascript in sight.
|
|
|
18
18
|
|
|
19
19
|
## Features
|
|
20
20
|
- 🎨 **Access 1600+ Lucide icons** directly from Python
|
|
21
|
+
- 🔍 **Semantic search** - find icons by meaning, in the terminal or [in the browser](https://mmacpherson.github.io/python-lucide/)
|
|
21
22
|
- 🛠 **Customize icons** with classes, sizes, colors, and other SVG attributes
|
|
22
23
|
- 🚀 **Framework-friendly** with examples for FastHTML, Flask, Django, and more
|
|
23
24
|
- 📦 **Lightweight** with minimal dependencies
|
|
@@ -58,6 +59,60 @@ lucide_icon("user", fill="currentColor") # Inherit color from CSS
|
|
|
58
59
|
lucide_icon("user", stroke="#ff6b6b") # Hex colors work too
|
|
59
60
|
```
|
|
60
61
|
|
|
62
|
+
## Semantic Search
|
|
63
|
+
|
|
64
|
+
Find icons by describing what you mean, not what they're called — in English
|
|
65
|
+
or [50+ languages](https://mmacpherson.github.io/python-lucide/):
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<a href="https://mmacpherson.github.io/python-lucide/">
|
|
69
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-english.png" width="49%" alt="Searching "celebrate a big achievement" returns trophy, award, medal, party-popper">
|
|
70
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-multilingual.png" width="49%" alt="Searching in Japanese with the multilingual model returns key, user-key, lock icons">
|
|
71
|
+
</a>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# One-off, no install (requires uv)
|
|
76
|
+
uvx --from "python-lucide[search]" lucide search "waiting for a download"
|
|
77
|
+
|
|
78
|
+
# Or install the search extra
|
|
79
|
+
pip install "python-lucide[search]"
|
|
80
|
+
lucide search "celebrate a big achievement"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
<img src="https://raw.githubusercontent.com/mmacpherson/python-lucide/main/.github/images/search-cli.png" width="360" alt="Terminal output of lucide search: each result icon renders inline next to its name and match score">
|
|
84
|
+
|
|
85
|
+
In terminals supporting the Kitty graphics protocol (kitty, Ghostty,
|
|
86
|
+
WezTerm), the icons render inline as above — inside tmux too, with
|
|
87
|
+
`tmux set -g allow-passthrough on`. Elsewhere you get the plain text
|
|
88
|
+
list. (Rendering uses the cairo system library; if it's missing, the
|
|
89
|
+
CLI prints a hint.)
|
|
90
|
+
|
|
91
|
+
Icons are matched against AI-generated descriptions using the same embedding
|
|
92
|
+
model the [web app](https://mmacpherson.github.io/python-lucide/) uses,
|
|
93
|
+
so descriptive phrases ("an idea just occurred to me") work better than
|
|
94
|
+
keywords. Options:
|
|
95
|
+
|
|
96
|
+
- `--model multilingual` — search in 50+ languages (default `bge-small` ranks
|
|
97
|
+
best for English)
|
|
98
|
+
- `--limit N` — number of results; `--verbose` — include each icon's description
|
|
99
|
+
|
|
100
|
+
The first search downloads the embedding model (~67 MB) and the pre-built
|
|
101
|
+
search index (11 MB); both are cached, and every search after that runs
|
|
102
|
+
locally in well under a second.
|
|
103
|
+
|
|
104
|
+
The same search is available as a Python API:
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
from lucide.search import search_icons
|
|
108
|
+
|
|
109
|
+
for r in search_icons("secure login", limit=5):
|
|
110
|
+
print(r.name, r.score)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Prefer not to install anything? The [browser version](https://mmacpherson.github.io/python-lucide/)
|
|
114
|
+
runs the whole pipeline client-side.
|
|
115
|
+
|
|
61
116
|
## Framework Integration Examples
|
|
62
117
|
|
|
63
118
|
### Starlette
|
|
@@ -9,9 +9,14 @@ dev = [
|
|
|
9
9
|
"hdbscan>=0.8.0",
|
|
10
10
|
"mypy-extensions>=1.0.0",
|
|
11
11
|
"mypy>=1.0.0",
|
|
12
|
+
# Floor keeps the resolver off ancient numba/llvmlite, which fail to build
|
|
13
|
+
# from source when numpy resolves above modern numba's cap.
|
|
14
|
+
"numba>=0.60",
|
|
12
15
|
"plotly>=5.0.0",
|
|
13
16
|
"pre-commit>=3.0.0",
|
|
14
|
-
|
|
17
|
+
# Cap below 2: pydantic-ai v2 removed Agent(output_retries=...), which
|
|
18
|
+
# build_clusters.py relies on. Lift the cap when migrating to the v2 API.
|
|
19
|
+
"pydantic-ai-slim[google]>=1.0.0,<2",
|
|
15
20
|
"pytest-cov>=4.0.0",
|
|
16
21
|
"pytest>=7.0.0",
|
|
17
22
|
"ruff>=0.1.0",
|
|
@@ -41,10 +46,10 @@ license = {text = "MIT"}
|
|
|
41
46
|
name = "python-lucide"
|
|
42
47
|
readme = "README.md"
|
|
43
48
|
requires-python = ">=3.10"
|
|
44
|
-
version = "0.
|
|
49
|
+
version = "0.5.1"
|
|
45
50
|
|
|
46
51
|
[project.optional-dependencies]
|
|
47
|
-
search = ["fastembed>=0.4.0"]
|
|
52
|
+
search = ["cairosvg>=2.7.0", "fastembed>=0.4.0"]
|
|
48
53
|
|
|
49
54
|
[project.scripts]
|
|
50
55
|
check-lucide-version = "lucide.dev_utils:print_version_status"
|
|
@@ -529,6 +529,40 @@ def _cmd_build_search(args: argparse.Namespace) -> int:
|
|
|
529
529
|
return 0
|
|
530
530
|
|
|
531
531
|
|
|
532
|
+
def _first_run_downloads(model: str) -> list[str]:
|
|
533
|
+
"""Human-readable one-time downloads the next search will trigger.
|
|
534
|
+
|
|
535
|
+
Best-effort: peeks at fastembed's model cache and the search-DB cache;
|
|
536
|
+
any surprise in their layout just means the notice is skipped.
|
|
537
|
+
"""
|
|
538
|
+
from .search import search_available # noqa: PLC0415
|
|
539
|
+
|
|
540
|
+
pending = []
|
|
541
|
+
try:
|
|
542
|
+
from fastembed import TextEmbedding # noqa: PLC0415
|
|
543
|
+
from fastembed.common.utils import define_cache_dir # noqa: PLC0415
|
|
544
|
+
|
|
545
|
+
fastembed_name = EMBEDDING_MODELS[model].fastembed_model
|
|
546
|
+
meta = next(
|
|
547
|
+
m
|
|
548
|
+
for m in TextEmbedding.list_supported_models()
|
|
549
|
+
if m["model"] == fastembed_name
|
|
550
|
+
)
|
|
551
|
+
hf_repo = (meta.get("sources") or {}).get("hf") or ""
|
|
552
|
+
size_mb = round(meta["size_in_GB"] * 1000)
|
|
553
|
+
model_dir = (
|
|
554
|
+
pathlib.Path(define_cache_dir(None))
|
|
555
|
+
/ f"models--{hf_repo.replace('/', '--')}"
|
|
556
|
+
)
|
|
557
|
+
if hf_repo and not model_dir.exists():
|
|
558
|
+
pending.append(f"embedding model (~{size_mb} MB)")
|
|
559
|
+
except Exception:
|
|
560
|
+
pass
|
|
561
|
+
if not search_available():
|
|
562
|
+
pending.append("search index (11 MB)")
|
|
563
|
+
return pending
|
|
564
|
+
|
|
565
|
+
|
|
532
566
|
def _cmd_search(args: argparse.Namespace) -> int:
|
|
533
567
|
"""Handle ``lucide search``."""
|
|
534
568
|
import os # noqa: PLC0415
|
|
@@ -549,6 +583,19 @@ def _cmd_search(args: argparse.Namespace) -> int:
|
|
|
549
583
|
if candidate.exists():
|
|
550
584
|
os.environ["LUCIDE_SEARCH_DB_PATH"] = str(candidate)
|
|
551
585
|
|
|
586
|
+
# Downloading without a token is expected here; the hf_xet download
|
|
587
|
+
# backend's HF_TOKEN nudge reads like an error mid-download, so keep
|
|
588
|
+
# warnings from its logger out of the way
|
|
589
|
+
logging.getLogger("hf_xet").setLevel(logging.ERROR)
|
|
590
|
+
|
|
591
|
+
pending = _first_run_downloads(args.model)
|
|
592
|
+
if pending:
|
|
593
|
+
print(
|
|
594
|
+
f"First run: downloading {' and '.join(pending)} — "
|
|
595
|
+
"cached for future searches.",
|
|
596
|
+
file=sys.stderr,
|
|
597
|
+
)
|
|
598
|
+
|
|
552
599
|
try:
|
|
553
600
|
results = search_icons(args.query, limit=args.limit, model=args.model)
|
|
554
601
|
except Exception as e:
|
|
@@ -559,7 +606,9 @@ def _cmd_search(args: argparse.Namespace) -> int:
|
|
|
559
606
|
print("No results found.")
|
|
560
607
|
return 0
|
|
561
608
|
|
|
562
|
-
show_icons =
|
|
609
|
+
show_icons, graphics_tip = _graphics_support()
|
|
610
|
+
if graphics_tip:
|
|
611
|
+
print(graphics_tip, file=sys.stderr)
|
|
563
612
|
svgs: dict[str, str] = {}
|
|
564
613
|
if show_icons:
|
|
565
614
|
svgs = _load_svgs_for_results([r.name for r in results])
|
|
@@ -570,36 +619,77 @@ def _cmd_search(args: argparse.Namespace) -> int:
|
|
|
570
619
|
cyan = "\033[38;2;100;200;220m"
|
|
571
620
|
|
|
572
621
|
for r in results:
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
622
|
+
prefix = " "
|
|
623
|
+
if show_icons:
|
|
624
|
+
drawn = r.name in svgs and _display_kitty_image(svgs[r.name])
|
|
625
|
+
# The image sits in columns 1-2 (cursor untouched, C=1), so
|
|
626
|
+
# step over it to keep names aligned whether or not it drew
|
|
627
|
+
prefix = "\033[3C" if drawn else " "
|
|
628
|
+
print(f"{prefix}{bold}{cyan}{r.name}{reset} {dim}{r.score:.0%}{reset}")
|
|
576
629
|
if args.verbose and r.description:
|
|
577
630
|
print(f" {dim}{r.description[:100]}{reset}")
|
|
578
|
-
if show_icons:
|
|
579
|
-
print()
|
|
580
631
|
|
|
581
632
|
return 0
|
|
582
633
|
|
|
583
634
|
|
|
584
|
-
def
|
|
585
|
-
"""
|
|
635
|
+
def _graphics_support() -> tuple[bool, str | None]:
|
|
636
|
+
"""Decide whether to render inline icons via the Kitty graphics protocol.
|
|
586
637
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
638
|
+
Returns:
|
|
639
|
+
A ``(show_icons, tip)`` pair. *tip* is a one-line stderr hint for
|
|
640
|
+
the cases where the terminal could show icons but something the
|
|
641
|
+
user can fix is in the way (tmux passthrough off, cairosvg not
|
|
642
|
+
installed) — silently dropping the feature proved confusing.
|
|
590
643
|
"""
|
|
591
644
|
import os # noqa: PLC0415
|
|
592
645
|
|
|
593
|
-
# tmux blocks reliable graphics rendering
|
|
594
|
-
if os.environ.get("TMUX") or "screen" in os.environ.get("TERM", ""):
|
|
595
|
-
return False
|
|
596
|
-
|
|
597
646
|
term = os.environ.get("TERM_PROGRAM", "")
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
647
|
+
host_capable = (
|
|
648
|
+
term in ("ghostty", "kitty", "WezTerm")
|
|
649
|
+
or bool(os.environ.get("GHOSTTY_RESOURCES_DIR"))
|
|
650
|
+
or bool(os.environ.get("KITTY_WINDOW_ID"))
|
|
651
|
+
or "kitty" in os.environ.get("TERM", "")
|
|
652
|
+
)
|
|
653
|
+
if not host_capable:
|
|
654
|
+
return False, None
|
|
655
|
+
|
|
656
|
+
if os.environ.get("TMUX") and not _tmux_allows_passthrough():
|
|
657
|
+
return False, (
|
|
658
|
+
"Tip: your terminal can show icons inline, but tmux blocks "
|
|
659
|
+
"them — run: tmux set -g allow-passthrough on"
|
|
660
|
+
)
|
|
661
|
+
|
|
662
|
+
try:
|
|
663
|
+
import cairosvg # noqa: F401, PLC0415
|
|
664
|
+
except ImportError:
|
|
665
|
+
return False, (
|
|
666
|
+
"Tip: your terminal can show icons inline — install cairosvg "
|
|
667
|
+
"to enable (pip install cairosvg, or uvx --with cairosvg)."
|
|
668
|
+
)
|
|
669
|
+
except OSError:
|
|
670
|
+
# cairosvg is installed but the native cairo library is absent;
|
|
671
|
+
# cairocffi raises OSError (not ImportError) from its dlopen
|
|
672
|
+
return False, (
|
|
673
|
+
"Tip: inline icons need the cairo system library "
|
|
674
|
+
"(e.g. apt install libcairo2, or brew install cairo)."
|
|
675
|
+
)
|
|
676
|
+
|
|
677
|
+
return True, None
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
def _tmux_allows_passthrough() -> bool:
|
|
681
|
+
"""Check whether the current tmux pane permits escape passthrough."""
|
|
682
|
+
try:
|
|
683
|
+
proc = subprocess.run(
|
|
684
|
+
["tmux", "show", "-Apv", "allow-passthrough"],
|
|
685
|
+
capture_output=True,
|
|
686
|
+
text=True,
|
|
687
|
+
timeout=2,
|
|
688
|
+
check=False,
|
|
689
|
+
)
|
|
690
|
+
except Exception:
|
|
691
|
+
return False
|
|
692
|
+
return proc.stdout.strip() in ("on", "all")
|
|
603
693
|
|
|
604
694
|
|
|
605
695
|
def _load_svgs_for_results(names: list[str]) -> dict[str, str]:
|
|
@@ -619,30 +709,45 @@ def _load_svgs_for_results(names: list[str]) -> dict[str, str]:
|
|
|
619
709
|
return svgs
|
|
620
710
|
|
|
621
711
|
|
|
622
|
-
def _display_kitty_image(svg_content: str) ->
|
|
623
|
-
"""Render an SVG
|
|
712
|
+
def _display_kitty_image(svg_content: str) -> bool:
|
|
713
|
+
"""Render an SVG as a one-row inline image at the cursor position.
|
|
714
|
+
|
|
715
|
+
Emits with ``C=1`` so the cursor stays put and the caller controls
|
|
716
|
+
layout with ordinary cursor movement — which is also what makes tmux
|
|
717
|
+
passthrough safe: tmux never sees the image escape, and everything
|
|
718
|
+
that *does* move the cursor goes through tmux normally.
|
|
719
|
+
|
|
720
|
+
Returns:
|
|
721
|
+
True if an image escape was written.
|
|
722
|
+
"""
|
|
624
723
|
import base64 # noqa: PLC0415
|
|
625
|
-
import
|
|
724
|
+
import os # noqa: PLC0415
|
|
626
725
|
|
|
627
726
|
try:
|
|
628
727
|
import cairosvg # noqa: PLC0415
|
|
629
|
-
except ImportError:
|
|
630
|
-
return
|
|
728
|
+
except (ImportError, OSError):
|
|
729
|
+
return False
|
|
631
730
|
|
|
632
731
|
try:
|
|
633
732
|
# Insert a white background rect so icons show on any terminal bg
|
|
634
733
|
bg_rect = '<rect width="100%" height="100%" fill="white" rx="3"/>'
|
|
635
734
|
padded_svg = svg_content.replace(">", f">{bg_rect}", 1)
|
|
735
|
+
# Rendered larger than displayed; the terminal downscales, which
|
|
736
|
+
# keeps strokes crisp on hidpi displays
|
|
636
737
|
png_data: bytes = cairosvg.svg2png(
|
|
637
738
|
bytestring=padded_svg.encode("utf-8"),
|
|
638
|
-
output_width=
|
|
639
|
-
output_height=
|
|
739
|
+
output_width=96,
|
|
740
|
+
output_height=96,
|
|
640
741
|
)
|
|
641
742
|
b64 = base64.b64encode(png_data).decode("ascii")
|
|
642
|
-
|
|
743
|
+
seq = f"\033_Gf=100,t=d,a=T,r=1,c=2,C=1,q=2;{b64}\033\\"
|
|
744
|
+
if os.environ.get("TMUX"):
|
|
745
|
+
seq = "\033Ptmux;" + seq.replace("\033", "\033\033") + "\033\\"
|
|
746
|
+
sys.stdout.write(seq)
|
|
643
747
|
sys.stdout.flush()
|
|
644
748
|
except Exception:
|
|
645
|
-
|
|
749
|
+
return False
|
|
750
|
+
return True
|
|
646
751
|
|
|
647
752
|
|
|
648
753
|
def _cmd_cluster(args: argparse.Namespace) -> int:
|
|
@@ -6,7 +6,7 @@ This module contains default configuration values used throughout the package.
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
|
|
8
8
|
# Default Lucide tag to use when building the icon database
|
|
9
|
-
DEFAULT_LUCIDE_TAG = "1.
|
|
9
|
+
DEFAULT_LUCIDE_TAG = "1.25.0"
|
|
10
10
|
|
|
11
11
|
# Default size for the LRU cache used by lucide_icon function
|
|
12
12
|
DEFAULT_ICON_CACHE_SIZE = 128
|
|
@@ -35,8 +35,10 @@ class EmbeddingModelConfig:
|
|
|
35
35
|
pooling: transformers.js pooling mode ("mean" or "cls").
|
|
36
36
|
web_dtype: transformers.js quantization. Document vectors always
|
|
37
37
|
come from fastembed (fp32), so a quantized browser model only
|
|
38
|
-
perturbs the query vector — q8 stays ~0.
|
|
39
|
-
which is ranking-equivalent
|
|
38
|
+
perturbs the query vector — q8 stays ~0.985-0.996 cosine to
|
|
39
|
+
fp32 across our models, which is ranking-equivalent (top-1
|
|
40
|
+
changes are swaps between near-tied results), and roughly
|
|
41
|
+
quarters the download.
|
|
40
42
|
query_prefix: Prefix prepended to queries (asymmetric retrieval).
|
|
41
43
|
document_prefix: Prefix prepended to documents at build time.
|
|
42
44
|
label: Human-facing label for the web UI model toggle.
|
|
@@ -53,23 +55,20 @@ class EmbeddingModelConfig:
|
|
|
53
55
|
label: str = ""
|
|
54
56
|
|
|
55
57
|
|
|
58
|
+
# Two models, not three: at q8 bge-small is 33 MB, close enough to
|
|
59
|
+
# all-MiniLM's 22 MB that a separate "Faster" tier bought nothing —
|
|
60
|
+
# evaluated against bge-base and arctic-embed-m (both ~104 MB q8) too,
|
|
61
|
+
# and neither beat bge-small on this corpus.
|
|
56
62
|
EMBEDDING_MODELS: dict[str, EmbeddingModelConfig] = {
|
|
57
|
-
"minilm": EmbeddingModelConfig(
|
|
58
|
-
id="minilm",
|
|
59
|
-
fastembed_model="sentence-transformers/all-MiniLM-L6-v2",
|
|
60
|
-
web_model="Xenova/all-MiniLM-L6-v2",
|
|
61
|
-
dim=384,
|
|
62
|
-
pooling="mean",
|
|
63
|
-
label="Faster",
|
|
64
|
-
),
|
|
65
63
|
"bge-small": EmbeddingModelConfig(
|
|
66
64
|
id="bge-small",
|
|
67
65
|
fastembed_model="BAAI/bge-small-en-v1.5",
|
|
68
66
|
web_model="Xenova/bge-small-en-v1.5",
|
|
69
67
|
dim=384,
|
|
70
68
|
pooling="cls",
|
|
69
|
+
web_dtype="q8",
|
|
71
70
|
query_prefix="Represent this sentence for searching relevant passages: ",
|
|
72
|
-
label="
|
|
71
|
+
label="English",
|
|
73
72
|
),
|
|
74
73
|
"multilingual": EmbeddingModelConfig(
|
|
75
74
|
id="multilingual",
|
|
@@ -1731,3 +1731,38 @@
|
|
|
1731
1731
|
{"name": "astroid", "description": "This icon depicts a stylized four-pointed star with smooth, curved edges, resembling a rounded diamond. It symbolizes abstract shapes, mathematical concepts, and perhaps the spark of artificial intelligence or innovation.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.17.0", "tags": ["star", "math", "shape", "curve", "sharp", "four-pointed", "hypocycloid", "ai", "artificial intelligence"], "categories": ["shapes", "math"], "timestamp": "2026-06-10T05:07:55.847698+00:00"}
|
|
1732
1732
|
{"name": "heart-x", "description": "This icon depicts a heart shape with a large \"X\" superimposed on its right side. It visually represents the removal or cancellation of a liked or favored item, signifying rejection, dismissal, or the act of clearing a selection.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.17.0", "tags": ["unlike", "unfavorite", "remove", "reject", "dismiss", "delete", "clear"], "categories": ["social", "multimedia", "design", "shapes"], "timestamp": "2026-06-10T05:07:56.077791+00:00"}
|
|
1733
1733
|
{"name": "waves-vertical", "description": "Three wavy vertical lines ascend, representing rising steam or heat. This icon conveys concepts of warmth, boiling, and the presence of vapor or smoke, suggesting a hot or steamy environment.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.17.0", "tags": ["steam", "warmth", "temperature", "burn", "hot", "boiling", "heat", "smoke", "vapor", "smell", "aroma", "sauna"], "categories": ["weather", "sustainability"], "timestamp": "2026-06-10T05:07:56.583232+00:00"}
|
|
1734
|
+
{"name": "banknote-check", "description": "This icon depicts a banknote with a checkmark. It represents successful financial transactions, verified payments, or the completion of a monetary task. It conveys a sense of approval, accuracy, and completion in financial contexts.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["banknote", "bill", "currency", "payment", "money", "finance", "document", "verification", "tick", "verified", "accepted", "done", "complete", "found", "paid", "task", "check", "success"], "categories": ["finance"], "timestamp": "2026-07-20T17:53:14.910658+00:00"}
|
|
1735
|
+
{"name": "list-sort-ascending", "description": "This icon visually depicts three horizontal lines of increasing length, stacked from shortest to longest. It represents the concept of ascending order, arranging items from smallest to largest, or a rising sequence.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["list", "order", "arrangement", "organization", "sequence", "ranking", "categories", "presentation", "filter", "sort", "ascending", "descending", "increasing", "decreasing", "rising", "falling"], "categories": ["text", "layout"], "timestamp": "2026-07-20T17:53:14.963694+00:00"}
|
|
1736
|
+
{"name": "pencil-sparkles", "description": "This icon visually depicts a pencil with subtle sparkles. It represents creativity, inspiration, and the magical touch of artistry in editing, writing, or design. It evokes a sense of enhanced creation and effortless ingenuity.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["edit", "ai", "tools", "smart", "create", "draw", "sketch", "draft", "writer", "writing", "stationery", "artist", "magic", "wizard", "magician"], "categories": ["design", "cursors", "tools", "text", "photography"], "timestamp": "2026-07-20T17:53:15.018806+00:00"}
|
|
1737
|
+
{"name": "ad", "description": "This icon visually represents a bordered rectangle containing the bold letters \"AD\". It symbolizes advertising, promotions, and paid content, often associated with marketing campaigns, monetization, and brand partnerships.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["advert", "affiliate", "brand", "campaign", "commercial", "marketing", "monetize", "paid", "partner", "promo", "sponsor"], "categories": ["multimedia", "notifications"], "timestamp": "2026-07-20T17:53:15.032154+00:00"}
|
|
1738
|
+
{"name": "phi", "description": "This icon visually represents the Greek letter Phi (Φ or φ). It symbolizes mathematical constants like the golden ratio, representing harmony and proportion, and concepts in physics such as magnetic flux. It evokes ideas of balance, flow, and fundamental scientific principles.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["math", "golden-ratio", "symbol", "greek", "letter", "typography", "constant", "flux", "magnetic-flux"], "categories": ["math", "science"], "timestamp": "2026-07-20T17:53:15.065751+00:00"}
|
|
1739
|
+
{"name": "clock-arrow-right", "description": "This icon visually represents a clock face with its second hand transformed into an arrow pointing right. It symbolizes the passage of time, moving forward, or a time-based action to be completed.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["time", "watch", "alarm", "range", "unassign"], "categories": ["time", "people", "arrows"], "timestamp": "2026-07-20T17:53:15.099878+00:00"}
|
|
1740
|
+
{"name": "circle-euro", "description": "This icon features the euro symbol (€) enclosed within a circle. It visually represents the European currency, symbolizing finance, economics, and transactions related to money and payments within the European context.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["symbol", "economy", "banking", "europe", "€", "euro", "currency", "money", "payment", "coin", "finance", "financial", "exchange"], "categories": ["shopping", "finance"], "timestamp": "2026-07-20T17:53:15.100276+00:00"}
|
|
1741
|
+
{"name": "paper-bag", "description": "This icon visually represents a simple, folded paper bag with a handle. It conveys concepts of takeout food, packaging, storage, and eco-friendly shopping, suggesting a convenient way to carry goods or leftovers.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "package", "lunch", "takeout", "eco-friendly", "kraft", "retail", "doggybag"], "categories": ["food-beverage", "shopping"], "timestamp": "2026-07-20T17:53:15.118516+00:00"}
|
|
1742
|
+
{"name": "database-minus", "description": "This icon depicts a cylindrical database symbol with a horizontal line underneath, signifying removal. It represents actions like deleting data, reducing storage, or subtracting from a dataset, conveying a sense of data management and reduction.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "minus", "remove", "delete", "reduce"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.119427+00:00"}
|
|
1743
|
+
{"name": "database-arrow-down", "description": "This icon depicts a stack of database cylinders with an arrow pointing downwards from the lowest cylinder. It represents the action of downloading or exporting data from storage, signifying backup, retrieval, or data transfer operations.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "export", "download", "backup", "pull", "downsize"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.154519+00:00"}
|
|
1744
|
+
{"name": "database-check", "description": "This icon visually represents a database cylinder with a checkmark beside it. It signifies successful data storage, verification, confirmation, or completion of a database operation, conveying a sense of reliability and achieved validation.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "check", "success", "valid", "verified", "confirmed", "complete"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.167795+00:00"}
|
|
1745
|
+
{"name": "database-x", "description": "This icon depicts a database cylinder with a prominent \"x\" mark overlaid. It represents a corrupted, invalid, or inaccessible database, signifying an error, failure, or the act of denying or removing access to stored information.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "x", "error", "failed", "invalid", "rejected", "denied", "clear", "remove", "disconnect"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.168865+00:00"}
|
|
1746
|
+
{"name": "eye-dashed", "description": "This icon visually represents an eye with a dashed outline, suggesting something obscured or partially visible. It evokes concepts of hiddenness, invisibility, or a protected view, hinting at concealed information or the act of masking something from sight.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["view", "watch", "see", "hide", "conceal", "mask", "hidden", "invisible", "visibility", "vision"], "categories": ["accessibility", "photography", "design", "security"], "timestamp": "2026-07-20T17:53:15.200901+00:00"}
|
|
1747
|
+
{"name": "podium", "description": "This icon depicts a three-tiered podium with the number \"1\" prominently displayed above the highest step. It symbolizes victory, achievement, and recognition of top rankings in competitions, representing success and the celebration of winners.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["award", "stage", "winner", "celebration", "performance", "medal", "success", "achievement", "highlight", "ranking", "winning", "place", "placing", "leaderboard", "first", "second", "third", "gold", "silver", "bronze"], "categories": ["sports", "gaming"], "timestamp": "2026-07-20T17:53:15.202102+00:00"}
|
|
1748
|
+
{"name": "database-arrow-up", "description": "This icon depicts a stack of database cylinders with an upward-pointing arrow emerging from them. It visually represents the action of uploading, backing up, or importing data from a storage source, signifying data transfer and data augmentation.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "import", "upload", "backup", "push", "upscale"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.223015+00:00"}
|
|
1749
|
+
{"name": "clock-arrow-left", "description": "This icon visually represents a clock face with an arrow pointing counter-clockwise. It symbolizes the concept of time moving backward, or a rewind action. It can also suggest returning to a previous state or a reset of time.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["time", "watch", "alarm", "assign", "range"], "categories": ["time"], "timestamp": "2026-07-20T17:53:15.235044+00:00"}
|
|
1750
|
+
{"name": "database-plus", "description": "This icon depicts a stacked database cylinder with a plus symbol. It represents the act of adding new data or expanding storage capacity, signifying creation and new entries for a server or memory system.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["storage", "memory", "bytes", "server", "plus", "add", "create", "insert", "new", "expand"], "categories": ["devices", "development"], "timestamp": "2026-07-20T17:53:15.235119+00:00"}
|
|
1751
|
+
{"name": "play-off", "description": "This icon depicts a play button with a diagonal line through it. It visually signifies that playback is off, disabled, or forbidden. It represents a state of being unable to start or run an audio or video function.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["audio", "video", "music", "start", "run", "off", "disabled", "blocked", "forbidden"], "categories": ["multimedia"], "timestamp": "2026-07-20T17:53:15.253653+00:00"}
|
|
1752
|
+
{"name": "bone-fracture", "description": "This icon visually represents a fractured bone, depicted as two distinct pieces with radiating lines suggesting impact or breakage. It signifies injury, trauma, and the concept of a broken bone, commonly associated with medical contexts, orthopedics, and veterinary care.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["bone", "fracture", "injury", "orthopedic", "medical", "anatomy", "skeletal", "broken", "xray", "trauma", "health", "vet", "veterinary", "crack", "break", "damage"], "categories": ["medical", "animals"], "timestamp": "2026-07-20T17:53:15.255641+00:00"}
|
|
1753
|
+
{"name": "list-sort-descending", "description": "This icon shows three horizontal lines of decreasing length, stacked vertically. It represents descending order, filtering, or arranging content from largest to smallest. It signifies a structured decrease in size or rank.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["list", "order", "arrangement", "organization", "sequence", "ranking", "categories", "presentation", "filter", "sort", "ascending", "descending", "increasing", "decreasing", "rising", "falling"], "categories": ["text", "layout"], "timestamp": "2026-07-20T17:53:15.422187+00:00"}
|
|
1754
|
+
{"name": "star-minus", "description": "This icon depicts a stylized star with a minus sign attached to its lower right. It represents the action of removing a favorite item, deselecting a rating, or reducing a score. It signifies taking away from a positive or valued element.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["bookmark", "favorite", "like", "review", "rating", "minus", "remove", "deselect", "star"], "categories": ["account", "social", "shapes", "multimedia", "weather", "emoji", "gaming"], "timestamp": "2026-07-20T17:53:15.796047+00:00"}
|
|
1755
|
+
{"name": "scan-box", "description": "This icon visually depicts a 3D cube framed by corner brackets, suggesting a scanning or capture process. It represents augmented reality, object detection, and spatial computing, symbolizing the identification, mapping, and recognition of objects in three-dimensional space.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["ar", "augmented reality", "3d", "object detection", "object recognition", "tracking", "spatial computing", "capture", "cube", "bounding box", "camera", "frame", "shape", "boundary", "lidar", "depth", "scanning", "mapping", "placement"], "categories": ["design", "devices", "shopping", "gaming"], "timestamp": "2026-07-20T17:53:15.813023+00:00"}
|
|
1756
|
+
{"name": "save-pen", "description": "This icon depicts a document or file being edited. It represents the action of modifying, updating, or saving changes to text or data. The imagery evokes concepts of writing, editing, and the finalization of content.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["floppy disk", "directory", "rename"], "categories": ["text", "files"], "timestamp": "2026-07-20T17:53:15.829837+00:00"}
|
|
1757
|
+
{"name": "save-check", "description": "This icon depicts a document with a checkmark, symbolizing a successful save or confirmation. It represents the action of storing information, indicating completion, validation, or that data has been securely recorded. It conveys a sense of accomplishment and finality.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["save", "save-check", "floppy-disk", "saved", "check", "save-success"], "categories": ["text", "files", "development"], "timestamp": "2026-07-20T17:53:15.832582+00:00"}
|
|
1758
|
+
{"name": "server-plus", "description": "This icon depicts two stacked server racks with a plus symbol overlaid on the right. It represents adding or creating new server resources, symbolizing expansion, growth, and the addition of new components to a computing or storage system.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["add", "create", "new", "cloud", "storage", "computing"], "categories": ["development", "devices"], "timestamp": "2026-07-20T17:53:15.881080+00:00"}
|
|
1759
|
+
{"name": "star-check", "description": "This icon depicts a stylized star with a checkmark integrated into its lower right corner. It represents completion, validation, or a positive affirmation of a favorite item, rating, or a successfully bookmarked selection.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["bookmark", "favorite", "like", "review", "rating", "check", "star"], "categories": ["account", "social", "shapes", "multimedia", "weather", "emoji", "gaming"], "timestamp": "2026-07-20T17:53:15.930729+00:00"}
|
|
1760
|
+
{"name": "tag-plus", "description": "This icon visually represents a tag or label with a plus sign, suggesting the addition of a new item. It conveys concepts of creating, marking, or labeling something, often indicating a new addition or a way to categorize.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["label", "badge", "ticket", "mark", "new", "add", "create", "+"], "categories": ["account"], "timestamp": "2026-07-20T17:53:15.965525+00:00"}
|
|
1761
|
+
{"name": "webcam-off", "description": "This icon depicts a webcam with a diagonal line through it, indicating it is disabled or not functioning. It represents the concept of privacy, the absence of visual recording, or a device being turned off and unavailable for video transmission.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["camera", "security"], "categories": ["connectivity", "devices", "communication"], "timestamp": "2026-07-20T17:53:15.982681+00:00"}
|
|
1762
|
+
{"name": "star-x", "description": "This icon features a five-pointed star with an \"X\" symbol superimposed on its right side. It signifies the removal or cancellation of a favorite, a rejected rating, or the unmarking of something previously designated as special.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["mark", "symbol", "shape", "vector", "design", "graphic", "bookmark", "favorite", "like", "review", "rating", "x", "cancel", "reject", "star"], "categories": ["account", "social", "shapes", "multimedia", "weather", "emoji", "gaming"], "timestamp": "2026-07-20T17:53:15.985835+00:00"}
|
|
1763
|
+
{"name": "save-plus", "description": "This icon visually combines a document or file symbol with a plus sign. It represents the action of saving new content, adding a file, creating a document, or updating existing information with a new version or entry.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["floppy disk", "save", "plus", "add", "update", "create"], "categories": ["text", "files"], "timestamp": "2026-07-20T17:53:15.999587+00:00"}
|
|
1764
|
+
{"name": "summary", "description": "The icon visually represents a stack of horizontal lines, suggesting text or data, with an arrow pointing outwards from the right. It signifies a concise overview, abstract, or condensed version of information, implying summarization and extraction of key points.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["brief", "abstract", "synopsis", "report", "digest", "outline", "recap", "condensation", "summary", "ai", "text", "overview"], "categories": ["text"], "timestamp": "2026-07-20T17:53:16.017688+00:00"}
|
|
1765
|
+
{"name": "wrench-off", "description": "This icon depicts a wrench crossed out by a diagonal line, symbolizing the deactivation or unavailability of tools, maintenance, or settings. It represents a state of being off, disabled, or not in service, suggesting a pause in work or a feature that is currently inactive.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["account", "settings", "spanner", "diy", "toolbox", "build", "construction", "off", "service", "maintenance", "disabled"], "categories": ["account", "development", "tools"], "timestamp": "2026-07-20T17:53:16.068219+00:00"}
|
|
1766
|
+
{"name": "tag-x", "description": "This icon visually represents a tag or label with an \"X\" mark overlaid. It signifies actions like removing, deleting, or canceling a tag, label, or item. It conveys a sense of dismissal or negation related to identification.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["label", "badge", "ticket", "mark", "x", "delete", "remove"], "categories": ["account"], "timestamp": "2026-07-20T17:53:16.071366+00:00"}
|
|
1767
|
+
{"name": "user-round-arrow-left", "description": "This icon depicts a stylized human figure with an arrow pointing inwards towards it. It represents concepts like receiving, assignment, or a return to self. It can signify an incoming item or action directed towards a person or profile.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["person", "assign", "move", "give", "setup", "self", "me", "myself", "profile", "avatar", "incoming", "recipient", "assignee", "inbound"], "categories": ["account", "people", "arrows"], "timestamp": "2026-07-20T17:53:16.086902+00:00"}
|
|
1768
|
+
{"name": "star-plus", "description": "This icon visually represents a star outline with a plus symbol integrated into its lower right corner. It signifies adding a favorite, bookmarking an item, expressing a liking, or enhancing a rating. It also conveys the concept of joining or increasing something positive.", "model": "gemini-2.5-flash-lite", "prompt_template_hash": "7ae15a902cba", "lucide_version": "1.25.0", "tags": ["bookmark", "favorite", "like", "review", "rating", "plus", "add", "join", "star"], "categories": ["account", "social", "shapes", "multimedia", "weather", "emoji", "gaming"], "timestamp": "2026-07-20T17:53:16.103103+00:00"}
|