iv-org/invidious
Invidious is an alternative front-end to YouTube
Crystal★ 23,841+577 that day#4 on trending
5.27%duplicated code · 1,334 of 25,295 lines
106clones in code
153code files of 271 scanned
3.17%duplicated over all files · 148 clones
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 3 generated files: assets/js/videojs-youtube-annotations.min.js, src/invidious/frontend/channel_page.cr, src/invidious/videos/transcript.cr.
Largest clones in the code
- 13 lines in 7 placescrystal63 tokenssrc/invidious/routes/account.cr:11–23src/invidious/routes/account.cr:30–42src/invidious/routes/account.cr:105–117src/invidious/routes/account.cr:163–175src/invidious/routes/feeds.cr:64–76and 2 more
11def get_change_password(env) 12 locale = env.get("preferences").as(Preferences).locale 13 14 user = env.get? "user" 15 sid = env.get? "sid" 16 referer = get_referer(env) 17 18 if !user 19 return env.redirect referer 20 endFirst 10 of 13 lines.
- 11 lines in 5 placescrystal68 tokenssrc/invidious/channels/community.cr:304–314src/invidious/channels/videos.cr:193–203src/invidious/comments/youtube.cr:350–360src/invidious/hashtag.cr:31–41src/invidious/search/ctoken.cr:22–32
304 "3:string" => cursor || "", 305 }, 306} 307 308continuation = object.try { |i| Protodec::Any.cast_json(i) } 309 .try { |i| Protodec::Any.from_json(i) } 310 .try { |i| Base64.urlsafe_encode(i) } 311 .try { |i| URI.encode_www_form(i) } 312 313return continuationFirst 10 of 11 lines.
- 19 lines in 4 placescrystal85 tokenssrc/invidious/routes/account.cr:31–49src/invidious/routes/account.cr:106–124src/invidious/routes/account.cr:164–182src/invidious/routes/login.cr:154–172
31locale = env.get("preferences").as(Preferences).locale 32 33user = env.get? "user" 34sid = env.get? "sid" 35referer = get_referer(env) 36 37if !user 38 return env.redirect referer 39end 40First 10 of 19 lines.
7 more
- 9 lines in 3 placesjavascript114 tokens
- 11 lines in 4 placescrystal64 tokens
- 17 lines in 2 placesjavascript169 tokens
- 26 lines in 2 placescrystal156 tokens
- 15 lines in 2 placesjavascript153 tokens
- 18 lines in 3 placescrystal71 tokens
- 14 lines in 3 placescrystal70 tokens
Largest clones over all files, tests and data included
- 9 lines in 5 placesmarkdowndocs and examples127 tokensCHANGELOG_legacy.md:179–187CHANGELOG_legacy.md:432–440CHANGELOG_legacy.md:504–512CHANGELOG_legacy.md:573–581CHANGELOG_legacy.md:631–639
179### Expenses 180 181- invidious-load1 (nyc1) : \$10.00 (load balancer) 182- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds) 183- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server) 184- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server) 185- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server) 186- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server) 187- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server)432### Expenses 433 434- invidious-load1 (nyc1) : \$10.00 (load balancer) 435- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds) 436- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server) 437- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server) 438- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server) 439- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server) 440- invidious-db1 (s-4vcpu-8gb) : \$40.00 (database) - 13 lines in 7 placescrystal63 tokenssrc/invidious/routes/account.cr:11–23src/invidious/routes/account.cr:30–42src/invidious/routes/account.cr:105–117src/invidious/routes/account.cr:163–175src/invidious/routes/feeds.cr:64–76and 2 more
11def get_change_password(env) 12 locale = env.get("preferences").as(Preferences).locale 13 14 user = env.get? "user" 15 sid = env.get? "sid" 16 referer = get_referer(env) 17 18 if !user 19 return env.redirect referer 20 endFirst 10 of 13 lines.
- 19 lines in 2 placesmarkdowndocs and examples364 tokens
83- invidious-lb1 (nyc1) : \$10.00 (load balancer) 84- invidious-update1 (s-1vcpu-1gb) : \$5.00 (updates feeds) 85- invidious-node1 (s-1vcpu-1gb) : \$5.00 (web server) 86- invidious-node2 (s-1vcpu-1gb) : \$5.00 (web server) 87- invidious-node3 (s-1vcpu-1gb) : \$5.00 (web server) 88- invidious-node4 (s-1vcpu-1gb) : \$5.00 (web server) 89- invidious-node5 (s-1vcpu-1gb) : \$5.00 (web server) 90- invidious-node6 (s-1vcpu-1gb) : \$5.00 (web server) 91- invidious-node7 (s-1vcpu-1gb) : \$5.00 (web server) 92- invidious-node8 (s-1vcpu-1gb) : \$5.00 (web server)First 10 of 19 lines.
- 10 lines in 3 placesmarkdowndocs and examples148 tokens
- 44 lines in 2 placesyamldata files287 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| crystal | 115 | 21,201 | 95 | 1,199 | 5.66% |
| javascript | 15 | 2,417 | 11 | 135 | 5.59% |
| bash | 13 | 912 | 0 | 0 | 0% |
| python | 1 | 397 | 0 | 0 | 0% |
| sql | 8 | 194 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| crystal | 140 | 23,808 | 111 | 1,354 | 5.69% |
| javascript | 15 | 2,417 | 11 | 135 | 5.59% |
| markdown | 5 | 1,976 | 11 | 113 | 5.72% |
| json | 60 | 25,626 | 5 | 129 | 0.5% |
| yaml | 15 | 2,033 | 5 | 181 | 8.9% |
| css | 9 | 1,507 | 5 | 36 | 2.39% |
| markup | 3 | 2,134 | 0 | 0 | 0% |
| bash | 13 | 912 | 0 | 0 | 0% |
| python | 1 | 397 | 0 | 0 | 0% |
| txt | 1 | 218 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 2, 2026 | #4 | 23,841 (+577) | 271 | 61,396 | 148 | 3.17% | 5.27% | — | b3a3f3a |
| Sep 1, 2026 | #4 | 23,628 (+583) | 271 | 61,396 | 148 | 3.17% | 5.27% | — | b3a3f3a |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.