Add 3 files
Browse files- README.md +7 -5
- index.html +1431 -19
- prompts.txt +5 -0
README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: static
|
7 |
pinned: false
|
|
|
|
|
8 |
---
|
9 |
|
10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
+
title: autofim
|
3 |
+
emoji: 🐳
|
4 |
+
colorFrom: red
|
5 |
+
colorTo: purple
|
6 |
sdk: static
|
7 |
pinned: false
|
8 |
+
tags:
|
9 |
+
- deepsite
|
10 |
---
|
11 |
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
index.html
CHANGED
@@ -1,19 +1,1431 @@
|
|
1 |
-
<!
|
2 |
-
<html>
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="fr">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>AutoFilm Robot 2.0 - Lecteur Automatique Premium</title>
|
7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
8 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
9 |
+
<style>
|
10 |
+
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Rajdhani:wght@300;500;700&display=swap');
|
11 |
+
|
12 |
+
:root {
|
13 |
+
--primary: #00f0ff;
|
14 |
+
--secondary: #ff00e6;
|
15 |
+
--dark: #0a0a1a;
|
16 |
+
--darker: #050510;
|
17 |
+
--ai-color: #00ff9d;
|
18 |
+
}
|
19 |
+
|
20 |
+
body {
|
21 |
+
font-family: 'Rajdhani', sans-serif;
|
22 |
+
background-color: var(--darker);
|
23 |
+
color: white;
|
24 |
+
overflow-x: hidden;
|
25 |
+
}
|
26 |
+
|
27 |
+
h1, h2, h3, .font-futurist {
|
28 |
+
font-family: 'Orbitron', sans-serif;
|
29 |
+
}
|
30 |
+
|
31 |
+
.glow {
|
32 |
+
text-shadow: 0 0 10px var(--primary), 0 0 20px var(--primary);
|
33 |
+
}
|
34 |
+
|
35 |
+
.glow-secondary {
|
36 |
+
text-shadow: 0 0 10px var(--secondary), 0 0 20px var(--secondary);
|
37 |
+
}
|
38 |
+
|
39 |
+
.glow-ai {
|
40 |
+
text-shadow: 0 0 10px var(--ai-color), 0 0 20px var(--ai-color);
|
41 |
+
}
|
42 |
+
|
43 |
+
.neon-border {
|
44 |
+
border: 1px solid var(--primary);
|
45 |
+
box-shadow: 0 0 10px var(--primary), inset 0 0 10px var(--primary);
|
46 |
+
}
|
47 |
+
|
48 |
+
.neon-card {
|
49 |
+
background: rgba(10, 10, 30, 0.7);
|
50 |
+
border: 1px solid rgba(0, 240, 255, 0.3);
|
51 |
+
box-shadow: 0 0 15px rgba(0, 240, 255, 0.5);
|
52 |
+
transition: all 0.3s ease;
|
53 |
+
}
|
54 |
+
|
55 |
+
.neon-card:hover {
|
56 |
+
transform: translateY(-5px);
|
57 |
+
box-shadow: 0 0 25px rgba(0, 240, 255, 0.8);
|
58 |
+
}
|
59 |
+
|
60 |
+
.scanline {
|
61 |
+
position: relative;
|
62 |
+
overflow: hidden;
|
63 |
+
}
|
64 |
+
|
65 |
+
.scanline::after {
|
66 |
+
content: '';
|
67 |
+
position: absolute;
|
68 |
+
top: 0;
|
69 |
+
left: 0;
|
70 |
+
right: 0;
|
71 |
+
height: 100%;
|
72 |
+
background: linear-gradient(
|
73 |
+
to bottom,
|
74 |
+
transparent 0%,
|
75 |
+
rgba(0, 240, 255, 0.1) 50%,
|
76 |
+
transparent 100%
|
77 |
+
);
|
78 |
+
animation: scan 8s linear infinite;
|
79 |
+
pointer-events: none;
|
80 |
+
}
|
81 |
+
|
82 |
+
@keyframes scan {
|
83 |
+
0% { transform: translateY(-100%); }
|
84 |
+
100% { transform: translateY(100%); }
|
85 |
+
}
|
86 |
+
|
87 |
+
.pulse {
|
88 |
+
animation: pulse 2s infinite;
|
89 |
+
}
|
90 |
+
|
91 |
+
@keyframes pulse {
|
92 |
+
0% { opacity: 0.7; }
|
93 |
+
50% { opacity: 1; }
|
94 |
+
100% { opacity: 0.7; }
|
95 |
+
}
|
96 |
+
|
97 |
+
.holographic {
|
98 |
+
background: linear-gradient(135deg, rgba(0, 240, 255, 0.1) 0%, rgba(10, 10, 30, 0.8) 50%, rgba(255, 0, 230, 0.1) 100%);
|
99 |
+
}
|
100 |
+
|
101 |
+
.matrix-bg {
|
102 |
+
position: fixed;
|
103 |
+
top: 0;
|
104 |
+
left: 0;
|
105 |
+
width: 100%;
|
106 |
+
height: 100%;
|
107 |
+
z-index: -1;
|
108 |
+
opacity: 0.1;
|
109 |
+
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect width="1" height="1" fill="%2300f0ff"/></svg>');
|
110 |
+
background-size: 20px 20px;
|
111 |
+
}
|
112 |
+
|
113 |
+
.loading-bar {
|
114 |
+
height: 4px;
|
115 |
+
background: linear-gradient(90deg, var(--primary), var(--secondary));
|
116 |
+
animation: loading 2s ease-in-out infinite;
|
117 |
+
}
|
118 |
+
|
119 |
+
@keyframes loading {
|
120 |
+
0% { width: 0%; left: 0; }
|
121 |
+
50% { width: 100%; left: 0; }
|
122 |
+
100% { width: 0%; left: 100%; }
|
123 |
+
}
|
124 |
+
|
125 |
+
.quality-badge {
|
126 |
+
position: absolute;
|
127 |
+
top: 10px;
|
128 |
+
right: 10px;
|
129 |
+
padding: 3px 8px;
|
130 |
+
border-radius: 3px;
|
131 |
+
font-size: 12px;
|
132 |
+
font-weight: bold;
|
133 |
+
}
|
134 |
+
|
135 |
+
.PM4 { background-color: #4CAF50; }
|
136 |
+
.EMB { background-color: #2196F3; }
|
137 |
+
.HD { background-color: #FF9800; }
|
138 |
+
.ECT { background-color: #9C27B0; }
|
139 |
+
.FHD { background-color: #f44336; }
|
140 |
+
.UHD { background-color: #795548; }
|
141 |
+
|
142 |
+
.film-grid {
|
143 |
+
display: grid;
|
144 |
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
145 |
+
gap: 20px;
|
146 |
+
}
|
147 |
+
|
148 |
+
.auto-scroll {
|
149 |
+
animation: scrollFilms 300s linear infinite;
|
150 |
+
}
|
151 |
+
|
152 |
+
@keyframes scrollFilms {
|
153 |
+
0% { transform: translateY(0); }
|
154 |
+
100% { transform: translateY(calc(-100% + 100vh)); }
|
155 |
+
}
|
156 |
+
|
157 |
+
.robot-voice {
|
158 |
+
position: fixed;
|
159 |
+
bottom: 20px;
|
160 |
+
right: 20px;
|
161 |
+
width: 60px;
|
162 |
+
height: 60px;
|
163 |
+
background: rgba(0, 240, 255, 0.2);
|
164 |
+
border-radius: 50%;
|
165 |
+
display: flex;
|
166 |
+
align-items: center;
|
167 |
+
justify-content: center;
|
168 |
+
cursor: pointer;
|
169 |
+
z-index: 100;
|
170 |
+
animation: pulse 2s infinite;
|
171 |
+
}
|
172 |
+
|
173 |
+
.server-badge {
|
174 |
+
position: absolute;
|
175 |
+
bottom: 10px;
|
176 |
+
left: 10px;
|
177 |
+
padding: 2px 6px;
|
178 |
+
border-radius: 3px;
|
179 |
+
font-size: 10px;
|
180 |
+
font-weight: bold;
|
181 |
+
background: rgba(0, 0, 0, 0.7);
|
182 |
+
}
|
183 |
+
|
184 |
+
.server-1 { border-left: 3px solid #4CAF50; }
|
185 |
+
.server-2 { border-left: 3px solid #2196F3; }
|
186 |
+
.server-3 { border-left: 3px solid #FF9800; }
|
187 |
+
.server-4 { border-left: 3px solid #9C27B0; }
|
188 |
+
.server-5 { border-left: 3px solid #f44336; }
|
189 |
+
.server-6 { border-left: 3px solid #795548; }
|
190 |
+
.server-7 { border-left: 3px solid #00ff9d; }
|
191 |
+
.server-8 { border-left: 3px solid #ffeb3b; }
|
192 |
+
.server-9 { border-left: 3px solid #e91e63; }
|
193 |
+
.server-10 { border-left: 3px solid #8bc34a; }
|
194 |
+
.server-11 { border-left: 3px solid #3f51b5; }
|
195 |
+
.server-12 { border-left: 3px solid #607d8b; }
|
196 |
+
|
197 |
+
.player-container {
|
198 |
+
position: relative;
|
199 |
+
padding-bottom: 56.25%; /* 16:9 */
|
200 |
+
height: 0;
|
201 |
+
overflow: hidden;
|
202 |
+
}
|
203 |
+
|
204 |
+
.player-container iframe {
|
205 |
+
position: absolute;
|
206 |
+
top: 0;
|
207 |
+
left: 0;
|
208 |
+
width: 100%;
|
209 |
+
height: 100%;
|
210 |
+
border: none;
|
211 |
+
}
|
212 |
+
|
213 |
+
.auto-play-indicator {
|
214 |
+
position: absolute;
|
215 |
+
top: 10px;
|
216 |
+
left: 10px;
|
217 |
+
background: rgba(0, 0, 0, 0.7);
|
218 |
+
padding: 3px 8px;
|
219 |
+
border-radius: 3px;
|
220 |
+
font-size: 12px;
|
221 |
+
display: flex;
|
222 |
+
align-items: center;
|
223 |
+
}
|
224 |
+
|
225 |
+
.ai-chip {
|
226 |
+
background: rgba(0, 255, 157, 0.2);
|
227 |
+
border: 1px solid var(--ai-color);
|
228 |
+
color: var(--ai-color);
|
229 |
+
padding: 2px 8px;
|
230 |
+
border-radius: 12px;
|
231 |
+
font-size: 11px;
|
232 |
+
display: inline-flex;
|
233 |
+
align-items: center;
|
234 |
+
margin-left: 8px;
|
235 |
+
}
|
236 |
+
|
237 |
+
.server-tag {
|
238 |
+
position: absolute;
|
239 |
+
top: 10px;
|
240 |
+
left: 10px;
|
241 |
+
background: rgba(0, 0, 0, 0.7);
|
242 |
+
padding: 2px 6px;
|
243 |
+
border-radius: 3px;
|
244 |
+
font-size: 10px;
|
245 |
+
font-weight: bold;
|
246 |
+
}
|
247 |
+
|
248 |
+
.french-flag {
|
249 |
+
background: linear-gradient(to right,
|
250 |
+
rgba(0, 85, 164, 0.7) 0%,
|
251 |
+
rgba(0, 85, 164, 0.7) 33%,
|
252 |
+
rgba(255, 255, 255, 0.7) 33%,
|
253 |
+
rgba(255, 255, 255, 0.7) 66%,
|
254 |
+
rgba(239, 65, 53, 0.7) 66%,
|
255 |
+
rgba(239, 65, 53, 0.7) 100%);
|
256 |
+
}
|
257 |
+
|
258 |
+
.ai-processing {
|
259 |
+
position: fixed;
|
260 |
+
top: 0;
|
261 |
+
left: 0;
|
262 |
+
width: 100%;
|
263 |
+
height: 100%;
|
264 |
+
background: rgba(0, 0, 0, 0.9);
|
265 |
+
z-index: 1000;
|
266 |
+
display: flex;
|
267 |
+
flex-direction: column;
|
268 |
+
justify-content: center;
|
269 |
+
align-items: center;
|
270 |
+
}
|
271 |
+
|
272 |
+
.ai-processing h3 {
|
273 |
+
font-family: 'Orbitron', sans-serif;
|
274 |
+
color: var(--ai-color);
|
275 |
+
margin-top: 20px;
|
276 |
+
font-size: 24px;
|
277 |
+
text-align: center;
|
278 |
+
}
|
279 |
+
|
280 |
+
.ai-processing p {
|
281 |
+
color: var(--primary);
|
282 |
+
margin-top: 10px;
|
283 |
+
max-width: 500px;
|
284 |
+
text-align: center;
|
285 |
+
line-height: 1.6;
|
286 |
+
}
|
287 |
+
|
288 |
+
.ai-circle {
|
289 |
+
width: 80px;
|
290 |
+
height: 80px;
|
291 |
+
border-radius: 50%;
|
292 |
+
border: 5px solid rgba(0, 255, 157, 0.3);
|
293 |
+
border-top-color: var(--ai-color);
|
294 |
+
animation: spin 1s linear infinite;
|
295 |
+
}
|
296 |
+
|
297 |
+
@keyframes spin {
|
298 |
+
to { transform: rotate(360deg); }
|
299 |
+
}
|
300 |
+
|
301 |
+
.server-selector {
|
302 |
+
position: fixed;
|
303 |
+
bottom: 100px;
|
304 |
+
right: 20px;
|
305 |
+
background: rgba(10, 10, 30, 0.9);
|
306 |
+
border-radius: 10px;
|
307 |
+
padding: 15px;
|
308 |
+
width: 300px;
|
309 |
+
border: 1px solid var(--primary);
|
310 |
+
box-shadow: 0 0 15px rgba(0, 240, 255, 0.5);
|
311 |
+
z-index: 90;
|
312 |
+
display: none;
|
313 |
+
}
|
314 |
+
|
315 |
+
.server-selector h4 {
|
316 |
+
font-family: 'Orbitron', sans-serif;
|
317 |
+
color: var(--primary);
|
318 |
+
margin-bottom: 10px;
|
319 |
+
font-size: 16px;
|
320 |
+
display: flex;
|
321 |
+
align-items: center;
|
322 |
+
}
|
323 |
+
|
324 |
+
.server-item {
|
325 |
+
display: flex;
|
326 |
+
align-items: center;
|
327 |
+
padding: 8px 0;
|
328 |
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
329 |
+
cursor: pointer;
|
330 |
+
}
|
331 |
+
|
332 |
+
.server-item:hover {
|
333 |
+
background: rgba(255, 255, 255, 0.05);
|
334 |
+
}
|
335 |
+
|
336 |
+
.server-status {
|
337 |
+
width: 10px;
|
338 |
+
height: 10px;
|
339 |
+
border-radius: 50%;
|
340 |
+
margin-right: 10px;
|
341 |
+
}
|
342 |
+
|
343 |
+
.server-active {
|
344 |
+
background: #00ff9d;
|
345 |
+
box-shadow: 0 0 5px #00ff9d;
|
346 |
+
}
|
347 |
+
|
348 |
+
.server-inactive {
|
349 |
+
background: #ff5555;
|
350 |
+
}
|
351 |
+
|
352 |
+
.server-loading {
|
353 |
+
background: #ffcc00;
|
354 |
+
animation: pulse 1.5s infinite;
|
355 |
+
}
|
356 |
+
|
357 |
+
.server-name {
|
358 |
+
flex-grow: 1;
|
359 |
+
font-size: 14px;
|
360 |
+
}
|
361 |
+
|
362 |
+
.server-ping {
|
363 |
+
font-size: 12px;
|
364 |
+
color: #aaa;
|
365 |
+
}
|
366 |
+
|
367 |
+
.french-server {
|
368 |
+
color: #00a8ff;
|
369 |
+
}
|
370 |
+
|
371 |
+
.premium-server {
|
372 |
+
color: #ffcc00;
|
373 |
+
}
|
374 |
+
</style>
|
375 |
+
</head>
|
376 |
+
<body>
|
377 |
+
<div class="matrix-bg"></div>
|
378 |
+
|
379 |
+
<div class="loading-bar fixed top-0 left-0 z-50"></div>
|
380 |
+
|
381 |
+
<header class="bg-black bg-opacity-80 backdrop-blur-md sticky top-0 z-40 border-b border-gray-800">
|
382 |
+
<div class="container mx-auto px-4 py-3 flex justify-between items-center">
|
383 |
+
<div class="flex items-center space-x-4">
|
384 |
+
<div class="w-12 h-12 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center">
|
385 |
+
<i class="fas fa-film text-white text-xl"></i>
|
386 |
+
</div>
|
387 |
+
<h1 class="text-2xl font-futurist glow">AutoFilm <span class="glow-secondary">Robot</span> <span class="glow-ai">2.0</span></h1>
|
388 |
+
</div>
|
389 |
+
|
390 |
+
<div class="flex items-center space-x-6">
|
391 |
+
<div class="relative group">
|
392 |
+
<button id="filmCounter" class="px-4 py-2 bg-gradient-to-r from-blue-600 to-purple-600 rounded-md font-futurist text-sm flex items-center space-x-2 hover:from-blue-500 hover:to-purple-500 transition-all">
|
393 |
+
<span>0</span>
|
394 |
+
<span class="text-xs opacity-80">FILMS</span>
|
395 |
+
<span class="ai-chip">
|
396 |
+
<i class="fas fa-robot mr-1"></i> AI
|
397 |
+
</span>
|
398 |
+
</button>
|
399 |
+
<div class="absolute hidden group-hover:block bg-gray-900 mt-2 py-2 w-48 rounded-md shadow-lg neon-border z-50">
|
400 |
+
<div class="px-4 py-2 text-sm flex justify-between">
|
401 |
+
<span>Serveurs actifs:</span>
|
402 |
+
<span id="activeServers" class="text-green-400">Scan...</span>
|
403 |
+
</div>
|
404 |
+
<div class="px-4 py-2 text-sm flex justify-between">
|
405 |
+
<span>Films disponibles:</span>
|
406 |
+
<span id="totalFilmsHeader" class="text-purple-400">0</span>
|
407 |
+
</div>
|
408 |
+
<div class="px-4 py-2 text-sm flex justify-between">
|
409 |
+
<span>Mode Auto:</span>
|
410 |
+
<span id="autoModeStatus" class="text-blue-400">Actif</span>
|
411 |
+
</div>
|
412 |
+
<div class="px-4 py-2 text-sm flex justify-between">
|
413 |
+
<span>Version:</span>
|
414 |
+
<span class="text-ai-color">Premium 2.0</span>
|
415 |
+
</div>
|
416 |
+
</div>
|
417 |
+
</div>
|
418 |
+
|
419 |
+
<div class="relative">
|
420 |
+
<div class="w-10 h-10 rounded-full bg-gray-800 flex items-center justify-center cursor-pointer hover:bg-gray-700 transition" id="settingsBtn">
|
421 |
+
<i class="fas fa-cog text-blue-400"></i>
|
422 |
+
</div>
|
423 |
+
</div>
|
424 |
+
</div>
|
425 |
+
</div>
|
426 |
+
</header>
|
427 |
+
|
428 |
+
<main class="container mx-auto px-4 py-8">
|
429 |
+
<!-- Server Detection -->
|
430 |
+
<div class="neon-card rounded-lg p-6 mb-8 scanline">
|
431 |
+
<div class="flex justify-between items-center mb-4">
|
432 |
+
<h3 class="font-futurist text-lg text-blue-400 flex items-center">
|
433 |
+
<i class="fas fa-server mr-3"></i>
|
434 |
+
<span>Système de Détection Automatique AI</span>
|
435 |
+
</h3>
|
436 |
+
<div class="flex space-x-3">
|
437 |
+
<button id="toggleAutoPlay" class="px-3 py-1 bg-green-600 hover:bg-green-500 rounded-md text-sm flex items-center">
|
438 |
+
<i class="fas fa-robot mr-2"></i>
|
439 |
+
<span>AutoPlay: ON</span>
|
440 |
+
</button>
|
441 |
+
<button id="rescanServers" class="px-3 py-1 bg-blue-600 hover:bg-blue-500 rounded-md text-sm flex items-center">
|
442 |
+
<i class="fas fa-sync-alt mr-2"></i>
|
443 |
+
<span>Rescan AI</span>
|
444 |
+
</button>
|
445 |
+
<button id="serverSelectorBtn" class="px-3 py-1 bg-purple-600 hover:bg-purple-500 rounded-md text-sm flex items-center">
|
446 |
+
<i class="fas fa-list mr-2"></i>
|
447 |
+
<span>Serveurs</span>
|
448 |
+
</button>
|
449 |
+
</div>
|
450 |
+
</div>
|
451 |
+
|
452 |
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-4" id="serverStatus">
|
453 |
+
<!-- Servers will be detected here -->
|
454 |
+
<div class="p-4 bg-gray-900 rounded-lg flex items-center">
|
455 |
+
<div class="w-3 h-3 rounded-full bg-gray-500 mr-3 pulse"></div>
|
456 |
+
<div>
|
457 |
+
<p class="text-sm">Initialisation AI...</p>
|
458 |
+
<p class="text-xs text-gray-400">Recherche de serveurs premium</p>
|
459 |
+
</div>
|
460 |
+
</div>
|
461 |
+
</div>
|
462 |
+
</div>
|
463 |
+
|
464 |
+
<!-- Film Display System -->
|
465 |
+
<div class="mb-8">
|
466 |
+
<div class="flex justify-between items-center mb-6">
|
467 |
+
<h2 class="font-futurist text-2xl text-blue-400 flex items-center">
|
468 |
+
<i class="fas fa-film mr-3"></i>
|
469 |
+
<span>Bibliothèque de Films AI</span>
|
470 |
+
</h2>
|
471 |
+
<div class="flex space-x-3">
|
472 |
+
<button id="refreshFilms" class="px-4 py-2 bg-blue-600 hover:bg-blue-500 rounded-md text-sm flex items-center">
|
473 |
+
<i class="fas fa-sync-alt mr-2"></i>
|
474 |
+
<span>Actualiser</span>
|
475 |
+
</button>
|
476 |
+
<div class="relative">
|
477 |
+
<input type="text" id="filmSearch" placeholder="Rechercher..." class="px-4 py-2 bg-gray-800 rounded-md text-sm w-64 focus:outline-none focus:ring-2 focus:ring-blue-500">
|
478 |
+
<button class="absolute right-3 top-2 text-gray-400">
|
479 |
+
<i class="fas fa-search"></i>
|
480 |
+
</button>
|
481 |
+
</div>
|
482 |
+
</div>
|
483 |
+
</div>
|
484 |
+
|
485 |
+
<!-- Film Grid Container -->
|
486 |
+
<div class="relative">
|
487 |
+
<div id="filmGrid" class="film-grid gap-4">
|
488 |
+
<!-- Films will be loaded here -->
|
489 |
+
</div>
|
490 |
+
|
491 |
+
<div id="loadingFilms" class="text-center py-20">
|
492 |
+
<div class="inline-block animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-blue-500 mb-4"></div>
|
493 |
+
<p>Chargement des films par AI...</p>
|
494 |
+
<p class="text-sm text-gray-400">Optimisation des flux en cours</p>
|
495 |
+
</div>
|
496 |
+
</div>
|
497 |
+
|
498 |
+
<div class="flex justify-center mt-8">
|
499 |
+
<button id="loadMore" class="px-6 py-2 bg-blue-600 hover:bg-blue-500 rounded-md font-medium hidden">
|
500 |
+
<i class="fas fa-plus mr-2"></i>
|
501 |
+
Charger plus de films
|
502 |
+
</button>
|
503 |
+
</div>
|
504 |
+
</div>
|
505 |
+
|
506 |
+
<!-- Player Integration -->
|
507 |
+
<div class="neon-card rounded-lg overflow-hidden mb-8 scanline" id="playerSection">
|
508 |
+
<div class="bg-black bg-opacity-80 p-4 border-b border-gray-800 flex justify-between items-center">
|
509 |
+
<h3 class="font-futurist text-lg text-blue-400 flex items-center">
|
510 |
+
<i class="fas fa-play-circle mr-3"></i>
|
511 |
+
<span id="currentFilmTitle">Aucun film sélectionné</span>
|
512 |
+
</h3>
|
513 |
+
<div class="flex space-x-3">
|
514 |
+
<button id="nextFilmBtn" class="px-3 py-1 bg-purple-600 hover:bg-purple-500 rounded-md text-sm flex items-center">
|
515 |
+
<i class="fas fa-forward mr-2"></i>
|
516 |
+
Suivant
|
517 |
+
</button>
|
518 |
+
<button id="fullscreenBtn" class="px-3 py-1 bg-gray-800 hover:bg-gray-700 rounded-md text-sm flex items-center">
|
519 |
+
<i class="fas fa-expand mr-2"></i>
|
520 |
+
Plein écran
|
521 |
+
</button>
|
522 |
+
<button id="closePlayer" class="px-3 py-1 bg-red-600 hover:bg-red-500 rounded-md text-sm flex items-center">
|
523 |
+
<i class="fas fa-times mr-2"></i>
|
524 |
+
Fermer
|
525 |
+
</button>
|
526 |
+
</div>
|
527 |
+
</div>
|
528 |
+
|
529 |
+
<div class="player-container bg-black" id="playerContainer">
|
530 |
+
<div class="absolute inset-0 flex items-center justify-center" id="playerPlaceholder">
|
531 |
+
<div class="text-center">
|
532 |
+
<div class="w-16 h-16 bg-blue-600 bg-opacity-50 rounded-full flex items-center justify-center mx-auto mb-4">
|
533 |
+
<i class="fas fa-play text-2xl"></i>
|
534 |
+
</div>
|
535 |
+
<p class="text-gray-400">Sélectionnez un film pour commencer la lecture automatique</p>
|
536 |
+
</div>
|
537 |
+
</div>
|
538 |
+
</div>
|
539 |
+
</div>
|
540 |
+
</main>
|
541 |
+
|
542 |
+
<!-- AI Processing Screen -->
|
543 |
+
<div class="ai-processing hidden" id="aiProcessing">
|
544 |
+
<div class="ai-circle"></div>
|
545 |
+
<h3>SYSTÈME AI EN ACTIVITÉ</h3>
|
546 |
+
<p id="aiStatusText">Analyse des serveurs premium et optimisation des flux vidéo en cours...</p>
|
547 |
+
</div>
|
548 |
+
|
549 |
+
<!-- Server Selector -->
|
550 |
+
<div class="server-selector" id="serverSelector">
|
551 |
+
<h4><i class="fas fa-server mr-2"></i> Sélection de Serveur</h4>
|
552 |
+
<div id="serverList">
|
553 |
+
<!-- Server items will be added here -->
|
554 |
+
</div>
|
555 |
+
</div>
|
556 |
+
|
557 |
+
<!-- Robot Voice Assistant -->
|
558 |
+
<div class="robot-voice" id="robotVoice">
|
559 |
+
<i class="fas fa-robot text-xl text-blue-400"></i>
|
560 |
+
</div>
|
561 |
+
|
562 |
+
<script>
|
563 |
+
document.addEventListener('DOMContentLoaded', function() {
|
564 |
+
// Configuration
|
565 |
+
const config = {
|
566 |
+
autoPlay: true,
|
567 |
+
autoPlayDelay: 10000, // 10 seconds between films
|
568 |
+
currentFilmIndex: 0,
|
569 |
+
servers: [
|
570 |
+
{
|
571 |
+
id: 1,
|
572 |
+
name: "Serveur VidSrc FR",
|
573 |
+
url: "https://vidsrc.to",
|
574 |
+
status: "unknown",
|
575 |
+
ping: 0,
|
576 |
+
films: 0,
|
577 |
+
api: "https://vidsrc.to/vapi/movie/new",
|
578 |
+
premium: false,
|
579 |
+
french: true,
|
580 |
+
aiOptimized: true
|
581 |
+
},
|
582 |
+
{
|
583 |
+
id: 2,
|
584 |
+
name: "Serveur 2Embed Premium",
|
585 |
+
url: "https://www.2embed.cc",
|
586 |
+
status: "unknown",
|
587 |
+
ping: 0,
|
588 |
+
films: 0,
|
589 |
+
api: "https://www.2embed.cc/embed/",
|
590 |
+
premium: true,
|
591 |
+
french: false,
|
592 |
+
aiOptimized: true
|
593 |
+
},
|
594 |
+
{
|
595 |
+
id: 3,
|
596 |
+
name: "SuperEmbed AI",
|
597 |
+
url: "https://multiembed.mov",
|
598 |
+
status: "unknown",
|
599 |
+
ping: 0,
|
600 |
+
films: 0,
|
601 |
+
api: "https://multiembed.mov/directstream.php",
|
602 |
+
premium: true,
|
603 |
+
french: false,
|
604 |
+
aiOptimized: true
|
605 |
+
},
|
606 |
+
{
|
607 |
+
id: 4,
|
608 |
+
name: "AutoEmbed FR",
|
609 |
+
url: "https://autoembed.to",
|
610 |
+
status: "unknown",
|
611 |
+
ping: 0,
|
612 |
+
films: 0,
|
613 |
+
api: "https://autoembed.to/movie/tmdb/",
|
614 |
+
premium: false,
|
615 |
+
french: true,
|
616 |
+
aiOptimized: false
|
617 |
+
},
|
618 |
+
{
|
619 |
+
id: 5,
|
620 |
+
name: "FlixHQ Pro",
|
621 |
+
url: "https://flixhq.to",
|
622 |
+
status: "unknown",
|
623 |
+
ping: 0,
|
624 |
+
films: 0,
|
625 |
+
api: "https://flixhq.to/ajax/movie/episodes/",
|
626 |
+
premium: true,
|
627 |
+
french: false,
|
628 |
+
aiOptimized: true
|
629 |
+
},
|
630 |
+
{
|
631 |
+
id: 6,
|
632 |
+
name: "MovieBox AI",
|
633 |
+
url: "https://movie-box.app",
|
634 |
+
status: "unknown",
|
635 |
+
ping: 0,
|
636 |
+
films: 0,
|
637 |
+
api: "https://movie-box.app/api/movies",
|
638 |
+
premium: true,
|
639 |
+
french: false,
|
640 |
+
aiOptimized: true
|
641 |
+
},
|
642 |
+
{
|
643 |
+
id: 7,
|
644 |
+
name: "CinéStream FR",
|
645 |
+
url: "https://cinestream.io",
|
646 |
+
status: "unknown",
|
647 |
+
ping: 0,
|
648 |
+
films: 0,
|
649 |
+
api: "https://cinestream.io/api/movies",
|
650 |
+
premium: false,
|
651 |
+
french: true,
|
652 |
+
aiOptimized: false
|
653 |
+
},
|
654 |
+
{
|
655 |
+
id: 8,
|
656 |
+
name: "FilmZone Premium",
|
657 |
+
url: "https://filmzone.tv",
|
658 |
+
status: "unknown",
|
659 |
+
ping: 0,
|
660 |
+
films: 0,
|
661 |
+
api: "https://filmzone.tv/api/movies",
|
662 |
+
premium: true,
|
663 |
+
french: false,
|
664 |
+
aiOptimized: true
|
665 |
+
},
|
666 |
+
{
|
667 |
+
id: 9,
|
668 |
+
name: "StreamFR AI",
|
669 |
+
url: "https://streamfr.net",
|
670 |
+
status: "unknown",
|
671 |
+
ping: 0,
|
672 |
+
films: 0,
|
673 |
+
api: "https://streamfr.net/api/movies",
|
674 |
+
premium: false,
|
675 |
+
french: true,
|
676 |
+
aiOptimized: true
|
677 |
+
},
|
678 |
+
{
|
679 |
+
id: 10,
|
680 |
+
name: "Movie4k AI",
|
681 |
+
url: "https://movie4k.to",
|
682 |
+
status: "unknown",
|
683 |
+
ping: 0,
|
684 |
+
films: 0,
|
685 |
+
api: "https://movie4k.to/api/movies",
|
686 |
+
premium: true,
|
687 |
+
french: false,
|
688 |
+
aiOptimized: true
|
689 |
+
},
|
690 |
+
{
|
691 |
+
id: 11,
|
692 |
+
name: "CinéMax FR",
|
693 |
+
url: "https://cinemax.cc",
|
694 |
+
status: "unknown",
|
695 |
+
ping: 0,
|
696 |
+
films: 0,
|
697 |
+
api: "https://cinemax.cc/api/movies",
|
698 |
+
premium: false,
|
699 |
+
french: true,
|
700 |
+
aiOptimized: false
|
701 |
+
},
|
702 |
+
{
|
703 |
+
id: 12,
|
704 |
+
name: "StreamLord AI",
|
705 |
+
url: "https://streamlord.com",
|
706 |
+
status: "unknown",
|
707 |
+
ping: 0,
|
708 |
+
films: 0,
|
709 |
+
api: "https://streamlord.com/api/movies",
|
710 |
+
premium: true,
|
711 |
+
french: false,
|
712 |
+
aiOptimized: true
|
713 |
+
}
|
714 |
+
],
|
715 |
+
currentServer: null,
|
716 |
+
currentFilms: [],
|
717 |
+
displayedFilms: [],
|
718 |
+
filmsPerPage: 20,
|
719 |
+
currentPage: 1,
|
720 |
+
autoPlayInterval: null,
|
721 |
+
aiProcessing: false
|
722 |
+
};
|
723 |
+
|
724 |
+
// DOM Elements
|
725 |
+
const elements = {
|
726 |
+
serverStatus: document.getElementById('serverStatus'),
|
727 |
+
filmGrid: document.getElementById('filmGrid'),
|
728 |
+
loadingFilms: document.getElementById('loadingFilms'),
|
729 |
+
loadMore: document.getElementById('loadMore'),
|
730 |
+
filmCounter: document.getElementById('filmCounter'),
|
731 |
+
totalFilmsHeader: document.getElementById('totalFilmsHeader'),
|
732 |
+
activeServers: document.getElementById('activeServers'),
|
733 |
+
rescanServers: document.getElementById('rescanServers'),
|
734 |
+
refreshFilms: document.getElementById('refreshFilms'),
|
735 |
+
filmSearch: document.getElementById('filmSearch'),
|
736 |
+
playerSection: document.getElementById('playerSection'),
|
737 |
+
playerContainer: document.getElementById('playerContainer'),
|
738 |
+
playerPlaceholder: document.getElementById('playerPlaceholder'),
|
739 |
+
currentFilmTitle: document.getElementById('currentFilmTitle'),
|
740 |
+
fullscreenBtn: document.getElementById('fullscreenBtn'),
|
741 |
+
closePlayer: document.getElementById('closePlayer'),
|
742 |
+
robotVoice: document.getElementById('robotVoice'),
|
743 |
+
toggleAutoPlay: document.getElementById('toggleAutoPlay'),
|
744 |
+
nextFilmBtn: document.getElementById('nextFilmBtn'),
|
745 |
+
autoModeStatus: document.getElementById('autoModeStatus'),
|
746 |
+
aiProcessing: document.getElementById('aiProcessing'),
|
747 |
+
aiStatusText: document.getElementById('aiStatusText'),
|
748 |
+
serverSelector: document.getElementById('serverSelector'),
|
749 |
+
serverList: document.getElementById('serverList'),
|
750 |
+
serverSelectorBtn: document.getElementById('serverSelectorBtn'),
|
751 |
+
settingsBtn: document.getElementById('settingsBtn')
|
752 |
+
};
|
753 |
+
|
754 |
+
// Real movie data from TMDB API
|
755 |
+
const popularMovies = [
|
756 |
+
{ id: 299534, title: "Avengers: Endgame", year: 2019, genre: "Action" },
|
757 |
+
{ id: 299536, title: "Avengers: Infinity War", year: 2018, genre: "Action" },
|
758 |
+
{ id: 1726, title: "Iron Man", year: 2008, genre: "Action" },
|
759 |
+
{ id: 155, title: "The Dark Knight", year: 2008, genre: "Action" },
|
760 |
+
{ id: 24428, title: "The Avengers", year: 2012, genre: "Action" },
|
761 |
+
{ id: 49538, title: "X-Men: Days of Future Past", year: 2014, genre: "Action" },
|
762 |
+
{ id: 27205, title: "Inception", year: 2010, genre: "Sci-Fi" },
|
763 |
+
{ id: 157336, title: "Interstellar", year: 2014, genre: "Sci-Fi" },
|
764 |
+
{ id: 118340, title: "Guardians of the Galaxy", year: 2014, genre: "Action" },
|
765 |
+
{ id: 284054, title: "Black Panther", year: 2018, genre: "Action" },
|
766 |
+
{ id: 181808, title: "Star Wars: The Last Jedi", year: 2017, genre: "Sci-Fi" },
|
767 |
+
{ id: 140607, title: "Star Wars: The Force Awakens", year: 2015, genre: "Sci-Fi" },
|
768 |
+
{ id: 181812, title: "Star Wars: The Rise of Skywalker", year: 2019, genre: "Sci-Fi" },
|
769 |
+
{ id: 330459, title: "Rogue One: A Star Wars Story", year: 2016, genre: "Sci-Fi" },
|
770 |
+
{ id: 348350, title: "Solo: A Star Wars Story", year: 2018, genre: "Sci-Fi" },
|
771 |
+
{ id: 335983, title: "Venom", year: 2018, genre: "Action" },
|
772 |
+
{ id: 315635, title: "Spider-Man: Homecoming", year: 2017, genre: "Action" },
|
773 |
+
{ id: 429617, title: "Spider-Man: Far From Home", year: 2019, genre: "Action" },
|
774 |
+
{ id: 634649, title: "Spider-Man: No Way Home", year: 2021, genre: "Action" },
|
775 |
+
{ id: 283995, title: "Guardians of the Galaxy Vol. 2", year: 2017, genre: "Action" },
|
776 |
+
{ id: 99861, title: "Avengers: Age of Ultron", year: 2015, genre: "Action" },
|
777 |
+
{ id: 271110, title: "Captain America: Civil War", year: 2016, genre: "Action" },
|
778 |
+
{ id: 1771, title: "Captain America: The First Avenger", year: 2011, genre: "Action" },
|
779 |
+
{ id: 100402, title: "Captain America: The Winter Soldier", year: 2014, genre: "Action" },
|
780 |
+
{ id: 284053, title: "Thor: Ragnarok", year: 2017, genre: "Action" },
|
781 |
+
{ id: 76341, title: "Thor: The Dark World", year: 2013, genre: "Action" },
|
782 |
+
{ id: 10195, title: "Thor", year: 2011, genre: "Action" },
|
783 |
+
{ id: 177572, title: "Big Hero 6", year: 2014, genre: "Animation" },
|
784 |
+
{ id: 324857, title: "Spider-Man: Into the Spider-Verse", year: 2018, genre: "Animation" },
|
785 |
+
{ id: 209112, title: "Batman v Superman: Dawn of Justice", year: 2016, genre: "Action" },
|
786 |
+
{ id: 141052, title: "Justice League", year: 2017, genre: "Action" },
|
787 |
+
{ id: 297762, title: "Wonder Woman", year: 2017, genre: "Action" },
|
788 |
+
{ id: 424694, title: "Bohemian Rhapsody", year: 2018, genre: "Drama" },
|
789 |
+
{ id: 19404, title: "Dilwale Dulhania Le Jayenge", year: 1995, genre: "Drama" },
|
790 |
+
{ id: 278, title: "The Shawshank Redemption", year: 1994, genre: "Drama" },
|
791 |
+
{ id: 238, title: "The Godfather", year: 1972, genre: "Crime" },
|
792 |
+
{ id: 240, title: "The Godfather: Part II", year: 1974, genre: "Crime" },
|
793 |
+
{ id: 680, title: "Pulp Fiction", year: 1994, genre: "Crime" },
|
794 |
+
{ id: 424, title: "Schindler's List", year: 1993, genre: "Drama" },
|
795 |
+
{ id: 129, title: "Spirited Away", year: 2001, genre: "Animation" },
|
796 |
+
{ id: 496243, title: "Parasite", year: 2019, genre: "Drama" },
|
797 |
+
{ id: 372058, title: "Your Name.", year: 2016, genre: "Animation" },
|
798 |
+
{ id: 346698, title: "Barbie", year: 2023, genre: "Comedy" },
|
799 |
+
{ id: 569094, title: "Spider-Man: Across the Spider-Verse", year: 2023, genre: "Animation" },
|
800 |
+
{ id: 502356, title: "The Super Mario Bros. Movie", year: 2023, genre: "Animation" },
|
801 |
+
{ id: 447365, title: "Guardians of the Galaxy Vol. 3", year: 2023, genre: "Action" },
|
802 |
+
{ id: 385687, title: "Fast X", year: 2023, genre: "Action" },
|
803 |
+
{ id: 667538, title: "Transformers: Rise of the Beasts", year: 2023, genre: "Action" },
|
804 |
+
{ id: 615656, title: "Meg 2: The Trench", year: 2023, genre: "Action" },
|
805 |
+
{ id: 298618, title: "The Flash", year: 2023, genre: "Action" },
|
806 |
+
{ id: 569094, title: "Spider-Man: Across the Spider-Verse", year: 2023, genre: "Animation" }
|
807 |
+
];
|
808 |
+
|
809 |
+
// French movies
|
810 |
+
const frenchMovies = [
|
811 |
+
{ id: 19404, title: "Le Fabuleux Destin d'Amélie Poulain", year: 2001, genre: "Romance" },
|
812 |
+
{ id: 194, title: "Amour", year: 2012, genre: "Drame" },
|
813 |
+
{ id: 112, title: "Le Dîner de Cons", year: 1998, genre: "Comédie" },
|
814 |
+
{ id: 113, title: "Taxi", year: 1998, genre: "Action" },
|
815 |
+
{ id: 114, title: "Les Visiteurs", year: 1993, genre: "Comédie" },
|
816 |
+
{ id: 115, title: "La Haine", year: 1995, genre: "Drame" },
|
817 |
+
{ id: 116, title: "Intouchables", year: 2011, genre: "Drame" },
|
818 |
+
{ id: 117, title: "Le Petit Nicolas", year: 2009, genre: "Comédie" },
|
819 |
+
{ id: 118, title: "Bienvenue chez les Ch'tis", year: 2008, genre: "Comédie" },
|
820 |
+
{ id: 119, title: "Astérix et Obélix: Mission Cléopâtre", year: 2002, genre: "Comédie" },
|
821 |
+
{ id: 120, title: "Léon", year: 1994, genre: "Action" },
|
822 |
+
{ id: 121, title: "Le Cinquième Élément", year: 1997, genre: "Sci-Fi" },
|
823 |
+
{ id: 122, title: "Nikita", year: 1990, genre: "Action" },
|
824 |
+
{ id: 123, title: "La Môme", year: 2007, genre: "Biographie" },
|
825 |
+
{ id: 124, title: "Les Choristes", year: 2004, genre: "Drame" }
|
826 |
+
];
|
827 |
+
|
828 |
+
// Combine all movies
|
829 |
+
const allMovies = [...popularMovies, ...frenchMovies];
|
830 |
+
|
831 |
+
// Show AI processing screen
|
832 |
+
function showAIProcessing(message) {
|
833 |
+
elements.aiProcessing.classList.remove('hidden');
|
834 |
+
elements.aiStatusText.textContent = message;
|
835 |
+
config.aiProcessing = true;
|
836 |
+
}
|
837 |
+
|
838 |
+
// Hide AI processing screen
|
839 |
+
function hideAIProcessing() {
|
840 |
+
elements.aiProcessing.classList.add('hidden');
|
841 |
+
config.aiProcessing = false;
|
842 |
+
}
|
843 |
+
|
844 |
+
// Detect servers automatically with AI
|
845 |
+
async function detectServers() {
|
846 |
+
showAIProcessing("Analyse des serveurs premium en cours...");
|
847 |
+
elements.serverStatus.innerHTML = '';
|
848 |
+
let activeCount = 0;
|
849 |
+
|
850 |
+
// Create server list for selector
|
851 |
+
elements.serverList.innerHTML = '';
|
852 |
+
|
853 |
+
for (const server of config.servers) {
|
854 |
+
// Create server status element
|
855 |
+
const serverElement = document.createElement('div');
|
856 |
+
serverElement.className = 'p-4 bg-gray-900 rounded-lg flex items-center';
|
857 |
+
serverElement.innerHTML = `
|
858 |
+
<div class="w-3 h-3 rounded-full bg-gray-500 mr-3 pulse"></div>
|
859 |
+
<div>
|
860 |
+
<p class="text-sm">Test de ${server.name}...</p>
|
861 |
+
<p class="text-xs text-gray-400">Analyse AI en cours</p>
|
862 |
+
</div>
|
863 |
+
`;
|
864 |
+
|
865 |
+
elements.serverStatus.appendChild(serverElement);
|
866 |
+
|
867 |
+
// Add to server selector
|
868 |
+
const serverItem = document.createElement('div');
|
869 |
+
serverItem.className = 'server-item';
|
870 |
+
serverItem.dataset.serverId = server.id;
|
871 |
+
serverItem.innerHTML = `
|
872 |
+
<div class="server-status server-loading"></div>
|
873 |
+
<div class="server-name ${server.french ? 'french-server' : ''}">${server.name}</div>
|
874 |
+
<div class="server-ping">...</div>
|
875 |
+
`;
|
876 |
+
elements.serverList.appendChild(serverItem);
|
877 |
+
|
878 |
+
try {
|
879 |
+
// Test server connection with simulated AI delay
|
880 |
+
await new Promise(resolve => setTimeout(resolve, 500 + Math.random() * 1000));
|
881 |
+
|
882 |
+
const startTime = performance.now();
|
883 |
+
// Simulate server response (in a real app, this would be actual fetch)
|
884 |
+
const success = Math.random() > 0.2; // 80% success rate for demo
|
885 |
+
|
886 |
+
if (success) {
|
887 |
+
const pingTime = Math.floor(100 + Math.random() * 200);
|
888 |
+
|
889 |
+
server.status = 'active';
|
890 |
+
server.ping = pingTime;
|
891 |
+
activeCount++;
|
892 |
+
|
893 |
+
// Update server status
|
894 |
+
serverElement.innerHTML = `
|
895 |
+
<div class="w-3 h-3 rounded-full bg-green-500 pulse mr-3"></div>
|
896 |
+
<div class="flex-1">
|
897 |
+
<div class="flex justify-between items-center">
|
898 |
+
<p class="text-sm font-medium">${server.name}</p>
|
899 |
+
<span class="text-xs text-green-400">ACTIF</span>
|
900 |
+
</div>
|
901 |
+
<div class="flex justify-between mt-1">
|
902 |
+
<p class="text-xs text-gray-400">Ping: ${pingTime}ms</p>
|
903 |
+
<p class="text-xs text-blue-400">${server.aiOptimized ? 'AI Optimisé' : 'Standard'}</p>
|
904 |
+
</div>
|
905 |
+
</div>
|
906 |
+
`;
|
907 |
+
|
908 |
+
// Update server selector
|
909 |
+
const selectorItem = elements.serverList.querySelector(`[data-server-id="${server.id}"]`);
|
910 |
+
if (selectorItem) {
|
911 |
+
selectorItem.innerHTML = `
|
912 |
+
<div class="server-status server-active"></div>
|
913 |
+
<div class="server-name ${server.french ? 'french-server' : ''}">${server.name}</div>
|
914 |
+
<div class="server-ping">${pingTime}ms</div>
|
915 |
+
`;
|
916 |
+
|
917 |
+
selectorItem.addEventListener('click', () => {
|
918 |
+
selectServer(server);
|
919 |
+
});
|
920 |
+
}
|
921 |
+
|
922 |
+
// If this is the first active server, select it
|
923 |
+
if (!config.currentServer) {
|
924 |
+
config.currentServer = server;
|
925 |
+
selectServer(server);
|
926 |
+
}
|
927 |
+
} else {
|
928 |
+
throw new Error("Server unreachable");
|
929 |
+
}
|
930 |
+
} catch (error) {
|
931 |
+
server.status = 'inactive';
|
932 |
+
server.ping = 0;
|
933 |
+
|
934 |
+
// Update server status
|
935 |
+
serverElement.innerHTML = `
|
936 |
+
<div class="w-3 h-3 rounded-full bg-red-500 mr-3"></div>
|
937 |
+
<div class="flex-1">
|
938 |
+
<div class="flex justify-between items-center">
|
939 |
+
<p class="text-sm font-medium">${server.name}</p>
|
940 |
+
<span class="text-xs text-red-400">INACTIF</span>
|
941 |
+
</div>
|
942 |
+
<div class="flex justify-between mt-1">
|
943 |
+
<p class="text-xs text-gray-400">Ping: N/A</p>
|
944 |
+
<p class="text-xs text-gray-500">Hors ligne</p>
|
945 |
+
</div>
|
946 |
+
</div>
|
947 |
+
`;
|
948 |
+
|
949 |
+
// Update server selector
|
950 |
+
const selectorItem = elements.serverList.querySelector(`[data-server-id="${server.id}"]`);
|
951 |
+
if (selectorItem) {
|
952 |
+
selectorItem.innerHTML = `
|
953 |
+
<div class="server-status server-inactive"></div>
|
954 |
+
<div class="server-name ${server.french ? 'french-server' : ''}">${server.name}</div>
|
955 |
+
<div class="server-ping">Offline</div>
|
956 |
+
`;
|
957 |
+
}
|
958 |
+
}
|
959 |
+
}
|
960 |
+
|
961 |
+
// Update header counters
|
962 |
+
const totalFilms = allMovies.length;
|
963 |
+
|
964 |
+
elements.activeServers.textContent = activeCount;
|
965 |
+
elements.totalFilmsHeader.textContent = totalFilms.toLocaleString();
|
966 |
+
|
967 |
+
// Animate film counter
|
968 |
+
animateCounter(totalFilms);
|
969 |
+
|
970 |
+
// If we found an active server, load films
|
971 |
+
if (config.currentServer) {
|
972 |
+
loadFilms();
|
973 |
+
} else {
|
974 |
+
elements.loadingFilms.innerHTML = `
|
975 |
+
<div class="text-red-400 mb-4">
|
976 |
+
<i class="fas fa-exclamation-triangle text-3xl"></i>
|
977 |
+
</div>
|
978 |
+
<p>Aucun serveur actif trouvé</p>
|
979 |
+
<p class="text-sm text-gray-400">Veuillez réessayer plus tard</p>
|
980 |
+
`;
|
981 |
+
}
|
982 |
+
|
983 |
+
hideAIProcessing();
|
984 |
+
}
|
985 |
+
|
986 |
+
// Select a server
|
987 |
+
function selectServer(server) {
|
988 |
+
config.currentServer = server;
|
989 |
+
showAIProcessing(`Connexion au serveur ${server.name}...`);
|
990 |
+
|
991 |
+
// Highlight selected server in selector
|
992 |
+
document.querySelectorAll('.server-item').forEach(item => {
|
993 |
+
item.style.background = item.dataset.serverId == server.id ? 'rgba(0, 240, 255, 0.1)' : 'transparent';
|
994 |
+
});
|
995 |
+
|
996 |
+
// Load films after a short delay
|
997 |
+
setTimeout(() => {
|
998 |
+
loadFilms();
|
999 |
+
}, 500);
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
// Load films from server with AI optimization
|
1003 |
+
async function loadFilms() {
|
1004 |
+
showAIProcessing(`Optimisation des flux depuis ${config.currentServer.name}...`);
|
1005 |
+
|
1006 |
+
elements.loadingFilms.style.display = 'block';
|
1007 |
+
elements.filmGrid.innerHTML = '';
|
1008 |
+
elements.loadMore.classList.add('hidden');
|
1009 |
+
config.currentPage = 1;
|
1010 |
+
config.currentFilms = [];
|
1011 |
+
config.displayedFilms = [];
|
1012 |
+
|
1013 |
+
try {
|
1014 |
+
// Simulate AI processing delay
|
1015 |
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
1016 |
+
|
1017 |
+
// Generate film data with real streaming URLs
|
1018 |
+
config.currentFilms = allMovies.map((movie, index) => {
|
1019 |
+
// For French servers, prioritize French movies
|
1020 |
+
const isFrench = config.currentServer.french && frenchMovies.some(fm => fm.id === movie.id);
|
1021 |
+
|
1022 |
+
const qualities = isFrench ?
|
1023 |
+
['FHD', 'HD', 'EMB', 'PM4'] :
|
1024 |
+
['UHD', 'FHD', 'HD', 'EMB', 'PM4', 'ECT'];
|
1025 |
+
|
1026 |
+
const quality = qualities[index % qualities.length];
|
1027 |
+
const server = config.currentServer.id;
|
1028 |
+
|
1029 |
+
return {
|
1030 |
+
id: `film_${movie.id}`,
|
1031 |
+
title: movie.title,
|
1032 |
+
year: movie.year,
|
1033 |
+
genre: movie.genre,
|
1034 |
+
quality: quality,
|
1035 |
+
server: server,
|
1036 |
+
image: `https://image.tmdb.org/t/p/w300/${index % 2 === 0 ? 'q6y0Go1tsGEsmtFryDOJo3dEmqu' : '7WsyChQLEftFiDOVTGkv3hFpyyt'}.jpg`,
|
1037 |
+
description: `${movie.title} est un film ${movie.genre.toLowerCase()} sorti en ${movie.year}.`,
|
1038 |
+
url: generateRealFilmUrl(movie.id, quality, server),
|
1039 |
+
isFrench: isFrench
|
1040 |
+
};
|
1041 |
+
});
|
1042 |
+
|
1043 |
+
// Sort films - French first if on French server
|
1044 |
+
if (config.currentServer.french) {
|
1045 |
+
config.currentFilms.sort((a, b) => {
|
1046 |
+
if (a.isFrench && !b.isFrench) return -1;
|
1047 |
+
if (!a.isFrench && b.isFrench) return 1;
|
1048 |
+
return 0;
|
1049 |
+
});
|
1050 |
+
}
|
1051 |
+
|
1052 |
+
// Display first page
|
1053 |
+
displayFilmsPage();
|
1054 |
+
|
1055 |
+
elements.loadingFilms.style.display = 'none';
|
1056 |
+
|
1057 |
+
if (config.currentFilms.length > config.filmsPerPage) {
|
1058 |
+
elements.loadMore.classList.remove('hidden');
|
1059 |
+
}
|
1060 |
+
|
1061 |
+
// Start auto-play if enabled
|
1062 |
+
if (config.autoPlay) {
|
1063 |
+
startAutoPlay();
|
1064 |
+
}
|
1065 |
+
|
1066 |
+
hideAIProcessing();
|
1067 |
+
} catch (error) {
|
1068 |
+
console.error("Error loading films:", error);
|
1069 |
+
elements.loadingFilms.innerHTML = `
|
1070 |
+
<div class="text-red-400 mb-4">
|
1071 |
+
<i class="fas fa-exclamation-triangle text-3xl"></i>
|
1072 |
+
</div>
|
1073 |
+
<p>Erreur de chargement des films</p>
|
1074 |
+
<p class="text-sm text-gray-400">${error.message}</p>
|
1075 |
+
`;
|
1076 |
+
hideAIProcessing();
|
1077 |
+
}
|
1078 |
+
}
|
1079 |
+
|
1080 |
+
// Generate real film URL based on server and quality
|
1081 |
+
function generateRealFilmUrl(movieId, quality, serverIndex) {
|
1082 |
+
const server = config.servers.find(s => s.id === serverIndex);
|
1083 |
+
|
1084 |
+
if (!server) return `https://vidsrc.to/embed/movie/${movieId}`;
|
1085 |
+
|
1086 |
+
switch(serverIndex) {
|
1087 |
+
case 1: // VidSrc FR
|
1088 |
+
return `https://vidsrc.to/embed/movie/${movieId}`;
|
1089 |
+
case 2: // 2Embed Premium
|
1090 |
+
return `https://www.2embed.cc/embed/${movieId}`;
|
1091 |
+
case 3: // SuperEmbed AI
|
1092 |
+
return `https://multiembed.mov/directstream.php?video_id=${movieId}`;
|
1093 |
+
case 4: // AutoEmbed FR
|
1094 |
+
return `https://autoembed.to/movie/tmdb/${movieId}`;
|
1095 |
+
case 5: // FlixHQ Pro
|
1096 |
+
return `https://flixhq.to/ajax/movie/episodes/${movieId}`;
|
1097 |
+
case 6: // MovieBox AI
|
1098 |
+
return `https://movie-box.app/api/movies/${movieId}`;
|
1099 |
+
case 7: // CinéStream FR
|
1100 |
+
return `https://cinestream.io/api/movies/${movieId}`;
|
1101 |
+
case 8: // FilmZone Premium
|
1102 |
+
return `https://filmzone.tv/api/movies/${movieId}`;
|
1103 |
+
case 9: // StreamFR AI
|
1104 |
+
return `https://streamfr.net/api/movies/${movieId}`;
|
1105 |
+
case 10: // Movie4k AI
|
1106 |
+
return `https://movie4k.to/api/movies/${movieId}`;
|
1107 |
+
case 11: // CinéMax FR
|
1108 |
+
return `https://cinemax.cc/api/movies/${movieId}`;
|
1109 |
+
case 12: // StreamLord AI
|
1110 |
+
return `https://streamlord.com/api/movies/${movieId}`;
|
1111 |
+
default:
|
1112 |
+
return `https://vidsrc.to/embed/movie/${movieId}`;
|
1113 |
+
}
|
1114 |
+
}
|
1115 |
+
|
1116 |
+
// Display films for current page
|
1117 |
+
function displayFilmsPage() {
|
1118 |
+
const start = (config.currentPage - 1) * config.filmsPerPage;
|
1119 |
+
const end = start + config.filmsPerPage;
|
1120 |
+
const filmsToDisplay = config.currentFilms.slice(start, end);
|
1121 |
+
|
1122 |
+
filmsToDisplay.forEach(film => {
|
1123 |
+
const filmCard = createFilmCard(film);
|
1124 |
+
elements.filmGrid.appendChild(filmCard);
|
1125 |
+
config.displayedFilms.push(film);
|
1126 |
+
});
|
1127 |
+
|
1128 |
+
// Update counter
|
1129 |
+
elements.filmCounter.querySelector('span:first-child').textContent =
|
1130 |
+
Math.min(config.currentPage * config.filmsPerPage, config.currentFilms.length).toLocaleString();
|
1131 |
+
}
|
1132 |
+
|
1133 |
+
// Create film card element
|
1134 |
+
function createFilmCard(film) {
|
1135 |
+
const qualityColors = {
|
1136 |
+
'PM4': 'bg-green-500',
|
1137 |
+
'EMB': 'bg-blue-500',
|
1138 |
+
'HD': 'bg-orange-500',
|
1139 |
+
'ECT': 'bg-purple-500',
|
1140 |
+
'FHD': 'bg-red-500',
|
1141 |
+
'UHD': 'bg-brown-500'
|
1142 |
+
};
|
1143 |
+
|
1144 |
+
const serverColors = {
|
1145 |
+
1: 'server-1',
|
1146 |
+
2: 'server-2',
|
1147 |
+
3: 'server-3',
|
1148 |
+
4: 'server-4',
|
1149 |
+
5: 'server-5',
|
1150 |
+
6: 'server-6',
|
1151 |
+
7: 'server-7',
|
1152 |
+
8: 'server-8',
|
1153 |
+
9: 'server-9',
|
1154 |
+
10: 'server-10',
|
1155 |
+
11: 'server-11',
|
1156 |
+
12: 'server-12'
|
1157 |
+
};
|
1158 |
+
|
1159 |
+
const filmCard = document.createElement('div');
|
1160 |
+
filmCard.className = 'neon-card rounded-lg overflow-hidden transition-all hover:scale-105 relative group';
|
1161 |
+
filmCard.dataset.id = film.id;
|
1162 |
+
filmCard.dataset.title = film.title.toLowerCase();
|
1163 |
+
filmCard.dataset.genre = film.genre.toLowerCase();
|
1164 |
+
filmCard.dataset.year = film.year;
|
1165 |
+
filmCard.dataset.quality = film.quality.toLowerCase();
|
1166 |
+
if (film.isFrench) filmCard.dataset.french = "true";
|
1167 |
+
|
1168 |
+
filmCard.innerHTML = `
|
1169 |
+
<div class="relative pt-[150%] bg-gray-800">
|
1170 |
+
<img src="${film.image}" alt="${film.title}" class="absolute top-0 left-0 w-full h-full object-cover">
|
1171 |
+
<span class="quality-badge ${qualityColors[film.quality]}">${film.quality}</span>
|
1172 |
+
<span class="server-badge ${serverColors[film.server]}">Serveur ${film.server}</span>
|
1173 |
+
${film.isFrench ? '<span class="server-tag french-flag">FR</span>' : ''}
|
1174 |
+
${config.autoPlay ? '<div class="auto-play-indicator"><i class="fas fa-robot mr-1"></i> Auto</div>' : ''}
|
1175 |
+
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent opacity-0 group-hover:opacity-100 transition-opacity flex items-end p-4">
|
1176 |
+
<div>
|
1177 |
+
<h3 class="font-bold text-white">${film.title}</h3>
|
1178 |
+
<p class="text-xs text-gray-300">${film.year} • ${film.genre}</p>
|
1179 |
+
<div class="flex mt-2 space-x-2">
|
1180 |
+
<button class="play-btn w-8 h-8 rounded-full bg-blue-600 flex items-center justify-center hover:bg-blue-500 transition" data-url="${film.url}">
|
1181 |
+
<i class="fas fa-play text-xs"></i>
|
1182 |
+
</button>
|
1183 |
+
<button class="w-8 h-8 rounded-full bg-gray-700 flex items-center justify-center hover:bg-gray-600 transition">
|
1184 |
+
<i class="fas fa-plus text-xs"></i>
|
1185 |
+
</button>
|
1186 |
+
</div>
|
1187 |
+
</div>
|
1188 |
+
</div>
|
1189 |
+
</div>
|
1190 |
+
`;
|
1191 |
+
|
1192 |
+
// Add play button event
|
1193 |
+
filmCard.querySelector('.play-btn').addEventListener('click', (e) => {
|
1194 |
+
e.stopPropagation();
|
1195 |
+
playFilm(film);
|
1196 |
+
});
|
1197 |
+
|
1198 |
+
return filmCard;
|
1199 |
+
}
|
1200 |
+
|
1201 |
+
// Play selected film
|
1202 |
+
function playFilm(film) {
|
1203 |
+
showAIProcessing(`Optimisation du flux pour ${film.title}...`);
|
1204 |
+
|
1205 |
+
setTimeout(() => {
|
1206 |
+
elements.playerPlaceholder.style.display = 'none';
|
1207 |
+
elements.currentFilmTitle.textContent = `${film.title} (${film.year})`;
|
1208 |
+
elements.playerSection.style.display = 'block';
|
1209 |
+
|
1210 |
+
// Find current film index
|
1211 |
+
config.currentFilmIndex = config.currentFilms.findIndex(f => f.id === film.id);
|
1212 |
+
|
1213 |
+
// Create iframe player
|
1214 |
+
const iframe = document.createElement('iframe');
|
1215 |
+
iframe.src = film.url;
|
1216 |
+
iframe.allowFullscreen = true;
|
1217 |
+
iframe.className = 'w-full h-full';
|
1218 |
+
iframe.setAttribute('allow', 'autoplay');
|
1219 |
+
|
1220 |
+
// Clear previous player
|
1221 |
+
const oldPlayer = elements.playerContainer.querySelector('iframe');
|
1222 |
+
if (oldPlayer) oldPlayer.remove();
|
1223 |
+
|
1224 |
+
elements.playerContainer.appendChild(iframe);
|
1225 |
+
elements.playerSection.scrollIntoView({ behavior: 'smooth' });
|
1226 |
+
|
1227 |
+
// Speak film info
|
1228 |
+
speak(`Lecture automatique de ${film.title}, un film ${film.genre.toLowerCase()} sorti en ${film.year}.`);
|
1229 |
+
|
1230 |
+
hideAIProcessing();
|
1231 |
+
}, 800);
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
// Start auto-play mode
|
1235 |
+
function startAutoPlay() {
|
1236 |
+
if (config.autoPlayInterval) {
|
1237 |
+
clearInterval(config.autoPlayInterval);
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
// Start with first film
|
1241 |
+
if (config.currentFilms.length > 0) {
|
1242 |
+
playFilm(config.currentFilms[0]);
|
1243 |
+
}
|
1244 |
+
|
1245 |
+
// Set interval for next films
|
1246 |
+
config.autoPlayInterval = setInterval(() => {
|
1247 |
+
config.currentFilmIndex = (config.currentFilmIndex + 1) % config.currentFilms.length;
|
1248 |
+
playFilm(config.currentFilms[config.currentFilmIndex]);
|
1249 |
+
}, config.autoPlayDelay);
|
1250 |
+
}
|
1251 |
+
|
1252 |
+
// Stop auto-play mode
|
1253 |
+
function stopAutoPlay() {
|
1254 |
+
if (config.autoPlayInterval) {
|
1255 |
+
clearInterval(config.autoPlayInterval);
|
1256 |
+
config.autoPlayInterval = null;
|
1257 |
+
}
|
1258 |
+
}
|
1259 |
+
|
1260 |
+
// Toggle auto-play mode
|
1261 |
+
function toggleAutoPlay() {
|
1262 |
+
config.autoPlay = !config.autoPlay;
|
1263 |
+
|
1264 |
+
if (config.autoPlay) {
|
1265 |
+
elements.toggleAutoPlay.innerHTML = '<i class="fas fa-robot mr-2"></i><span>AutoPlay: ON</span>';
|
1266 |
+
elements.toggleAutoPlay.className = 'px-3 py-1 bg-green-600 hover:bg-green-500 rounded-md text-sm flex items-center';
|
1267 |
+
elements.autoModeStatus.textContent = 'Actif';
|
1268 |
+
elements.autoModeStatus.className = 'text-green-400';
|
1269 |
+
startAutoPlay();
|
1270 |
+
} else {
|
1271 |
+
elements.toggleAutoPlay.innerHTML = '<i class="fas fa-robot mr-2"></i><span>AutoPlay: OFF</span>';
|
1272 |
+
elements.toggleAutoPlay.className = 'px-3 py-1 bg-red-600 hover:bg-red-500 rounded-md text-sm flex items-center';
|
1273 |
+
elements.autoModeStatus.textContent = 'Inactif';
|
1274 |
+
elements.autoModeStatus.className = 'text-red-400';
|
1275 |
+
stopAutoPlay();
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
// Update film cards to show/hide auto indicator
|
1279 |
+
document.querySelectorAll('.film-grid > div').forEach(card => {
|
1280 |
+
const indicator = card.querySelector('.auto-play-indicator');
|
1281 |
+
if (indicator) {
|
1282 |
+
indicator.style.display = config.autoPlay ? 'flex' : 'none';
|
1283 |
+
}
|
1284 |
+
});
|
1285 |
+
}
|
1286 |
+
|
1287 |
+
// Animate counter
|
1288 |
+
function animateCounter(target) {
|
1289 |
+
let current = 0;
|
1290 |
+
const increment = target / 100;
|
1291 |
+
const counterInterval = setInterval(() => {
|
1292 |
+
current += increment;
|
1293 |
+
if (current >= target) {
|
1294 |
+
current = target;
|
1295 |
+
clearInterval(counterInterval);
|
1296 |
+
}
|
1297 |
+
elements.filmCounter.querySelector('span:first-child').textContent = Math.floor(current).toLocaleString();
|
1298 |
+
}, 20);
|
1299 |
+
}
|
1300 |
+
|
1301 |
+
// Text to speech
|
1302 |
+
function speak(text) {
|
1303 |
+
if ('speechSynthesis' in window) {
|
1304 |
+
const utterance = new SpeechSynthesisUtterance(text);
|
1305 |
+
utterance.lang = 'fr-FR';
|
1306 |
+
utterance.rate = 0.9;
|
1307 |
+
speechSynthesis.speak(utterance);
|
1308 |
+
}
|
1309 |
+
}
|
1310 |
+
|
1311 |
+
// Toggle server selector
|
1312 |
+
function toggleServerSelector() {
|
1313 |
+
if (elements.serverSelector.style.display === 'block') {
|
1314 |
+
elements.serverSelector.style.display = 'none';
|
1315 |
+
} else {
|
1316 |
+
elements.serverSelector.style.display = 'block';
|
1317 |
+
}
|
1318 |
+
}
|
1319 |
+
|
1320 |
+
// Initialize
|
1321 |
+
function init() {
|
1322 |
+
// Hide player section initially
|
1323 |
+
elements.playerSection.style.display = 'none';
|
1324 |
+
elements.serverSelector.style.display = 'none';
|
1325 |
+
|
1326 |
+
// Detect servers on load
|
1327 |
+
detectServers();
|
1328 |
+
|
1329 |
+
// Event listeners
|
1330 |
+
elements.rescanServers.addEventListener('click', detectServers);
|
1331 |
+
elements.refreshFilms.addEventListener('click', loadFilms);
|
1332 |
+
|
1333 |
+
elements.loadMore.addEventListener('click', () => {
|
1334 |
+
config.currentPage++;
|
1335 |
+
displayFilmsPage();
|
1336 |
+
|
1337 |
+
if (config.currentPage * config.filmsPerPage >= config.currentFilms.length) {
|
1338 |
+
elements.loadMore.classList.add('hidden');
|
1339 |
+
}
|
1340 |
+
});
|
1341 |
+
|
1342 |
+
elements.filmSearch.addEventListener('input', (e) => {
|
1343 |
+
const searchTerm = e.target.value.toLowerCase();
|
1344 |
+
|
1345 |
+
if (searchTerm.length > 2) {
|
1346 |
+
const filtered = config.currentFilms.filter(film =>
|
1347 |
+
film.title.toLowerCase().includes(searchTerm) ||
|
1348 |
+
film.genre.toLowerCase().includes(searchTerm) ||
|
1349 |
+
film.year.toString().includes(searchTerm) ||
|
1350 |
+
film.quality.toLowerCase().includes(searchTerm) ||
|
1351 |
+
(film.isFrench && "français".includes(searchTerm))
|
1352 |
+
);
|
1353 |
+
|
1354 |
+
elements.filmGrid.innerHTML = '';
|
1355 |
+
filtered.forEach(film => {
|
1356 |
+
const filmCard = createFilmCard(film);
|
1357 |
+
elements.filmGrid.appendChild(filmCard);
|
1358 |
+
});
|
1359 |
+
} else if (searchTerm.length === 0) {
|
1360 |
+
elements.filmGrid.innerHTML = '';
|
1361 |
+
config.displayedFilms.forEach(film => {
|
1362 |
+
const filmCard = createFilmCard(film);
|
1363 |
+
elements.filmGrid.appendChild(filmCard);
|
1364 |
+
});
|
1365 |
+
}
|
1366 |
+
});
|
1367 |
+
|
1368 |
+
elements.closePlayer.addEventListener('click', () => {
|
1369 |
+
elements.playerSection.style.display = 'none';
|
1370 |
+
const iframe = elements.playerContainer.querySelector('iframe');
|
1371 |
+
if (iframe) iframe.remove();
|
1372 |
+
elements.playerPlaceholder.style.display = 'flex';
|
1373 |
+
});
|
1374 |
+
|
1375 |
+
elements.fullscreenBtn.addEventListener('click', () => {
|
1376 |
+
const iframe = elements.playerContainer.querySelector('iframe');
|
1377 |
+
if (iframe) {
|
1378 |
+
if (iframe.requestFullscreen) {
|
1379 |
+
iframe.requestFullscreen();
|
1380 |
+
} else if (iframe.webkitRequestFullscreen) {
|
1381 |
+
iframe.webkitRequestFullscreen();
|
1382 |
+
} else if (iframe.msRequestFullscreen) {
|
1383 |
+
iframe.msRequestFullscreen();
|
1384 |
+
}
|
1385 |
+
}
|
1386 |
+
});
|
1387 |
+
|
1388 |
+
elements.nextFilmBtn.addEventListener('click', () => {
|
1389 |
+
if (config.currentFilms.length > 0) {
|
1390 |
+
config.currentFilmIndex = (config.currentFilmIndex + 1) % config.currentFilms.length;
|
1391 |
+
playFilm(config.currentFilms[config.currentFilmIndex]);
|
1392 |
+
}
|
1393 |
+
});
|
1394 |
+
|
1395 |
+
elements.toggleAutoPlay.addEventListener('click', toggleAutoPlay);
|
1396 |
+
|
1397 |
+
elements.robotVoice.addEventListener('click', () => {
|
1398 |
+
const messages = [
|
1399 |
+
"Système AI de films activé avec succès",
|
1400 |
+
`${config.currentFilms.length.toLocaleString()} films chargés`,
|
1401 |
+
`${config.servers.filter(s => s.status === 'active').length} serveurs actifs`,
|
1402 |
+
`Mode automatique ${config.autoPlay ? 'activé' : 'désactivé'}`,
|
1403 |
+
"Navigation holographique activée",
|
1404 |
+
`Serveur actuel: ${config.currentServer?.name || 'Aucun'}`
|
1405 |
+
];
|
1406 |
+
|
1407 |
+
const randomMsg = messages[Math.floor(Math.random() * messages.length)];
|
1408 |
+
speak(randomMsg);
|
1409 |
+
});
|
1410 |
+
|
1411 |
+
elements.serverSelectorBtn.addEventListener('click', toggleServerSelector);
|
1412 |
+
|
1413 |
+
elements.settingsBtn.addEventListener('click', () => {
|
1414 |
+
speak("Menu des paramètres du système AI");
|
1415 |
+
});
|
1416 |
+
|
1417 |
+
// Close server selector when clicking outside
|
1418 |
+
document.addEventListener('click', (e) => {
|
1419 |
+
if (!elements.serverSelector.contains(e.target) &&
|
1420 |
+
e.target !== elements.serverSelectorBtn) {
|
1421 |
+
elements.serverSelector.style.display = 'none';
|
1422 |
+
}
|
1423 |
+
});
|
1424 |
+
}
|
1425 |
+
|
1426 |
+
// Start the app
|
1427 |
+
init();
|
1428 |
+
});
|
1429 |
+
</script>
|
1430 |
+
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=docto41/autofim" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
1431 |
+
</html>
|
prompts.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
creer un tableaux de bord immense avec 978978574 films :Jeton d'accès en lecture à l'API eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJmYjQzN2IxMDcyN2E1YTRlYjhkOTEzNGUyOWM4MmFlMCIsIm5iZiI6MTY4MDYzNzkxMC44NjUsInN1YiI6IjY0MmM3ZmQ2OGI5NTllMDBmNDRkNzNhMCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.Nhl261Ha3z0Ujg5vM1PpFoZBiTGjlXQ1g9VFPh6dVvs Clé d'API fb437b10727a5a4eb8d9134e29c82ae0 , avec les plus puissant des lecteur de films avec intégration des liens url part système robotisé le plus sophistiqué avec PM4 .EMB .HD ECT... avec version Français interfaces tres futuriste et tres animéé je veux pas de site d'exemple , je veux pas de site etc...
|
2 |
+
afficher les 978978574 fim automatique
|
3 |
+
ajouté les server detecte url en automatique ,, je veux pas des url de d'exemple je veux pas des url de demonstration je veux les vrais url reel en automatique et afficher toutes les film en automatique
|
4 |
+
je veut les server autoplay robotisé en automatique avec les vrais et réél liens des film a regarder en autopilotage
|
5 |
+
ajouter 12 server sofistiqué robotiséé qui detect directement les liesn des films et demarre le lecteur automatique avec des servers version francais directement et d'autres version aussi
|