docto41 commited on
Commit
1db0f0a
·
verified ·
1 Parent(s): 79048fb

Add 2 files

Browse files
Files changed (2) hide show
  1. index.html +495 -48
  2. prompts.txt +4 -1
index.html CHANGED
@@ -3,7 +3,7 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>CineStream - Streaming Automatique</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
  <script>
@@ -15,6 +15,7 @@
15
  secondary: '#8b5cf6',
16
  dark: '#1e1b4b',
17
  light: '#f5f3ff',
 
18
  },
19
  fontFamily: {
20
  sans: ['Inter', 'sans-serif'],
@@ -203,6 +204,173 @@
203
  margin-left: 5px;
204
  opacity: 0.8;
205
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
  </style>
207
  </head>
208
  <body class="min-h-screen">
@@ -212,7 +380,7 @@
212
  <div class="flex items-center justify-between h-16">
213
  <div class="flex items-center">
214
  <div class="flex-shrink-0">
215
- <span class="text-2xl font-bold gradient-text">CineStream</span>
216
  </div>
217
  <div class="hidden md:block ml-10">
218
  <div class="flex space-x-4">
@@ -232,7 +400,11 @@
232
  <i class="fas fa-search"></i>
233
  </button>
234
  </div>
235
- <button class="p-1 rounded-full text-gray-400 hover:text-white focus:outline-none">
 
 
 
 
236
  <i class="fas fa-user-circle text-xl"></i>
237
  </button>
238
  </div>
@@ -249,6 +421,42 @@
249
  <!-- Main Content -->
250
  <main class="pt-24 pb-12">
251
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  <!-- Featured Section -->
253
  <section class="mb-12">
254
  <div class="flex justify-between items-center mb-6">
@@ -295,8 +503,8 @@
295
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
296
  <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
297
  <div>
298
- <h3 class="text-white text-lg font-semibold mb-4">CineStream</h3>
299
- <p class="text-sm">La meilleure plateforme pour regarder des films avec streaming automatique.</p>
300
  </div>
301
  <div>
302
  <h3 class="text-white text-lg font-semibold mb-4">Navigation</h3>
@@ -326,7 +534,7 @@
326
  </div>
327
  </div>
328
  <div class="border-t border-gray-800 mt-8 pt-8 text-sm text-center">
329
- <p>© 2023 CineStream. Tous droits réservés.</p>
330
  </div>
331
  </div>
332
  </footer>
@@ -354,6 +562,15 @@
354
  <p id="modal-overview" class="text-gray-300 mb-4"></p>
355
  <div id="modal-genres" class="flex flex-wrap gap-2 mb-4"></div>
356
 
 
 
 
 
 
 
 
 
 
357
  <!-- Serveurs de streaming -->
358
  <div class="mb-4">
359
  <h4 class="text-sm font-semibold text-gray-400 mb-2">CHOISIR UN SERVEUR :</h4>
@@ -376,6 +593,12 @@
376
  <button onclick="selectServer('autoembed')" class="server-btn inactive" data-server="autoembed">
377
  <i class="fas fa-robot mr-1"></i> AutoEmbed <span class="server-quality">Auto</span>
378
  </button>
 
 
 
 
 
 
379
  </div>
380
  </div>
381
 
@@ -384,7 +607,7 @@
384
  Fermer
385
  </button>
386
  <button id="watch-now-btn" onclick="startStreaming()" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-green-600 text-base font-medium text-white hover:bg-green-700 focus:outline-none sm:ml-3 sm:w-auto sm:text-sm">
387
- <i class="fas fa-play mr-2"></i> Lecture auto
388
  </button>
389
  </div>
390
  </div>
@@ -397,7 +620,13 @@
397
  <!-- Streaming Window (hidden by default) -->
398
  <div id="streaming-window" class="streaming-window hidden">
399
  <div class="streaming-header">
400
- <h3 id="streaming-title" class="text-xl font-bold text-white"></h3>
 
 
 
 
 
 
401
  <button onclick="closeStreamingWindow()" class="text-gray-400 hover:text-white">
402
  <i class="fas fa-times text-xl"></i>
403
  </button>
@@ -407,15 +636,21 @@
407
  <!-- Contenu du lecteur sera chargé ici -->
408
  <div id="stream-loading" class="stream-loading w-full h-full">
409
  <div class="stream-loading-spinner"></div>
410
- <p class="text-gray-300">Chargement du flux vidéo...</p>
411
  </div>
412
  </div>
413
  </div>
414
  <div class="streaming-controls">
415
- <div class="flex space-x-2">
416
- <button onclick="changeQuality('720p')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">720p</button>
417
- <button onclick="changeQuality('1080p')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">1080p</button>
418
- <button onclick="changeQuality('4k')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">4K</button>
 
 
 
 
 
 
419
  </div>
420
  <div>
421
  <button onclick="toggleFullscreen()" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">
@@ -430,7 +665,7 @@
430
  const API_KEY = 'c45a857c193f6302f2b5061c3b85e743'; // Clé API TMDB valide
431
  const BASE_URL = 'https://api.themoviedb.org/3';
432
 
433
- // Nouveaux serveurs de streaming avec URLs de base fonctionnelles
434
  const STREAMING_SERVERS = {
435
  superembed: {
436
  name: 'SuperEmbed',
@@ -438,7 +673,13 @@
438
  autoPlay: true,
439
  requiresTMDB: true,
440
  requiresIMDB: false,
441
- quality: 'HD'
 
 
 
 
 
 
442
  },
443
  vidsrc: {
444
  name: 'VidSrc',
@@ -446,7 +687,11 @@
446
  autoPlay: true,
447
  requiresTMDB: true,
448
  requiresIMDB: false,
449
- quality: 'Multi-Q'
 
 
 
 
450
  },
451
  '2embed': {
452
  name: '2Embed',
@@ -454,7 +699,11 @@
454
  autoPlay: true,
455
  requiresTMDB: false,
456
  requiresIMDB: true,
457
- quality: '1080p'
 
 
 
 
458
  },
459
  databasegdrive: {
460
  name: 'GDrive Player',
@@ -462,7 +711,11 @@
462
  autoPlay: true,
463
  requiresTMDB: true,
464
  requiresIMDB: false,
465
- quality: '4K'
 
 
 
 
466
  },
467
  multiembed: {
468
  name: 'MultiEmbed',
@@ -470,7 +723,11 @@
470
  autoPlay: true,
471
  requiresTMDB: true,
472
  requiresIMDB: false,
473
- quality: 'HD'
 
 
 
 
474
  },
475
  autoembed: {
476
  name: 'AutoEmbed',
@@ -478,7 +735,35 @@
478
  autoPlay: true,
479
  requiresTMDB: true,
480
  requiresIMDB: false,
481
- quality: 'Auto'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
482
  }
483
  };
484
 
@@ -491,6 +776,8 @@
491
  let currentMovieId = null;
492
  let currentIMDBId = null;
493
  let selectedServer = 'superembed';
 
 
494
 
495
  // Fonction utilitaire pour faire les requêtes API
496
  async function fetchAPI(endpoint, params = {}) {
@@ -499,7 +786,6 @@
499
  // Ajouter les paramètres par défaut
500
  const defaultParams = {
501
  language: 'fr-FR',
502
- page: currentPage,
503
  api_key: API_KEY
504
  };
505
 
@@ -537,8 +823,144 @@
537
  searchMovies();
538
  }
539
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
540
  });
541
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  // Charger les films
543
  async function loadMovies() {
544
  if (isLoading) return;
@@ -548,25 +970,24 @@
548
 
549
  try {
550
  let data;
 
 
 
 
551
 
552
  if (currentSearch) {
553
  data = await fetchAPI('/search/movie', {
554
- query: currentSearch,
555
- include_adult: false,
556
- page: currentPage
557
  });
558
  } else if (currentGenre) {
559
  data = await fetchAPI('/discover/movie', {
560
- include_adult: false,
561
- include_video: false,
562
- sort_by: 'popularity.desc',
563
  with_genres: currentGenre,
564
- page: currentPage
565
  });
566
  } else {
567
- data = await fetchAPI(`/movie/${currentFilter}`, {
568
- page: currentPage
569
- });
570
  }
571
 
572
  totalPages = data.total_pages || 1;
@@ -629,8 +1050,8 @@
629
  <span class="text-gray-400 text-sm ml-auto">${movie.release_date ? movie.release_date.substring(0, 4) : 'N/A'}</span>
630
  </div>
631
  <div class="mt-3">
632
- <button onclick="startAutoStreaming(${movie.id}, '${movie.title || 'Film'}')" class="w-full stream-btn px-3 py-2 bg-green-600 hover:bg-green-700 text-white rounded text-sm">
633
- <i class="fas fa-play-circle mr-1"></i> Lecture auto
634
  </button>
635
  <button onclick="showMovieDetails(${movie.id})" class="w-full mt-2 px-3 py-2 bg-gray-700 hover:bg-gray-600 text-white rounded text-sm">
636
  <i class="fas fa-info-circle mr-1"></i> Détails
@@ -640,6 +1061,9 @@
640
  <div class="auto-server-badge">
641
  <i class="fas fa-bolt mr-1"></i> AutoPlay
642
  </div>
 
 
 
643
  </div>
644
  `;
645
 
@@ -803,6 +1227,16 @@
803
  genresContainer.innerHTML = '<span class="text-gray-400 text-sm">Aucun genre spécifié</span>';
804
  }
805
 
 
 
 
 
 
 
 
 
 
 
806
  // Afficher la modal
807
  document.getElementById('movie-modal').classList.remove('hidden');
808
  } catch (error) {
@@ -819,17 +1253,18 @@
819
  // Sélectionner un serveur de streaming
820
  function selectServer(serverId) {
821
  selectedServer = serverId;
 
822
 
823
- // Mettre à jour l'état des boutons
824
- document.querySelectorAll('.server-btn').forEach(btn => {
825
- if (btn.dataset.server === serverId) {
826
- btn.classList.remove('inactive');
827
- btn.classList.add('active');
828
- } else {
829
- btn.classList.remove('active');
830
- btn.classList.add('inactive');
831
- }
832
- });
833
  }
834
 
835
  // Démarrer le streaming depuis la modal
@@ -854,7 +1289,7 @@
854
  playerContainer.innerHTML = `
855
  <div id="stream-loading" class="stream-loading w-full h-full">
856
  <div class="stream-loading-spinner"></div>
857
- <p class="text-gray-300">Chargement du flux vidéo...</p>
858
  </div>
859
  `;
860
 
@@ -877,6 +1312,9 @@
877
  <i class="fas fa-exclamation-triangle text-4xl mb-4"></i>
878
  <p class="text-lg">Impossible de trouver l'ID IMDB pour ce film</p>
879
  <p class="text-sm text-gray-400 mt-2">Essayez avec un autre serveur</p>
 
 
 
880
  </div>
881
  `;
882
  return;
@@ -896,9 +1334,15 @@
896
  streamingUrl = serverConfig.url + movieId;
897
  }
898
 
899
- // Ajouter le paramètre de lecture automatique si pris en charge
900
- if (serverConfig.autoPlay) {
901
- streamingUrl += '/auto';
 
 
 
 
 
 
902
  }
903
 
904
  // Créer l'iframe pour le lecteur vidéo
@@ -952,7 +1396,10 @@
952
  const nextIndex = (currentIndex + 1) % servers.length;
953
 
954
  selectedServer = servers[nextIndex];
 
955
  startAutoStreaming(currentMovieId, document.getElementById('streaming-title').textContent);
 
 
956
  }
957
 
958
  // Fermer la fenêtre de streaming
@@ -964,7 +1411,7 @@
964
 
965
  // Changer la qualité de streaming (simulé)
966
  function changeQuality(quality) {
967
- alert(`Qualité changée en ${quality}. Note: Ceci est une démonstration.`);
968
  // En réalité, vous devriez mettre à jour la source du lecteur vidéo
969
  }
970
 
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>CineStream AI - Streaming Automatique Intelligent</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
  <script>
 
15
  secondary: '#8b5cf6',
16
  dark: '#1e1b4b',
17
  light: '#f5f3ff',
18
+ ai: '#10b981'
19
  },
20
  fontFamily: {
21
  sans: ['Inter', 'sans-serif'],
 
204
  margin-left: 5px;
205
  opacity: 0.8;
206
  }
207
+
208
+ /* Styles pour l'IA */
209
+ .ai-badge {
210
+ position: absolute;
211
+ top: 10px;
212
+ left: 10px;
213
+ background-color: rgba(16, 185, 129, 0.9);
214
+ color: white;
215
+ padding: 4px 8px;
216
+ border-radius: 4px;
217
+ font-size: 12px;
218
+ font-weight: bold;
219
+ z-index: 10;
220
+ }
221
+
222
+ .ai-message {
223
+ background-color: rgba(16, 185, 129, 0.2);
224
+ border-left: 4px solid #10b981;
225
+ padding: 12px;
226
+ border-radius: 4px;
227
+ margin-bottom: 15px;
228
+ display: flex;
229
+ align-items: center;
230
+ gap: 10px;
231
+ }
232
+
233
+ .ai-thinking {
234
+ display: inline-block;
235
+ width: 12px;
236
+ height: 12px;
237
+ border-radius: 50%;
238
+ background-color: #10b981;
239
+ animation: pulse 1.5s infinite;
240
+ }
241
+
242
+ @keyframes pulse {
243
+ 0% { transform: scale(0.95); opacity: 0.7; }
244
+ 50% { transform: scale(1.1); opacity: 1; }
245
+ 100% { transform: scale(0.95); opacity: 0.7; }
246
+ }
247
+
248
+ .ai-optimizing {
249
+ display: flex;
250
+ align-items: center;
251
+ gap: 8px;
252
+ font-size: 14px;
253
+ color: #10b981;
254
+ }
255
+
256
+ .ai-control-panel {
257
+ background-color: rgba(16, 185, 129, 0.1);
258
+ border: 1px solid rgba(16, 185, 129, 0.3);
259
+ border-radius: 8px;
260
+ padding: 15px;
261
+ margin-top: 15px;
262
+ }
263
+
264
+ .ai-toggle {
265
+ position: relative;
266
+ display: inline-block;
267
+ width: 50px;
268
+ height: 24px;
269
+ }
270
+
271
+ .ai-toggle input {
272
+ opacity: 0;
273
+ width: 0;
274
+ height: 0;
275
+ }
276
+
277
+ .ai-slider {
278
+ position: absolute;
279
+ cursor: pointer;
280
+ top: 0;
281
+ left: 0;
282
+ right: 0;
283
+ bottom: 0;
284
+ background-color: #334155;
285
+ transition: .4s;
286
+ border-radius: 24px;
287
+ }
288
+
289
+ .ai-slider:before {
290
+ position: absolute;
291
+ content: "";
292
+ height: 16px;
293
+ width: 16px;
294
+ left: 4px;
295
+ bottom: 4px;
296
+ background-color: white;
297
+ transition: .4s;
298
+ border-radius: 50%;
299
+ }
300
+
301
+ input:checked + .ai-slider {
302
+ background-color: #10b981;
303
+ }
304
+
305
+ input:checked + .ai-slider:before {
306
+ transform: translateX(26px);
307
+ }
308
+
309
+ .ai-status {
310
+ display: inline-flex;
311
+ align-items: center;
312
+ gap: 6px;
313
+ font-size: 14px;
314
+ }
315
+
316
+ .ai-status-dot {
317
+ width: 8px;
318
+ height: 8px;
319
+ border-radius: 50%;
320
+ background-color: #10b981;
321
+ animation: pulse 1.5s infinite;
322
+ }
323
+
324
+ .ai-status.offline .ai-status-dot {
325
+ background-color: #ef4444;
326
+ animation: none;
327
+ }
328
+
329
+ .ai-server-analyzer {
330
+ display: flex;
331
+ flex-direction: column;
332
+ gap: 10px;
333
+ margin-top: 15px;
334
+ }
335
+
336
+ .ai-server-progress {
337
+ width: 100%;
338
+ background-color: #334155;
339
+ border-radius: 4px;
340
+ height: 6px;
341
+ overflow: hidden;
342
+ }
343
+
344
+ .ai-server-progress-bar {
345
+ height: 100%;
346
+ background-color: #10b981;
347
+ border-radius: 4px;
348
+ transition: width 0.3s ease;
349
+ }
350
+
351
+ .ai-server-info {
352
+ display: flex;
353
+ justify-content: space-between;
354
+ font-size: 12px;
355
+ color: #94a3b8;
356
+ }
357
+
358
+ .ai-server-name {
359
+ font-weight: 500;
360
+ color: white;
361
+ }
362
+
363
+ .ai-server-speed {
364
+ color: #10b981;
365
+ }
366
+
367
+ .ai-server-latency {
368
+ color: #f59e0b;
369
+ }
370
+
371
+ .ai-server-stability {
372
+ color: #8b5cf6;
373
+ }
374
  </style>
375
  </head>
376
  <body class="min-h-screen">
 
380
  <div class="flex items-center justify-between h-16">
381
  <div class="flex items-center">
382
  <div class="flex-shrink-0">
383
+ <span class="text-2xl font-bold gradient-text">CineStream <span class="text-ai">AI</span></span>
384
  </div>
385
  <div class="hidden md:block ml-10">
386
  <div class="flex space-x-4">
 
400
  <i class="fas fa-search"></i>
401
  </button>
402
  </div>
403
+ <div class="ai-status">
404
+ <span class="ai-status-dot"></span>
405
+ <span>IA Active</span>
406
+ </div>
407
+ <button class="p-1 rounded-full text-gray-400 hover:text-white focus:outline-none ml-4">
408
  <i class="fas fa-user-circle text-xl"></i>
409
  </button>
410
  </div>
 
421
  <!-- Main Content -->
422
  <main class="pt-24 pb-12">
423
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
424
+ <!-- AI Control Panel -->
425
+ <div class="ai-control-panel mb-8">
426
+ <div class="flex justify-between items-center">
427
+ <div>
428
+ <h3 class="text-lg font-semibold text-white flex items-center gap-2">
429
+ <i class="fas fa-robot text-ai"></i>
430
+ <span>Contrôle de l'IA AutoPilot</span>
431
+ </h3>
432
+ <p class="text-sm text-gray-400 mt-1">L'IA optimise automatiquement votre expérience de streaming</p>
433
+ </div>
434
+ <label class="flex items-center gap-2 cursor-pointer">
435
+ <span class="text-sm text-gray-300">Mode AutoPilot</span>
436
+ <div class="ai-toggle">
437
+ <input type="checkbox" id="ai-toggle" checked>
438
+ <span class="ai-slider"></span>
439
+ </div>
440
+ </label>
441
+ </div>
442
+
443
+ <div class="ai-server-analyzer">
444
+ <div class="ai-optimizing">
445
+ <div class="ai-thinking"></div>
446
+ <span>Analyse des serveurs en temps réel...</span>
447
+ </div>
448
+ <div class="ai-server-info">
449
+ <span class="ai-server-name">SuperEmbed</span>
450
+ <span class="ai-server-speed">Vitesse: 24 Mbps</span>
451
+ <span class="ai-server-latency">Latence: 78ms</span>
452
+ <span class="ai-server-stability">Stabilité: 98%</span>
453
+ </div>
454
+ <div class="ai-server-progress">
455
+ <div class="ai-server-progress-bar" style="width: 92%"></div>
456
+ </div>
457
+ </div>
458
+ </div>
459
+
460
  <!-- Featured Section -->
461
  <section class="mb-12">
462
  <div class="flex justify-between items-center mb-6">
 
503
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
504
  <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
505
  <div>
506
+ <h3 class="text-white text-lg font-semibold mb-4">CineStream AI</h3>
507
+ <p class="text-sm">La plateforme de streaming intelligente qui optimise automatiquement votre expérience.</p>
508
  </div>
509
  <div>
510
  <h3 class="text-white text-lg font-semibold mb-4">Navigation</h3>
 
534
  </div>
535
  </div>
536
  <div class="border-t border-gray-800 mt-8 pt-8 text-sm text-center">
537
+ <p>© 2023 CineStream AI. Tous droits réservés.</p>
538
  </div>
539
  </div>
540
  </footer>
 
562
  <p id="modal-overview" class="text-gray-300 mb-4"></p>
563
  <div id="modal-genres" class="flex flex-wrap gap-2 mb-4"></div>
564
 
565
+ <!-- AI Recommendation -->
566
+ <div class="ai-message">
567
+ <i class="fas fa-robot text-ai"></i>
568
+ <div>
569
+ <p class="font-medium">Recommandation de l'IA</p>
570
+ <p id="ai-recommendation" class="text-sm">Analyse en cours pour optimiser votre streaming...</p>
571
+ </div>
572
+ </div>
573
+
574
  <!-- Serveurs de streaming -->
575
  <div class="mb-4">
576
  <h4 class="text-sm font-semibold text-gray-400 mb-2">CHOISIR UN SERVEUR :</h4>
 
593
  <button onclick="selectServer('autoembed')" class="server-btn inactive" data-server="autoembed">
594
  <i class="fas fa-robot mr-1"></i> AutoEmbed <span class="server-quality">Auto</span>
595
  </button>
596
+ <button onclick="selectServer('vidsrcme')" class="server-btn inactive" data-server="vidsrcme">
597
+ <i class="fas fa-play mr-1"></i> VidSrc.me <span class="server-quality">HD</span>
598
+ </button>
599
+ <button onclick="selectServer('movapi')" class="server-btn inactive" data-server="movapi">
600
+ <i class="fas fa-film mr-1"></i> MovAPI <span class="server-quality">Multi-Q</span>
601
+ </button>
602
  </div>
603
  </div>
604
 
 
607
  Fermer
608
  </button>
609
  <button id="watch-now-btn" onclick="startStreaming()" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-green-600 text-base font-medium text-white hover:bg-green-700 focus:outline-none sm:ml-3 sm:w-auto sm:text-sm">
610
+ <i class="fas fa-play mr-2"></i> Lecture auto (IA)
611
  </button>
612
  </div>
613
  </div>
 
620
  <!-- Streaming Window (hidden by default) -->
621
  <div id="streaming-window" class="streaming-window hidden">
622
  <div class="streaming-header">
623
+ <div class="flex items-center gap-4">
624
+ <h3 id="streaming-title" class="text-xl font-bold text-white"></h3>
625
+ <div class="ai-status">
626
+ <span class="ai-status-dot"></span>
627
+ <span class="text-sm">IA Optimisation</span>
628
+ </div>
629
+ </div>
630
  <button onclick="closeStreamingWindow()" class="text-gray-400 hover:text-white">
631
  <i class="fas fa-times text-xl"></i>
632
  </button>
 
636
  <!-- Contenu du lecteur sera chargé ici -->
637
  <div id="stream-loading" class="stream-loading w-full h-full">
638
  <div class="stream-loading-spinner"></div>
639
+ <p class="text-gray-300">L'IA optimise votre streaming...</p>
640
  </div>
641
  </div>
642
  </div>
643
  <div class="streaming-controls">
644
+ <div class="flex items-center gap-4">
645
+ <div class="ai-optimizing">
646
+ <div class="ai-thinking"></div>
647
+ <span class="text-sm">Analyse des performances en temps réel</span>
648
+ </div>
649
+ <div class="flex space-x-2">
650
+ <button onclick="changeQuality('720p')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">720p</button>
651
+ <button onclick="changeQuality('1080p')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">1080p</button>
652
+ <button onclick="changeQuality('4k')" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">4K</button>
653
+ </div>
654
  </div>
655
  <div>
656
  <button onclick="toggleFullscreen()" class="stream-btn px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded-full text-sm">
 
665
  const API_KEY = 'c45a857c193f6302f2b5061c3b85e743'; // Clé API TMDB valide
666
  const BASE_URL = 'https://api.themoviedb.org/3';
667
 
668
+ // Serveurs de streaming avec URLs de base fonctionnelles et paramètres de lecture
669
  const STREAMING_SERVERS = {
670
  superembed: {
671
  name: 'SuperEmbed',
 
673
  autoPlay: true,
674
  requiresTMDB: true,
675
  requiresIMDB: false,
676
+ quality: 'HD',
677
+ params: {
678
+ tmdb: 'tmdb=',
679
+ imdb: 'imdb=',
680
+ auto: '&autoplay=1'
681
+ },
682
+ aiScore: 0 // Score initialisé par l'IA
683
  },
684
  vidsrc: {
685
  name: 'VidSrc',
 
687
  autoPlay: true,
688
  requiresTMDB: true,
689
  requiresIMDB: false,
690
+ quality: 'Multi-Q',
691
+ params: {
692
+ auto: '?autoplay=1'
693
+ },
694
+ aiScore: 0
695
  },
696
  '2embed': {
697
  name: '2Embed',
 
699
  autoPlay: true,
700
  requiresTMDB: false,
701
  requiresIMDB: true,
702
+ quality: '1080p',
703
+ params: {
704
+ auto: '?autoplay=true'
705
+ },
706
+ aiScore: 0
707
  },
708
  databasegdrive: {
709
  name: 'GDrive Player',
 
711
  autoPlay: true,
712
  requiresTMDB: true,
713
  requiresIMDB: false,
714
+ quality: '4K',
715
+ params: {
716
+ auto: '&autoplay=1'
717
+ },
718
+ aiScore: 0
719
  },
720
  multiembed: {
721
  name: 'MultiEmbed',
 
723
  autoPlay: true,
724
  requiresTMDB: true,
725
  requiresIMDB: false,
726
+ quality: 'HD',
727
+ params: {
728
+ auto: '&autoplay=1'
729
+ },
730
+ aiScore: 0
731
  },
732
  autoembed: {
733
  name: 'AutoEmbed',
 
735
  autoPlay: true,
736
  requiresTMDB: true,
737
  requiresIMDB: false,
738
+ quality: 'Auto',
739
+ params: {
740
+ auto: '?autoplay=1'
741
+ },
742
+ aiScore: 0
743
+ },
744
+ vidsrcme: {
745
+ name: 'VidSrc.me',
746
+ url: 'https://vidsrc.me/embed/',
747
+ autoPlay: true,
748
+ requiresTMDB: true,
749
+ requiresIMDB: false,
750
+ quality: 'HD',
751
+ params: {
752
+ auto: '?autoplay=1'
753
+ },
754
+ aiScore: 0
755
+ },
756
+ movapi: {
757
+ name: 'MovAPI',
758
+ url: 'https://movapi.vercel.app/movie/',
759
+ autoPlay: true,
760
+ requiresTMDB: true,
761
+ requiresIMDB: false,
762
+ quality: 'Multi-Q',
763
+ params: {
764
+ auto: '?autoplay=1'
765
+ },
766
+ aiScore: 0
767
  }
768
  };
769
 
 
776
  let currentMovieId = null;
777
  let currentIMDBId = null;
778
  let selectedServer = 'superembed';
779
+ let isAutoPilotEnabled = true;
780
+ let aiInterval = null;
781
 
782
  // Fonction utilitaire pour faire les requêtes API
783
  async function fetchAPI(endpoint, params = {}) {
 
786
  // Ajouter les paramètres par défaut
787
  const defaultParams = {
788
  language: 'fr-FR',
 
789
  api_key: API_KEY
790
  };
791
 
 
823
  searchMovies();
824
  }
825
  });
826
+
827
+ // Gérer le toggle de l'IA
828
+ document.getElementById('ai-toggle').addEventListener('change', function(e) {
829
+ isAutoPilotEnabled = e.target.checked;
830
+ if (isAutoPilotEnabled) {
831
+ document.querySelector('.ai-status').classList.remove('offline');
832
+ document.querySelector('.ai-status-dot').style.backgroundColor = '#10b981';
833
+ document.querySelector('.ai-status-dot').style.animation = 'pulse 1.5s infinite';
834
+ showAIMessage("Mode AutoPilot activé - L'IA optimise votre streaming");
835
+ } else {
836
+ document.querySelector('.ai-status').classList.add('offline');
837
+ document.querySelector('.ai-status-dot').style.backgroundColor = '#ef4444';
838
+ document.querySelector('.ai-status-dot').style.animation = 'none';
839
+ showAIMessage("Mode AutoPilot désactivé - Contrôle manuel");
840
+ }
841
+ });
842
+
843
+ // Simuler l'analyse des serveurs par l'IA
844
+ simulateAIAnalysis();
845
  });
846
 
847
+ // Simuler l'analyse des serveurs par l'IA
848
+ function simulateAIAnalysis() {
849
+ if (aiInterval) clearInterval(aiInterval);
850
+
851
+ aiInterval = setInterval(() => {
852
+ // Mettre à jour les scores des serveurs de manière aléatoire (simulation)
853
+ Object.keys(STREAMING_SERVERS).forEach(serverId => {
854
+ // Score basé sur la vitesse, la latence et la stabilité simulées
855
+ const speed = Math.floor(Math.random() * 30) + 5; // 5-35 Mbps
856
+ const latency = Math.floor(Math.random() * 150) + 50; // 50-200ms
857
+ const stability = Math.floor(Math.random() * 20) + 80; // 80-100%
858
+
859
+ // Calcul du score (plus le score est élevé, meilleur est le serveur)
860
+ STREAMING_SERVERS[serverId].aiScore = Math.round(
861
+ (speed / 5) + // Poids pour la vitesse
862
+ ((200 - latency) / 2) + // Poids pour la latence (plus c'est bas, mieux c'est)
863
+ (stability / 1) // Poids pour la stabilité
864
+ );
865
+
866
+ // Mettre à jour l'affichage si le serveur est sélectionné
867
+ if (selectedServer === serverId) {
868
+ updateServerPerformanceUI(speed, latency, stability);
869
+ }
870
+ });
871
+
872
+ // Si AutoPilot est activé, sélectionner automatiquement le meilleur serveur
873
+ if (isAutoPilotEnabled && currentMovieId) {
874
+ selectBestServer();
875
+ }
876
+
877
+ }, 3000); // Mettre à jour toutes les 3 secondes
878
+ }
879
+
880
+ // Mettre à jour l'UI des performances du serveur
881
+ function updateServerPerformanceUI(speed, latency, stability) {
882
+ const serverInfo = document.querySelector('.ai-server-info');
883
+ if (serverInfo) {
884
+ serverInfo.innerHTML = `
885
+ <span class="ai-server-name">${STREAMING_SERVERS[selectedServer].name}</span>
886
+ <span class="ai-server-speed">Vitesse: ${speed} Mbps</span>
887
+ <span class="ai-server-latency">Latence: ${latency}ms</span>
888
+ <span class="ai-server-stability">Stabilité: ${stability}%</span>
889
+ `;
890
+
891
+ const progressBar = document.querySelector('.ai-server-progress-bar');
892
+ if (progressBar) {
893
+ const progress = Math.min(100, (speed / 35) * 100); // Normalisé sur 35 Mbps max
894
+ progressBar.style.width = `${progress}%`;
895
+ }
896
+ }
897
+ }
898
+
899
+ // Sélectionner le meilleur serveur selon l'IA
900
+ function selectBestServer() {
901
+ let bestServer = null;
902
+ let highestScore = -1;
903
+
904
+ // Trouver le serveur avec le score le plus élevé
905
+ Object.keys(STREAMING_SERVERS).forEach(serverId => {
906
+ if (STREAMING_SERVERS[serverId].aiScore > highestScore) {
907
+ highestScore = STREAMING_SERVERS[serverId].aiScore;
908
+ bestServer = serverId;
909
+ }
910
+ });
911
+
912
+ // Si un meilleur serveur est trouvé et différent du serveur actuel
913
+ if (bestServer && bestServer !== selectedServer) {
914
+ selectedServer = bestServer;
915
+ updateSelectedServerUI();
916
+
917
+ // Si en train de streamer, redémarrer avec le nouveau serveur
918
+ if (document.getElementById('streaming-window').classList.contains('hidden') === false) {
919
+ startAutoStreaming(currentMovieId, document.getElementById('streaming-title').textContent);
920
+ showAIMessage(`L'IA a optimisé votre streaming - Serveur basculé vers ${STREAMING_SERVERS[bestServer].name}`);
921
+ }
922
+ }
923
+ }
924
+
925
+ // Mettre à jour l'UI du serveur sélectionné
926
+ function updateSelectedServerUI() {
927
+ document.querySelectorAll('.server-btn').forEach(btn => {
928
+ if (btn.dataset.server === selectedServer) {
929
+ btn.classList.remove('inactive');
930
+ btn.classList.add('active');
931
+ } else {
932
+ btn.classList.remove('active');
933
+ btn.classList.add('inactive');
934
+ }
935
+ });
936
+
937
+ // Mettre à jour la recommandation dans la modal
938
+ if (document.getElementById('ai-recommendation')) {
939
+ document.getElementById('ai-recommendation').textContent =
940
+ `Serveur recommandé: ${STREAMING_SERVERS[selectedServer].name} (Score IA: ${STREAMING_SERVERS[selectedServer].aiScore})`;
941
+ }
942
+ }
943
+
944
+ // Afficher un message de l'IA
945
+ function showAIMessage(message) {
946
+ // Dans la fenêtre de streaming
947
+ const streamingWindow = document.getElementById('streaming-window');
948
+ if (!streamingWindow.classList.contains('hidden')) {
949
+ const aiMessage = document.createElement('div');
950
+ aiMessage.className = 'ai-message absolute top-4 left-1/2 transform -translate-x-1/2 z-50';
951
+ aiMessage.innerHTML = `
952
+ <i class="fas fa-robot text-ai"></i>
953
+ <span>${message}</span>
954
+ `;
955
+ streamingWindow.querySelector('.streaming-content').appendChild(aiMessage);
956
+
957
+ // Supprimer après 3 secondes
958
+ setTimeout(() => {
959
+ aiMessage.remove();
960
+ }, 3000);
961
+ }
962
+ }
963
+
964
  // Charger les films
965
  async function loadMovies() {
966
  if (isLoading) return;
 
970
 
971
  try {
972
  let data;
973
+ const params = {
974
+ page: currentPage,
975
+ include_adult: false
976
+ };
977
 
978
  if (currentSearch) {
979
  data = await fetchAPI('/search/movie', {
980
+ ...params,
981
+ query: encodeURIComponent(currentSearch)
 
982
  });
983
  } else if (currentGenre) {
984
  data = await fetchAPI('/discover/movie', {
985
+ ...params,
 
 
986
  with_genres: currentGenre,
987
+ sort_by: 'popularity.desc'
988
  });
989
  } else {
990
+ data = await fetchAPI(`/movie/${currentFilter}`, params);
 
 
991
  }
992
 
993
  totalPages = data.total_pages || 1;
 
1050
  <span class="text-gray-400 text-sm ml-auto">${movie.release_date ? movie.release_date.substring(0, 4) : 'N/A'}</span>
1051
  </div>
1052
  <div class="mt-3">
1053
+ <button onclick="startAutoStreaming(${movie.id}, '${movie.title ? movie.title.replace(/'/g, "\\'") : 'Film'}')" class="w-full stream-btn px-3 py-2 bg-green-600 hover:bg-green-700 text-white rounded text-sm">
1054
+ <i class="fas fa-robot mr-1"></i> Lecture IA
1055
  </button>
1056
  <button onclick="showMovieDetails(${movie.id})" class="w-full mt-2 px-3 py-2 bg-gray-700 hover:bg-gray-600 text-white rounded text-sm">
1057
  <i class="fas fa-info-circle mr-1"></i> Détails
 
1061
  <div class="auto-server-badge">
1062
  <i class="fas fa-bolt mr-1"></i> AutoPlay
1063
  </div>
1064
+ <div class="ai-badge">
1065
+ <i class="fas fa-brain mr-1"></i> IA Optimisé
1066
+ </div>
1067
  </div>
1068
  `;
1069
 
 
1227
  genresContainer.innerHTML = '<span class="text-gray-400 text-sm">Aucun genre spécifié</span>';
1228
  }
1229
 
1230
+ // Mettre à jour la recommandation de l'IA
1231
+ if (isAutoPilotEnabled) {
1232
+ selectBestServer();
1233
+ document.getElementById('ai-recommendation').textContent =
1234
+ `Serveur recommandé: ${STREAMING_SERVERS[selectedServer].name} (Score IA: ${STREAMING_SERVERS[selectedServer].aiScore})`;
1235
+ } else {
1236
+ document.getElementById('ai-recommendation').textContent =
1237
+ "Mode AutoPilot désactivé - Sélectionnez manuellement un serveur";
1238
+ }
1239
+
1240
  // Afficher la modal
1241
  document.getElementById('movie-modal').classList.remove('hidden');
1242
  } catch (error) {
 
1253
  // Sélectionner un serveur de streaming
1254
  function selectServer(serverId) {
1255
  selectedServer = serverId;
1256
+ updateSelectedServerUI();
1257
 
1258
+ // Si AutoPilot est activé, le désactiver temporairement pour la sélection manuelle
1259
+ if (isAutoPilotEnabled) {
1260
+ document.getElementById('ai-toggle').checked = false;
1261
+ isAutoPilotEnabled = false;
1262
+ document.querySelector('.ai-status').classList.add('offline');
1263
+ document.querySelector('.ai-status-dot').style.backgroundColor = '#ef4444';
1264
+ document.querySelector('.ai-status-dot').style.animation = 'none';
1265
+ document.getElementById('ai-recommendation').textContent =
1266
+ "Mode AutoPilot désactivé - Contrôle manuel activé";
1267
+ }
1268
  }
1269
 
1270
  // Démarrer le streaming depuis la modal
 
1289
  playerContainer.innerHTML = `
1290
  <div id="stream-loading" class="stream-loading w-full h-full">
1291
  <div class="stream-loading-spinner"></div>
1292
+ <p class="text-gray-300">${isAutoPilotEnabled ? "L'IA optimise votre streaming..." : "Chargement du flux vidéo..."}</p>
1293
  </div>
1294
  `;
1295
 
 
1312
  <i class="fas fa-exclamation-triangle text-4xl mb-4"></i>
1313
  <p class="text-lg">Impossible de trouver l'ID IMDB pour ce film</p>
1314
  <p class="text-sm text-gray-400 mt-2">Essayez avec un autre serveur</p>
1315
+ <button onclick="tryAlternativeServer()" class="mt-4 px-4 py-2 bg-primary text-white rounded hover:bg-secondary transition">
1316
+ <i class="fas fa-sync-alt mr-2"></i> Essayer un autre serveur
1317
+ </button>
1318
  </div>
1319
  `;
1320
  return;
 
1334
  streamingUrl = serverConfig.url + movieId;
1335
  }
1336
 
1337
+ // Ajouter les paramètres de lecture automatique si configuré
1338
+ if (serverConfig.autoPlay && serverConfig.params) {
1339
+ if (serverConfig.params.auto) {
1340
+ if (streamingUrl.includes('?')) {
1341
+ streamingUrl += serverConfig.params.auto.replace('?', '&');
1342
+ } else {
1343
+ streamingUrl += serverConfig.params.auto;
1344
+ }
1345
+ }
1346
  }
1347
 
1348
  // Créer l'iframe pour le lecteur vidéo
 
1396
  const nextIndex = (currentIndex + 1) % servers.length;
1397
 
1398
  selectedServer = servers[nextIndex];
1399
+ updateSelectedServerUI();
1400
  startAutoStreaming(currentMovieId, document.getElementById('streaming-title').textContent);
1401
+
1402
+ showAIMessage(`Serveur basculé vers ${STREAMING_SERVERS[selectedServer].name} (Automatique)`);
1403
  }
1404
 
1405
  // Fermer la fenêtre de streaming
 
1411
 
1412
  // Changer la qualité de streaming (simulé)
1413
  function changeQuality(quality) {
1414
+ showAIMessage(`Qualité changée en ${quality} - Optimisation en cours...`);
1415
  // En réalité, vous devriez mettre à jour la source du lecteur vidéo
1416
  }
1417
 
prompts.txt CHANGED
@@ -1,2 +1,5 @@
1
  activer la lecture des films dans une nouvelle page en mode pilotage automatique
2
- AJOUTER DES SEVEURS AUTOMATIQUE POUR RAGARDER LES FILMS
 
 
 
 
1
  activer la lecture des films dans une nouvelle page en mode pilotage automatique
2
+ AJOUTER DES SEVEURS AUTOMATIQUE POUR RAGARDER LES FILMS
3
+ corriger les erreurs : Error: one of parameters is in wrong format
4
+ corriger le probleme de parametre de lecture et ajouter plussieur serveur de lecture
5
+ INTEGRER UN SYSTEME IA INTEGRE AUTOPILOTE POUR GERE TOUTE EN MODE AUTOMATIQUE