Merge pull request #10 from JustAnimeCore/dev

small fixes
This commit is contained in:
Tejas Panchal
2026-03-01 16:04:49 +05:30
committed by GitHub
29 changed files with 99535 additions and 2831 deletions
+21 -15
View File
@@ -1,28 +1,34 @@
<p align="center">
<div align="center">
<a href="https://justanime.to">
<img alt="JustAnime" src="https://github.com/tejaspanchall/JustAnime/blob/main/public/footer.png" width="220"/>
<img alt="JustAnime" src="https://github.com/JustAnimeCore/JustAnime/blob/main/public/footer.png" width="220"/>
</a>
</div>
<h3 align="center">JustAnime - Clean anime streaming platform</h3>
<p align="center">
<a href="https://github.com/tejaspanchall/JustAnime">
<img src="https://img.shields.io/github/stars/tejaspanchall/JustAnime" alt="Github Stars">
<a href="https://github.com/JustAnimeCore/JustAnime">
<img src="https://img.shields.io/github/stars/JustAnimeCore/JustAnime" alt="Github Stars">
</a>
<img src="https://img.shields.io/github/issues/tejaspanchall/JustAnime" alt="Github Issues">
<a href="https://github.com/tejaspanchall/JustAnime">
<img src="https://img.shields.io/github/forks/tejaspanchall/JustAnime" alt="Github Forks" />
<img src="https://img.shields.io/github/issues/JustAnimeCore/JustAnime" alt="Github Issues">
<a href="https://github.com/JustAnimeCore/JustAnime">
<img src="https://img.shields.io/github/forks/JustAnimeCore/JustAnime" alt="Github Forks" />
</a>
</p>
</p>
<p align="center">
<a href="https://justanime.to">JustAnime</a> is an open-source anime streaming service that uses <a href="https://github.com/itzzzme/anime-api">ANIME</a> API, built using ReactJS with javascript and Tailwind CSS. It lets you easily find any anime with intuitive search & suggestion feature and stream without any ads.
<a href="https://justanime.to">JustAnime</a> is an open-source anime streaming service that uses <a href="https://github.com/JustAnimeCore/HiAnime-Api">HiAnime-Api</a>, built using ReactJS with javascript and Tailwind CSS. It lets you easily find any anime with intuitive search & suggestion feature and stream without any ads.
</p>
<p align="center">
<a href="https://discord.gg/P3yqksmGun">
<img src="https://img.shields.io/badge/Join%20our%20Discord-5865F2?logo=discord&logoColor=white" alt="Join our Discord">
</a>
<a href="https://t.me/JustAnimeZone">
<img src="https://img.shields.io/badge/Join%20our%20Telegram-26A5E4?logo=telegram&logoColor=white" alt="Join our Telegram">
</a>
<a href="https://www.instagram.com/watchjustanime">
<img src="https://img.shields.io/badge/Follow%20on%20Instagram-E4405F?logo=instagram&logoColor=white" alt="Follow on Instagram">
</a>
</p>
<details>
@@ -53,18 +59,18 @@
## Previews
<div style="text-align: left;">
<img src="https://github.com/tejaspanchall/JustAnime/blob/main/public/home.PNG" alt="Home Page" style="max-width: 80%;" >
<img src="https://github.com/JustAnimeCore/JustAnime/blob/main/public/home.PNG" alt="Home Page" style="max-width: 80%;" >
<details>
<summary style="margin-top:10px">View more screenshots</summary>
<br/>
AnimeInfo Page
<img src="https://github.com/tejaspanchall/JustAnime/blob/main/public/info.PNG" style="margin-top:10px" src="" alt="AnimeInfo Page" style="max-width: 80%;">
<img src="https://github.com/JustAnimeCore/JustAnime/blob/main/public/info.PNG" style="margin-top:10px" src="" alt="AnimeInfo Page" style="max-width: 80%;">
<br/>
Character & Voice Actors
<img src="https://github.com/tejaspanchall/JustAnime/blob/main/public/char.PNG" style="margin-top:10px" src="" alt="Character & Voice Actors" style="max-width: 80%;">
<img src="https://github.com/JustAnimeCore/JustAnime/blob/main/public/char.PNG" style="margin-top:10px" src="" alt="Character & Voice Actors" style="max-width: 80%;">
<br/>
Watch Page
<img src="https://github.com/tejaspanchall/JustAnime/blob/main/public/watch.PNG" style="margin-top:10px" src="" alt="Watch Page" style="max-width: 80%;">
<img src="https://github.com/JustAnimeCore/JustAnime/blob/main/public/watch.PNG" style="margin-top:10px" src="" alt="Watch Page" style="max-width: 80%;">
<br/>
</details>
</div>
@@ -76,12 +82,12 @@
### 2. Run the following code to clone the repository and install all required dependencies
```bash
git clone https://github.com/tejaspanchall/JustAnime.git
git clone https://github.com/JustAnimeCore/JustAnime.git
cd JustAnime
npm install # or yarn
```
### 3. Refer the <a href="https://github.com/tejaspanchall/JustAnime/blob/main/.env.example">.env.example</a> to set your .env file up
### 3. Refer the <a href="https://github.com/JustAnimeCore/JustAnime/blob/main/.env.example">.env.example</a> to set your .env file up
## Start the server
@@ -94,13 +100,13 @@ npm start # or npm run dev (to run develepment server)
Host your own instance of <a href="https://justanime.fun">JustAnime</a> on vercel
[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/tejaspanchall/JustAnime)
[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/JustAnimeCore/JustAnime)
### Render
Host your own instance of <a href="https://justanime.fun">JustAnime</a> on Render.
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/tejaspanchall/JustAnime)
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/JustAnimeCore/JustAnime)
## Pull Requests
+208
View File
@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://justanime.fun/genre/action</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/adventure</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/cars</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/comedy</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/dementia</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/demons</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/drama</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/ecchi</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/fantasy</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/game</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/harem</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/historical</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/horror</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/isekai</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/josei</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/kids</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/magic</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/marial-arts</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/mecha</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/military</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/music</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/mystery</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/parody</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/police</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/psychological</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/romance</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/samurai</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/school</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/sci-fi</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/seinen</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/shoujo</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/shoujo-ai</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/shounen</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/shounen-ai</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/slice-of-life</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/space</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/sports</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/super-power</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/supernatural</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/thriller</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/genre/vampire</loc>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+73
View File
@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://justanime.fun/</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://justanime.fun/home</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://justanime.fun/dubbed-anime</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/subbed-anime</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/top-airing</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/most-popular</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/most-favorite</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/recently-updated</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/recently-added</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/top-upcoming</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/az-list</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/terms-of-service</loc>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/dmca</loc>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://justanime.fun/contact</loc>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
</urlset>
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://justanime.fun/movie</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/tv</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/ova</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/ona</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://justanime.fun/special</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>
+72 -2775
View File
File diff suppressed because it is too large Load Diff
+5 -10
View File
@@ -68,7 +68,7 @@ export default function Player({
const artRef = useRef(null);
const leftAtRef = useRef(0);
const boundKeydownRef = useRef(null);
const proxy = import.meta.env.VITE_PROXY_URL;
const proxy = import.meta.env.VITE_M3U8_PROXY_URL;
const m3u8proxy = import.meta.env.VITE_M3U8_PROXY_URL?.split(",") || [];
const [currentEpisodeIndex, setCurrentEpisodeIndex] = useState(
episodes?.findIndex((episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId)
@@ -253,7 +253,7 @@ export default function Player({
useEffect(() => {
if (!streamUrl || !artRef.current) return;
const iframeUrl = streamInfo?.streamingLink?.iframe;
const iframeUrl = streamInfo?.streamingLink?.[0]?.iframe;
const headers = {
referer: iframeUrl ? new URL(iframeUrl).origin + "/" : window.location.origin + "/",
};
@@ -491,12 +491,7 @@ export default function Player({
}, 2000);
const subs = (subtitles || []).map((s) => ({ ...s }));
for (const sub of subs) {
const encodedUrl = encodeURIComponent(sub.file);
const encodedHeaders = encodeURIComponent(JSON.stringify(headers));
sub.file = `${proxy}${encodedUrl}&headers=${encodedHeaders}`;
}
// VTT subtitle files from HiAnime CDNs are public, no proxy needed
const defaultSubtitle = subs?.find((sub) => sub.label.toLowerCase() === "english");
if (defaultSubtitle) {
@@ -547,7 +542,7 @@ export default function Player({
if (thumbnail) {
art.plugins.add(
artplayerPluginVttThumbnail({
vtt: `${proxy}${thumbnail}`,
vtt: thumbnail,
})
);
}
@@ -595,7 +590,7 @@ export default function Player({
...subs.map((sub) => ({
default: sub.label.toLowerCase() === "english" && sub === defaultEnglishSub,
html: sub.label,
url: sub.file,
url: sub.file, // direct CDN URL, no proxy needed
})),
],
onSelect: (item) => {
+6 -6
View File
@@ -229,15 +229,15 @@ export const useWatch = (animeId, initialEpisodeId) => {
server.type.toLowerCase()
);
setStreamInfo(data);
setStreamUrl(data?.streamingLink?.link?.file || null);
setIntro(data?.streamingLink?.intro || null);
setOutro(data?.streamingLink?.outro || null);
setStreamUrl(data?.streamingLink?.[0]?.link || null);
setIntro(data?.intro || null);
setOutro(data?.outro || null);
const subtitles =
data?.streamingLink?.tracks
data?.tracks
?.filter((track) => track.kind === "captions")
.map(({ file, label }) => ({ file, label })) || [];
.map(({ file, label, default: isDefault }) => ({ file, label, default: isDefault })) || [];
setSubtitles(subtitles);
const thumbnailTrack = data?.streamingLink?.tracks?.find(
const thumbnailTrack = data?.tracks?.find(
(track) => track.kind === "thumbnails" && track.file
);
if (thumbnailTrack) setThumbnail(thumbnailTrack.file);
+1 -1
View File
@@ -32,7 +32,7 @@ function Contact() {
<span className="text-white/60 group-hover:text-white">Join Discord Server</span>
</a>
<a
href="https://github.com/tejaspanchall/JustAnime"
href="https://github.com/JustAnimeCore/JustAnime"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-3 px-4 py-3 bg-white/5 hover:bg-white/10 rounded-lg transition-colors group"
+31 -24
View File
@@ -352,28 +352,6 @@ export default function Watch() {
</div>
</div>
{/* Seasons (Mobile only) */}
{seasons?.length > 0 && (
<div className="hidden max-[1200px]:block w-full bg-[#141414] rounded-xl p-4 shadow-lg border border-white/5">
<h2 className="text-lg font-bold mb-4 text-white">More Seasons</h2>
<div className="grid grid-cols-2 gap-3">
{seasons.map((season, idx) => (
<Link
to={`/${season.id}`}
key={idx}
className={`relative aspect-[3/1] rounded-lg overflow-hidden group border-2 transition-all ${animeId === String(season.id) ? "border-white/40 shadow-lg" : "border-transparent"}`}
>
<img src={season.season_poster} alt={season.season} className={`w-full h-full object-cover scale-150 transition-opacity ${animeId === String(season.id) ? "opacity-60" : "opacity-40 group-hover:opacity-60"}`} />
<div className="absolute inset-0 bg-gradient-to-r from-black/80 to-transparent z-10" />
<div className="absolute inset-0 flex items-center justify-center z-20 px-2">
<p className="text-xs font-bold text-white text-center line-clamp-2">{season.season}</p>
</div>
</Link>
))}
</div>
</div>
)}
{/* Related Anime (Mobile only) */}
{!animeInfoLoading && animeInfo?.related_data?.length > 0 && (
<div className="hidden max-[1200px]:block w-full bg-[#141414] rounded-xl p-4 shadow-lg border border-white/5">
@@ -406,10 +384,39 @@ export default function Watch() {
</div>
)}
</div>
</div>
</div>
{/* Sections */}
<div className="container mx-auto space-y-8 pb-12 lg:px-6">
{seasons?.length > 0 && (
<div>
<h2 className="text-2xl font-bold mb-6 px-1 text-white">More Seasons</h2>
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
{seasons.map((season, index) => (
<Link
to={`/${season.id}`}
key={index}
className={`relative w-full aspect-[3/1] rounded-lg overflow-hidden group border-2 transition-all ${animeId === String(season.id) ? "border-white/40 shadow-lg" : "border-transparent"}`}
>
<img src={season.season_poster} alt={season.season} className={`w-full h-full object-cover scale-150 transition-opacity ${animeId === String(season.id) ? "opacity-50" : "opacity-40 group-hover:opacity-60"}`} />
<div
className="absolute inset-0 z-10"
style={{
backgroundImage: `url('data:image/svg+xml,<svg width="3" height="3" viewBox="0 0 3 3" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="1.5" cy="1.5" r="0.5" fill="white" fill-opacity="0.25"/></svg>')`,
backgroundSize: '3px 3px'
}}
/>
<div className="absolute inset-0 z-20 bg-gradient-to-r from-black/60 to-transparent" />
<div className="absolute inset-0 z-30 flex items-center justify-center">
<p className="text-sm sm:text-base font-bold text-center px-4 text-white">{season.season}</p>
</div>
</Link>
))}
</div>
</div>
)}
</div>
</div>
</>
);