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

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
public/sitemap-genre.xml Normal file
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>

5003
public/sitemap-movie-1.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-10.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-11.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-12.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-13.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-14.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-15.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-16.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-17.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-18.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-19.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-2.xml Normal file

File diff suppressed because it is too large Load Diff

4033
public/sitemap-movie-20.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-3.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-4.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-5.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-6.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-7.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-8.xml Normal file

File diff suppressed because it is too large Load Diff

5003
public/sitemap-movie-9.xml Normal file

File diff suppressed because it is too large Load Diff

73
public/sitemap-page.xml Normal file
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
public/sitemap-type.xml Normal file
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>

File diff suppressed because it is too large Load Diff

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) => {

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);

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"

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>
</>
);