This website requires JavaScript.
d12ff79d29
Add animekai source with 1anime direct-MP4 backend (independent CDN)
master
jozamudi
2026-09-29 18:35:22 +00:00
e3ef51d141
Stop spamming upstream: drop video download from probe, kill re-rolls
jozamudi
2026-09-29 17:33:54 +00:00
1154203569
CDN probe: skip while idle, back off while degraded
jozamudi
2026-09-29 17:23:18 +00:00
0cd79dd701
Decode MegaPlay's encrypted getSourcesNew payload
jozamudi
2026-09-29 17:17:33 +00:00
731f44b99c
watched: single DONE_RATIO source constant replaces the seven hardcoded 0.95 literals
jozamudi
2026-09-21 01:41:44 +00:00
5f7aa010f1
status: consolidate the pill to one dot + one word; upgrade the panel
cdn-status-consolidation
jozamudi
2026-09-21 00:10:10 +00:00
778bf2bfc1
status: consolidate CDN/upstream status into the header pill + tap panel
jozamudi
2026-09-20 23:53:47 +00:00
63a677f028
remove docs/CHANGES-2026-09.md: one-off audit-batch record, every fix already in the git log with explanatory commits; drop its mention from SPEC milestones
jozamudi
2026-09-20 23:40:26 +00:00
de0bf8b156
remove PLAN.md: one-shot planning record for a shipped bundle; its content is superseded by git log + docs/CHANGES-2026-09.md
jozamudi
2026-09-20 23:37:20 +00:00
66a0bb16e6
remove ani-web.service: no code or docs reference the systemd unit
jozamudi
2026-09-20 23:36:28 +00:00
2fb3743b3b
remove unused files: 3.6MB curl-impersonate tarball (covered by *.tar.gz gitignore, nothing references it) and the vendored ani-cli v5.0.0 script (upstream's, not used by this project)
jozamudi
2026-09-20 23:36:24 +00:00
816e945018
docs: slim README to what it uniquely owns (run, features, dev commands); implementation detail already lived in SPEC.md — moved the two stragglers (anidb self-check, cache-busting) over
jozamudi
2026-09-20 23:34:32 +00:00
cea04a20f6
player: fullscreen button (scales with the window)
jozamudi
2026-09-19 00:11:45 +00:00
379f591180
history: flag rows whose slug no longer means the same anime
jozamudi
2026-09-18 23:25:35 +00:00
0f6bd0a52a
docs: sync README + SPEC with the shipped reality
jozamudi
2026-09-16 21:14:26 +00:00
4aca78cab8
docs(db): legacy JSON files are deletable once tables are populated: the on-disk copies of users/history/searches were verified superseded by SQLite and removed; the docstring claimed they were kept as a snapshot
jozamudi
2026-09-16 21:14:26 +00:00
cbfb2f96c8
pin exact dependency versions: curl_cffi impersonation churn must never update silently
jozamudi
2026-09-16 02:41:25 +00:00
d02cb017d3
gate live-upstream browser e2e behind ANIWEB_LIVE_TESTS=1: provider rotation/takedowns were turning the suite red for non-regressions; default suite is hermetic (33 tests) again
jozamudi
2026-09-16 02:41:25 +00:00
882263d276
login POST now requires the X-Aniweb header: cross-site forced-login (attacker-form session swap) dies at the 403; login.html sends the header like the SPA
jozamudi
2026-09-16 02:41:25 +00:00
3e5c7062ab
login: per-source-IP failure budget (auth.py) — username rotation no longer dodges the lockout; sliding window, XFF trusted only behind the proxy (ANIWEB_TRUST_XFF); lockout logic now unit-testable (tests/test_auth.py)
jozamudi
2026-09-16 02:31:23 +00:00
c5c4dff851
Pin dependencies (full env freeze): curl_cffi/curl-impersonate churn breaks impersonation silently
jozamudi
2026-09-16 02:06:56 +00:00
7f531fc309
CSRF header check now covers /login (exemption removed); login.html sends X-Aniweb
jozamudi
2026-09-16 02:02:09 +00:00
b70ef403a9
Lockout -> server/auth.py + per-IP failure budget (XFF trusted only behind the proxy); unit tests
jozamudi
2026-09-16 01:31:40 +00:00
826ee9165d
run.sh: PID-file restart; pkill fallback scoped to :8321 so test servers on :8399 are never hit
jozamudi
2026-09-16 00:56:48 +00:00
673aca827f
login: sync def so the 0.5s brute-force sleep runs on the threadpool, not the event loop (+latency regression test)
jozamudi
2026-09-16 00:49:22 +00:00
9a4b8fb299
Docs: audit fix batch plan (sync login, scoped restart, per-IP budget, login CSRF, pinned deps)
jozamudi
2026-09-16 00:43:02 +00:00
d90b1af8d6
Fix episode position logging/resume: NaN savePos, clobber-on-boot, unvalidated history writes
jozamudi
2026-09-14 00:54:31 +00:00
7444e29592
Keep hianime alive across server rotation: try every listed server
jozamudi
2026-09-08 22:16:38 +00:00
65da3e848f
Prefer the English caption track (label-based, not first-track)
jozamudi
2026-09-07 03:01:38 +00:00
5b8170ece0
Subtitles: wire hianime's external .vtt into the player
jozamudi
2026-09-07 02:46:28 +00:00
834ca80a8c
Provider layer + hianime source (primary)
jozamudi
2026-09-07 01:38:53 +00:00
ff8311c1a8
Status pill + git-SHA asset versioning
jozamudi
2026-09-03 16:33:51 +00:00
3f715434f0
PWA + test: manifest, icon, live-search test (were left uncommitted)
jozamudi
2026-09-03 16:33:51 +00:00
67274aed7d
Docs: last two stale storage refs in SPEC (JSON -> SQLite)
jozamudi
2026-09-01 21:25:30 +00:00
14bdb04ef6
Docs: sync with reality
jozamudi
2026-09-01 21:25:13 +00:00
0315356f89
iOS root cause: start playback on BUFFER_APPENDED, not canplay
jozamudi
2026-08-31 21:01:26 +00:00
daac8d5256
JSV constant: 12 -> 13 (was left behind; stale-cache detection depends on it)
jozamudi
2026-08-31 20:56:08 +00:00
aaaf8e9308
iPhone: full client timeline + self-diagnosing watchdog
jozamudi
2026-08-31 20:53:18 +00:00
aba266ee4b
iPhone: step probes + full hls.js error stream to server
jozamudi
2026-08-31 20:48:02 +00:00
3df074a5fe
hls.js: 10s -> 30s segment load cap (iPhone FragLoadTimeout)
jozamudi
2026-08-31 20:32:40 +00:00
5268e77d00
events: accept client-fail + play-probe types (was 422)
jozamudi
2026-08-31 20:22:53 +00:00
66a6ed5d93
play-probe: include JS version (detect stale-cache phones)
jozamudi
2026-08-31 20:12:50 +00:00
c7f5ad4c7a
play-probe: report branch + browser capabilities on every play attempt
jozamudi
2026-08-31 20:05:34 +00:00
be47ced521
Report client fingerprint on playback failure
jozamudi
2026-08-31 19:57:57 +00:00
8f6d4dcf77
Mobile audit fixes: iOS input auto-zoom + tap delay
jozamudi
2026-08-31 19:40:07 +00:00
9b90be3a10
Player: native-HLS fallback + visible stream errors
jozamudi
2026-08-31 19:26:53 +00:00
733fa673c2
Player: buffering visuals — spinner ring, buffer-ahead gauge, CDN chip
jozamudi
2026-08-31 15:37:06 +00:00
a61e7dd0e7
GET /api/cdn: probe status endpoint (public, read-only)
jozamudi
2026-08-31 15:23:36 +00:00
eea538ab17
Background CDN probe: log throughput + state flips every 3 min
jozamudi
2026-08-31 15:17:20 +00:00
4c5dbab4b0
Proxy: 16 parallel lanes (was 4), like yt-dlp -N 16
jozamudi
2026-08-31 15:00:21 +00:00
ee2a888aca
Proxy: fetch segments across 4 parallel byte-range lanes
jozamudi
2026-08-31 14:51:55 +00:00
2576546b43
hls.js: drop segment load cap 30s -> 10s
jozamudi
2026-08-31 14:10:11 +00:00
07554e4aa8
Playback page: show 'E{n} — episode title' line under the video
jozamudi
2026-08-31 02:05:00 +00:00
8840a883c0
Cache-bust app.js/style.css from index.html (?v=2)
jozamudi
2026-08-31 01:58:55 +00:00
aeab72162e
Episode grid: move names out of the button into the tooltip
jozamudi
2026-08-31 01:55:10 +00:00
343628a2e3
Episode names: render MAL titles on the episode grid
jozamudi
2026-08-31 01:52:38 +00:00
d60524815f
hls.js: put retry budget where 1.5.x actually reads it
jozamudi
2026-08-31 01:22:22 +00:00
83a2953a1c
Proxy: log slow segment transfers (TTFB>3s or total>8s)
jozamudi
2026-08-31 01:16:38 +00:00
19bc2afb32
Proxy: stream HLS segments through instead of buffering
jozamudi
2026-08-31 01:05:00 +00:00
27de918cb0
Intro skip: parse Jikan v4's actual response shape
jozamudi
2026-08-31 00:24:37 +00:00
eb5082bd3b
Player: defer play() to canplay; friendly tap-to-play fallback
jozamudi
2026-08-30 21:20:39 +00:00
0613cf7e27
Intro skip: MAL timings via keyless Jikan + player button
jozamudi
2026-08-30 21:01:24 +00:00
c2461f8fba
UI/UX polish: a11y, player controls, undo, stats ranges
jozamudi
2026-08-30 20:53:55 +00:00
8f519b0251
hls.js: outlast CDN segment stalls (TTFT 5s->15s, 8 retries)
jozamudi
2026-08-30 19:25:49 +00:00
e361f0ba0e
Autoplay: playsinline + non-fatal tap-to-play fallback
jozamudi
2026-08-30 19:19:56 +00:00
71a4055e89
Save watch position on fatal player error; make failure test CDN-independent
jozamudi
2026-08-30 18:48:52 +00:00
0fd06f036a
Playback: retry flaky upstream, faster proxy fail, cache /stream in browser
jozamudi
2026-08-30 17:23:57 +00:00
36be7d0a02
Stats: fix month-label placement, back to orange
jozamudi
2026-08-26 19:18:39 +00:00
0afd27d4d2
Stats: match GitHub's contribution-graph look
jozamudi
2026-08-26 19:14:00 +00:00
20a90a587e
Stats: fix month-label alignment on the heatmap
jozamudi
2026-08-26 19:09:17 +00:00
7474d353cd
run.sh: actually restart the server
jozamudi
2026-08-26 18:36:52 +00:00
27c3783f77
Home: move heatmap above 'Recently finished'
jozamudi
2026-08-25 21:18:13 +00:00
2f68218a8f
Home: declutter (keep hero, board, heatmap)
jozamudi
2026-08-25 21:13:32 +00:00
59df3c37c8
Home: watch-time heatmap in the stats area
jozamudi
2026-08-25 21:10:22 +00:00
df8307bf49
Stats: heatmap to GitHub scale (365 days + month labels)
jozamudi
2026-08-25 19:52:10 +00:00
7b670cff24
Stats: GitHub-style watch-time heatmap
jozamudi
2026-08-24 22:24:16 +00:00
7d9fab6bd9
Home: stats + history widgets inline
jozamudi
2026-08-24 22:18:23 +00:00
bb825a3acb
Home: status board instead of a feed
jozamudi
2026-08-24 20:09:39 +00:00
1de58629a0
UX: remember sub/dub + filler toggle, hero time-left, next-ep CTA, history filter chips, per-ep progress bars, stats in user menu
jozamudi
2026-08-24 17:38:11 +00:00
1be3f4f307
Stats UI: per-anime progress rows, status chips, on-hold, streak, detail line
jozamudi
2026-08-24 17:30:01 +00:00
2f373b9bba
Add per-user stats: play/error events + /api/stats + ?stats page
jozamudi
2026-08-24 17:09:27 +00:00
202bfa41c3
storage: JSON files -> SQLite (users/history/searches/events)
jozamudi
2026-08-24 16:02:27 +00:00
2c0ee8eae3
ui: center player overlay buttons (scope hero's align-self to .hero-body)
jozamudi
2026-08-24 16:02:27 +00:00
3f8c387a48
fix: only surface tap-to-play on NotAllowedError (autoplay block)
jozamudi
2026-08-24 02:54:40 +00:00
db715be54b
fix: blocked autoplay left 'Loading…' parked over unreachable controls
jozamudi
2026-08-24 02:51:05 +00:00
aae5857dba
harden: stream-token host allowlist (SSRF), CSRF header on mutating routes, atomic JSON writes
jozamudi
2026-08-23 23:22:09 +00:00
d39ee838ff
api: dedup ghost history rows (int vs string ep_id); normalize ep_id on write
jozamudi
2026-08-23 21:29:01 +00:00
8f57593002
ui: remove click-to-play overlay; native play button covers autoplay-block
jozamudi
2026-08-23 21:29:01 +00:00
2752d49411
fix: "view all" link pointed at /history path (404); use ?history query
jozamudi
2026-08-23 21:28:24 +00:00
50d30a8d3f
ui: default to sub (jpn) instead of dub for playback
jozamudi
2026-08-23 21:28:24 +00:00
d6bf7e149b
docs: README feature walkthrough with screenshots; css: .active wins over .nextup
jozamudi
2026-08-19 20:23:39 +00:00
29fab7ff5f
tests: refactor to pytest (conftest session fixture, sync wrappers for async, importorskip for playwright)
jozamudi
2026-08-19 18:59:48 +00:00
bb1297f8e2
ui: watched-episode state (dimmed + check, next-up highlight), favicon
jozamudi
2026-08-19 18:49:29 +00:00
98fb4e5461
features: auto-next w/ 5s countdown, prev/next, playback speed, hide fillers, recent searches
jozamudi
2026-08-19 18:41:13 +00:00
9fdf3944fc
ui: mobile polish — compact hero row, cropped history posters, wider search, tab ellipsis, header z-index
jozamudi
2026-08-19 18:26:22 +00:00
2ec0f8a034
ui: loading states, player failure overlay + retry, toasts, back nav, full history page with delete
jozamudi
2026-08-19 18:20:42 +00:00
19e878800c
perf: keep-alive upstream sessions, TTL cache on upstream data, /stream LRU, cache hls.min.js
jozamudi
2026-08-19 17:46:17 +00:00
ca86daf9a6
api: Cache-Control no-store on /api/history (mutable JSON must not be cached)
jozamudi
2026-08-19 17:38:04 +00:00
0a86e70a54
fix: backfill posters for ALL history entries; skip <img> when no poster
jozamudi
2026-08-19 17:32:58 +00:00
2b7eb4cdd1
tests: fix rAF-stall flakes in headless chromium; login form submits on Enter
jozamudi
2026-08-19 17:17:36 +00:00