{"adoption": {"forks": 65, "observed_at": "2026-08-28T04:06:51.445859+00:00", "stars": 2438}, "canonical_url": "https://ross.abutalabs.com/products/ayoisaiah-f2", "card": {"archived": false, "artifact_type": "cli-tool", "description": "F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!", "domain": ["files", "developer-tools"], "enriched": true, "function": ["cli", "file-system", "developer-tools"], "health_score": 91, "homepage": "https://f2.freshman.tech", "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["ayoisaiah/f2"], "name": "ayoisaiah/f2", "platform": ["windows", "cli", "cross-platform"], "pushed_at": "2026-06-22T14:45:39+00:00", "repo": "ayoisaiah/f2", "stars": 2438, "tags": ["batch-rename", "file-renaming", "exif", "id3", "dry-run", "undo", "regex", "go", "command-line", "automation", "linux", "macos"], "topics": ["golang", "bulk-rename-files", "macos", "windows", "linux", "rename-files", "batch-rename"], "urls": [], "use_cases": ["bulk rename thousands of photos using EXIF data", "rename mp3 files based on ID3 tags", "find and replace text in filenames with regex", "add prefixes or suffixes to many files at once", "change file name casing across a directory", "preview renaming changes before applying them", "undo a bad batch rename operation"], "what_it_is": "F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely, written in Go. It supports dry runs by default, EXIF/ID3 variable substitution, regex transformations, conflict detection and resolution, and undoing operations.", "when_to_avoid": ["you prefer a GUI renaming tool", "you only need to rename a single file occasionally", "you need deep media file organization beyond renaming"], "when_to_choose": ["you need fast, safe bulk renaming from the terminal", "you want metadata-driven names from EXIF or ID3 tags", "you need conflict detection and undo for renames", "you work across Linux, macOS, and Windows"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ayoisaiah-f2", "repo": "ayoisaiah/f2", "role": "main", "score": 79}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:51.445859+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:30:46.984932+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6c5bb6bfbc0ddf1a06cf8d2b30b8bb9554427b58a9d627e7d746a64e81a67a8", "fetched_at": "2026-08-28T04:06:51.445859+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ayoisaiah/f2"}, {"content_hash": "f5d636ccbdb320903c86f2ff1af95bfb840426c9b771711d0f70767ebf978def", "fetched_at": "2026-08-29T10:12:11.409414+00:00", "kind": "homepage", "missing": false, "url": "https://f2.freshman.tech"}, {"content_hash": "94ceee775d7fb3e051441e8b72eda32fb18392d7ee1d451f00df729cd52a99c8", "fetched_at": "2026-08-29T10:12:11.418547+00:00", "kind": "site_page", "missing": false, "url": "https://f2.freshman.tech/guide/getting-started.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 88, "longevity": 100, "rhythm": 56}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2319, "days_push": 72, "days_rel": 296, "gap_med": 14, "n_releases_24m": 10}, "score": 79, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}