1  �
   2  
   3  (��jO���SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
   4  r
   5  SSKJr Sr\RRS5(aSO4\RR\RR!\5S5rSrSrS	rS
   6  rSrSr/S
   7  Qr/SQrSrSSjrSSjrSrSrSSjr S Sjr!Sr"S!Sjr#Sr$S"Sjr%Sr&S#Sjr'Sr(g)$a(
   8  NeuralOS Cinema Engine (Zero-Indexing, Zero-Preload Edition)
   9  Provides 100% ephemeral on-demand Tor-federated search (Cinemeta + Torrentio + YTS),
  10  dynamic recommendations, and 1TB HDD background download manager.
  11  Zero database indexing, zero preloading - pure browser-native on-demand streaming.
  12  �N)�datetimez127.0.0.1:9050z/mnt/hdd1/MOvies�	downloadszhttp://127.0.0.1:8090zBhttps://v3-cinemeta.strem.io/catalog/movie/top/search={query}.jsonzChttps://v3-cinemeta.strem.io/catalog/series/top/search={query}.jsonz7https://v3-cinemeta.strem.io/meta/{type}/{imdb_id}.jsonz7https://torrentio.strem.fun/stream/movie/{imdb_id}.jsonz<https://torrentio.strem.fun/stream/series/{imdb_id}:1:1.json)z3https://movies-api.accel.li/api/v2/list_movies.jsonz&https://yts.lt/api/v2/list_movies.jsonz&https://yts.mx/api/v2/list_movies.json)z*udp://tracker.opentrackr.org:1337/announcez$udp://open.demonii.com:1337/announcez#udp://tracker.openbittorrent.com:80z"udp://tracker.coppersurfer.tk:6969z"udp://glotorrents.pw:6969/announcez&udp://torrent.gresille.org:80/announcezudp://p4p.arenabg.com:1337c�f�US:�a	US-SS3$US:�a	US-SS3$US:�a	US-SS3$US	3$)
  13  Ni@z.2fz GBiz.1fz MBiz KBz B�)�szs �-/Users/shubhamsharma/project/cinema_engine.py�format_bytesr	/sc��	�
  14  ����'��,�C�0�0�	�{�	��	�"�3�'�s�+�+�	�t���t�)�C���$�$��T��9��c
  15  � �SS[SSS[U5SSU/
  16  n[R"U[R[RSUS	-S
  17  9nUR
  18  S:XaUR(aUR$g![a gf=f)
  19  z<Executes a GET request through Tor SOCKS5h proxy using curl.�curlz--socks5-hostname�-s�-L�
  20  --max-time�-AzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36T���stdout�stderr�text�timeoutrN)�	TOR_SOCKS�str�
  21  subprocess�run�PIPE�
  22  returncoder�	Exception��urlr�cmd�ress    r�	tor_fetchr"8s���	��Y����c�'�l�����C�
  23  ��n�n�S�������W[�el�op�ep�q���>�>�Q��3�:�:��:�:�����
  24  ���
  25  �s�A#B�
  26  B
  27  �B
  28  c��SSSS[U5SSU/n[R"U[R[RSUS-S	9nURS
  29  :XaUR
  30  (aUR
  31  $g![a gf=f)z7Fetches non-censored metadata directly (e.g. Cinemeta).rr
  32  rrrzMozilla/5.0TrrrN)rrrrrrrrs    r�direct_fetchr$Ks���	����c�'�l��m��
  33  �C�
  34  ��n�n�S�������W[�el�op�ep�q���>�>�Q��3�:�:��:�:�����
  35  ���
  36  �s�A#A:�:
  37  B�Bc	���SR[Vs/sH%nS[RR	U53PM' sn5n[RR	U5nSUSUSU3$s snf)N�&ztr=zmagnet:?xt=urn:btih:z&dn=)�join�TRACKERS�urllib�parse�quote)�	info_hash�display_name�t�	tr_params�dns     r�build_magnetr1]si������J��A�C���� 2� 2�1� 5�6�7��J�K�I�	���	�	�L�	)�B�
  38  !�)��D���A�i�[�A�A��Ks�,A1c
  39  �B�[RRU5nS[4S[44GH�up#URUS9n[
  40  U5=(d [U5nU(dM;[R"U5nURS/5nU(GaKUSnURS5n	Un
  41  [RX)S9n[
  42  U5=(d [U5nU(a'[R"U5RSU5n
  43  U
  44  RS	5=(d U
  45  RS
  46  5n
  47  U
  48  (a[[U
  49  5SS5OSnU
  50  RS
  51  5nU(aSU;aURSS5nU	UU
  52  RS5UUU
  53  RS5U
  54  RS5U
  55  RS/5U
  56  RSS5S.	s $GM� g![a N�f=f![a SnN�f=f![a GM�f=f)zZResolves fuzzy movie or series title to exact IMDb ID, official poster, and full metadata.�movie�series)�query�metasr�id)�type�imdb_id�meta�releaseInfo�yearN��posterz/small/z/medium/�name�
  57  background�
  58  imdbRating�genres�description�)	r9r8�titler<�
  59  poster_url�background_url�ratingrBrC)r)r*r+�CINEMETA_MOVIE_SEARCH�CINEMETA_SERIES_SEARCH�formatr$r"�json�loads�get�CINEMETA_META_URLr�intr�replace)r5�enc_q�cat�url_pattern�target�payload�datar6�mr9�full_m�meta_url�meta_payload�year_val�year_intr>s                r�resolve_cinemetar^bs����L�L���u�%�E�%�'<�=��J`�?a�b����#�#�%�#�0���v�&�;�)�F�*;����'	��:�:�g�&�D��H�H�W�b�)�E���!�H���%�%��+����,�3�3��3�N��+�H�5�L��8�9L����!%���L�!9�!=�!=�f�a�!H��"�:�:�m�4�J��
  60  �
  61  �6�8J��$�9A�s�3�x�=��!�#4�5�t�H� ���H�-���i�6�1�#�^�^�I�z�B�F� '��#�Z�Z��/�$�"(�&,�j�j��&>�$�j�j��6�$�j�j��2�6�#)�:�:�m�R�#@�
  62  �
  63  �1�c�Z��5%�����!�$�#�H�$��$�	��	�s\�,A?H�,&G-�)H�< G=�BH�-
  64  G:�7H�9G:�:H�=H�	H�H�H�
  65  H�Hc�4�/nU(a[RUS9O[RUS9n[USS9nU(dU$[R
  66  "U5n	U	R
  67  S/5n
  68  U
  69  SUGH�nUR
  70  SS5R5nU(dM-UR
  71  SS5n
  72  UR
  73  S	S5nU
  74  S
  75  -U-R5nSU;dSU;aSnOS
  76  U;aS
  77  nOSU;aSnOSnSnSn[R"SU5nU(a[URS55n[R"SU[R5nU(aURS5nSn[R"SU5nU(aURS5R5nU(aUSUSUS3OUSUS3n[UU5nURUUU(aSOSUUUSUSUUUUS.
  78  5 GM� U$![ a U$f=f)z@Fetches high-quality streams from Torrentio aggregator over Tor.)r9��r�streamsN�infoHashrDr?rE� �4k�2160p�1080p�720p�HDRip�
  79  �Torrentu👤\s*(\d+)�u💾\s*([\d\.]+\s*(?:GB|MB))�	torrentiou⚙️\s*([a-zA-Z0-9_-]+)� (�) [�]z [r4r3r�
  80  r,rE�categoryr<�quality�size_str�
  81  size_bytes�seeders�leechers�
  82  magnet_uri�sourcer9rF)�TORRENTIO_SERIES_STREAMrK�TORRENTIO_MOVIE_STREAMr"rLrMrN�upper�lower�re�searchrP�group�
  83  IGNORECASEr1�appendr)r9rEr<rF�	is_series�limit�resultsrUrVrWrb�sr,�	name_line�
  84  title_line�comb�qual�seedsrt�seeds_match�
  85  size_matchry�	src_match�	full_name�mags                         r�search_torrentior��s ���G�@I�
  86  $�
  87  +�
  88  +�G�
  89  +�
  90  <�Oe�Ol�Ol�u|�Ol�O}�F����+�G����6
  91  ��z�z�'�"���(�(�9�b�)����%��A����j�"�-�3�3�5�I������f�b�)�I����w��+�J���O�j�0�7�7�9�D��t�|�w�$�����D�����4�������E� �H��)�)�O�Z�@�K���K�-�-�a�0�1�����#B�J�PR�P]�P]�^�J��%�+�+�A�.�� �F��	�	�">�
  92  �K�I��"����+�1�1�3��8<�5�'��D�6��T�F�!�4�U�G�2�d�V�ST�BU�I��y�)�4�C��N�N�&��(1�H�w���$�� ��!� �"�(��
  93  �G!�h�N���
  94  ���N�
  95  �s�GH	�	
  96  H�Hc�
  97  �/n[RRU5n[GH�nUSUSU3n[	USS9nU(dM![
  98  R"U5nURS5S:XGavURS05RS5(GaLUSSGH2nURS	5n	URS
  99  5n
 100  URS5nURS5=(d URS
 101  5nURS/5H�n
 102  U
 103  RSS5R5nU(dM,U
 104  RSS5nU
 105  RSS5nU
 106  RSS5nU
 107  RSS5nU
 108  RSS5nU	SU
 109  SUS3n[UU5nURUU	SU
 110  UUUUUUSUUS.
 111  5 M� GM5 U(a U$GM�GM�GM� U$![a GM�f=f)z:Fetches fast-buffering releases from YTS mirrors over Tor.z?query_term=z#&sort_by=seeds&order_by=desc&limit=rjra�status�okrW�moviesrEr<�	imdb_code�large_cover_image�medium_cover_image�torrents�hashrDrsrg�sizerurr��peersrnrorpr3�ytsrq)r)r*r+�YTS_API_ENDPOINTSr"rLrMrNr|r1r�r)r5r�r�rR�base_url�
 112  target_urlrVrWrXrEr<r9r>r.r,rsrtrur�r�r�r�s                      r�search_movies_ytsr��s���G��L�L���u�%�E�%�%�� �z��e�W�4W�X]�W^�_�
 113  ��J��3����&	��:�:�g�&�D��x�x��!�T�)�d�h�h�v�r�.B�.F�.F�x�.P�.P��f��h�/�A��E�E�'�N�E��5�5��=�D��e�e�K�0�G��U�U�#6�7�V�1�5�5�AU�;V�F��U�U�:�r�2��$%�E�E�&�"�$5�$;�$;�$=�	�(�$�"#�%�%�	�7�";��#$�5�5���#4��%&�U�U�<��%;�
 114  � !���g�q� 1�� !���g�q� 1��',�g�R��v�S��	��$C�	�*�9�i�@�����)2�%*�(/�$(�'.�(0�*4�',�(-�*-�&+�'.�*0�(��3�0�@���N�	�C/Q�)�&�X�N���	��	�s�
 115  FG3�3
 116  H�Hc�z�////S.nUH�nURSS5nUS:XdSUR5;aUSRU5 MEUS:XaUSRU5 MaUS:XaUSRU5 M}USRU5 M� UHnXRSS	S
 117  9 M U$)N)rfrgrh�otherrsrgrfrerhr�c�&�URSS5$)Nrvr)rN)�xs r�<lambda>�*group_streams_by_quality.<locals>.<lambda>s��Q�U�U�9�a�%8r
 118  T)�key�reverse)rNr}r��sort)rb�groupsr��q�ks     r�group_streams_by_qualityr�s����B��R�
 119  @�F�
 120  ��
 121  �E�E�)�W�%����<�4�1�7�7�9�,��7�O�"�"�1�%�
 122  �'�\��7�O�"�"�1�%�
 123  �&�[��6�N�!�!�!�$��7�O�"�"�1�%�����	���8�$��G���Mr
 124  c	�r�UR5n[U5n/nU(a~URS5(ahUSnUSnUSnUSnURS5S:Hn	[XVXxU	SS9n
 125  UR	U
 126  5 U	(d[US	S
 127  9nUR	U5 OD[US	S
 128  9nUR	U5 U(a"U(dUSnUSUSUSUSS/S
 129  S.n0n
 130  UH!nUSnX�;dUSX�S:�dMX�U'M# [
 131  U
 132  R55nUUU[U5S.$)z�
 133  On-Demand Live Search:
 134  Resolves metadata via Cinemeta, queries Torrentio and YTS over Tor SOCKS5h.
 135  Groups results into 2160p, 1080p, 720p.
 136  Zero database indexing, zero local persistence, 100% ephemeral in-memory.
 137  r9rEr<rFr8r4�#)r�r�rj)r�rNrD)rEr<r9rFrHrBrCr,rv)r5�metadatarb�grouped)	�stripr^rNr��extendr��list�valuesr�)r5�fresh�query_cleanr:rbr9rEr<r>r��tio_streams�yts_streams�top�unique_streamsr��h�
 138  final_streamss                 r�
 139  search_cinemar�sd���+�+�-�K��K�(�D��G������#�#��y�/���W�
 140  ���F�|���l�#���H�H�V�$��0�	�'�w�t�y�`b�c�����{�#��+�K�r�B�K��N�N�;�'��'��2�>�����{�#��t��a�.�C��W���F���y�>�!�,�/���!��D��N�
 141  ��
 142  �k�N���"�a�	�l�^�5F�y�5Q�&Q� !�1���
 143  ��.�.�0�1�M��� �+�M�:�	�r
 144  c��/nSn[USS9nU(a�[R"U5nURS05RS/5nUH�nURS5=(d URS5nUR	URS5URS	5URS
 145  5[URSS55URS
 146  /5US.5 M� SSSSS/SS.SSSSS/SS.SSSSS/S S.S!S"S#SS/S$S.S%SS&SS/S'S.S(S)S*S+S/S,S.S-S.S/SS0/S1S.S2SS3SS/S4S.S5S6SSS7/S8S.S9S:S#SS7/S;S.S<S=S*SS/S>S.S?S:SSS/S@S.SAS)SBSCS/SDS.SESFSGSSH/SIS.SJS6SKSS/SLS./nX-n[5n	/n
 147  UHMnUSR5R5nX�;dM+U	RU5 U
 148  R	U5 MO [R"U
 149  5 U
 150  SMSN$![a GNf=f)Oz�
 151  Dynamically generates a fresh, curated set of recommendations across
 152  trending releases, top-rated cinematic masterpieces, and cult series.
 153  Does not build a persistent catalog on Dell.
 154  zShttps://movies-api.accel.li/api/v2/list_movies.json?sort_by=download_count&limit=20�rarWr�r�r�rEr<r�rHrDrB)rEr<r9rHrBrF�Interstellari�z8.7zSci-Fi�	Adventurez8https://images.metahub.space/poster/medium/tt0816692/img)rEr<rHrBrFzThe Dark Knighti�z9.0�Action�Crimez8https://images.metahub.space/poster/medium/tt0468569/imgzGladiator IIi�z6.4�Dramaz8https://images.metahub.space/poster/medium/tt9218128/img�	Inceptioni�z8.8z8https://images.metahub.space/poster/medium/tt1375666/imgzDune: Part Twoz8.5z9https://images.metahub.space/poster/medium/tt15239678/img�Oppenheimeri�z8.9�	Biographyz9https://images.metahub.space/poster/medium/tt15398776/imgzBlade Runner 2049i�z8.0�Mysteryz8https://images.metahub.space/poster/medium/tt1856101/imgzBreaking Badz9.5z8https://images.metahub.space/poster/medium/tt0903747/img�	Severancei��Thrillerz9https://images.metahub.space/poster/medium/tt11280740/imgz
 155  Fight Clubi�z8https://images.metahub.space/poster/medium/tt0137523/imgzPulp Fictioni�z8https://images.metahub.space/poster/medium/tt0110912/imgz
 156  The Matrixz8https://images.metahub.space/poster/medium/tt0133093/imgz#Spider-Man: Across the Spider-Versez8.6�	Animationz8https://images.metahub.space/poster/medium/tt9362722/img�	Chernobyli�z9.3�Historyz8https://images.metahub.space/poster/medium/tt7706692/imgzTop Gun: Maverickz8.2z8https://images.metahub.space/poster/medium/tt1745960/imgNr`)
 157  r"rLrMrNr�rr�setr}r��add�random�shuffle)
 158  �recsrrVrWr�rXr>�curated�combined�seen�dedup�it�	title_keys
 159               r�get_recommendationsr�Ps���D�
 160  �c���C��+����:�:�g�&�D��X�X�f�b�)�-�-�h��;�F������2�3�R�q�u�u�=Q�7R������U�U�7�^��E�E�&�M� �u�u�[�1�!�!�%�%��"�"5�6��e�e�H�b�1�"(�
 161  ���!�$�%�H�Va�Kb�sm�	n�#�T�U�x�Y`�Na�rl�	m� �$�%�H�V]�K^�oi�	j��t�u��S[�H\�mg�	h�"�D�E�h�Xc�Md�up�	q����;�X_�J`�ql�	m�%�t�u�QY�[d�Pe�vp�	q� �$�%�G�U\�K]�nh�	i��t�u��S]�H^�oj�	k����'�S]�I^�oi�	j� �$�%�G�U\�K]�nh�	i����(�T\�I]�nh�	i�7��QV�cn�px�by�JD�	E��t�u��R[�H\�mg�	h�%�t�u�QY�[b�Pc�tn�	o��G�&�~�H��5�D��E����w�K�%�%�'�-�-�/�	�� ��H�H�Y���L�L���	��N�N�5����"�:���C�
 162  ��
 163  �s�C+G6�6
 164  H�Hc�
 165  �S/4$)z�
 166  Zero-preload helper. Does NOT add torrent to database, does NOT preload any bytes.
 167  Simply returns default index 1 for on-demand playback when the user presses play.
 168  rlr)r,rErs   r�resolve_torrserver_streamr��s
 169  ��
 170  
 171  �b�5�Lr
 172  c�T�[R"SUR5S.5n[RR[S3URS5SS0S9n[RRUSS	9n[R"UR5RS55nURS
 173  S5URSS
 174  5URSS5URSS5S.sSSS5 $!,(df   g=f![a
 175   SSSSS.s$f=f)zGPolls live streaming stats from TorrServer (only active while playing).rN)�actionr�z	/torrentszutf-8zContent-Typezapplication/json)rW�headersrra�statr�stat_string�Activer��download_speed)r�r�r�r�N�Idle)rL�dumpsr}r)�request�Request�TORRSERVER_URL�encode�urlopenrM�read�decoderNr)r,�get_payload�req�resprWs     r�get_torrserver_statsr��s��S��j�j�E�9�?�?�;L�!M�N���n�n�$�$���i�(��#�#�G�,�#�%7�8�%�
 176  ��
 177  �^�^�
 178  #�
 179  #�C��
 180  #�
 181  3�t��:�:�d�i�i�k�0�0��9�:�D������+�#�x�x�
 182  �x�@����'�1�-�"&�(�(�+;�Q�"?�	�4�
 183  3�
 184  3���S��&�1�PQ�R�R�S�s1�A<D�>A:D�8	D�
 185  D�D�D�D'�&D'c���[R"[SS9 [R"SSS9 SnSnURS5(aBUn[R
 186  "SU5nU(aUR
 187  S5R5OSnO*UR5n[X1=(d S	US
 188  S35n[R"SSU=(d US
 189  S
 190  5R5nSUS3nSSS[3-S[3SSSSSU3SSU/n[R"U[R[RSS9 SXS[S.$![anS[!U5S.sS
 191  nA$S
 192  nAff=f) z�
 193  Starts background aria2c download directly to /mnt/hdd1/MOvies/.
 194  Only triggered when user explicitly clicks [Save to 1TB HDD].
 195  Strictly ROE-01 compliant (Drive D /dev/sda5 is untouched).
 196  T)�exist_okz/mnt/hdd1/torrentsrDzmagnet:zbtih:([a-zA-Z0-9]+)rl�UNKNOWN�Movie_N�z[^a-zA-Z0-9_\-\. ]rjz/mnt/hdd1/torrents/z.log�aria2cz--all-proxy=z
 197  socks5h://z--dir=z
 198  --seed-time=0z--max-connection-per-server=8z--bt-save-metadata=truez--summary-interval=5z--log=z--log-level=noticez
 199  --daemon=true)rrr�started)r�rEr��dir�error)r��message)�os�makedirs�HDD_DIR�
 200  startswithr~rr�r|r1�subr�rrrrrr)	�info_hash_or_magnetrErxr,�match�clean_title�log_filer �es	         r�start_hdd_downloadr�s\���K�K��$�'��K�K�$�t�4��J��I��%�%�i�0�0�(�
 201  ��	�	�0�*�=��.3�E�K�K��N�(�(�*��	�'�-�-�/�	�!�)�-N��y��!�}�o�6N�O�
 202  ��&�&�.��E�4K�Y�s��^�L�R�R�T�K�$�Y�K�t�4�H�	��:�i�[�1�1�
 203  ��	���'�!��
 204  ��
 205  ������C�6����s�:�?�?�:�?�?�QU�V�#�k�U\�]�]���6�!�c�!�f�5�5��6�s�<E�
 206  E.�
 207  E)�#E.�)E.c
 208  �^
 209  �/n[RR[5(dU$Sn[R"[5H�up#n[U5H�m
 210  [
 211  U
 212  4SjU55(dM[RRUT
 213  5n[RRU[5n[RRU5n[RRU5n[R"U5RS5n	URT
 214  UU[U5U	S.5 M� M� U$![ a M�f=f)zLScans /mnt/hdd1/MOvies for saved video files and returns structured listing.)z.mp4z.mkvz.aviz.movz.webmz.m4vc3�b># �UH$nTR5RU5v� M& g7f)N)r}�endswith)�.0�ext�fs  �r�	<genexpr>� get_hdd_media.<locals>.<genexpr>�s%����A�j�s�1�7�7�9�%�%�c�*�*�j�s�,/z%Y-%m-%d %H:%M)�filename�rel_pathrurt�
 215  date_saved)r��path�existsr��walk�sorted�anyr'�relpath�getsize�getmtimer�
 216  fromtimestamp�strftimer�r	r)�media_files�
 217  video_exts�root�dirs�files�	full_pathrr�mtime�dt_strrs          @r�
 218  get_hdd_mediar$�s����K�
 219  �7�7�>�>�'�"�"���B�J��W�W�W�-���E����A��A�j�A�A�A��G�G�L�L��q�1�	��7�7�?�?�9�g�>���������3�B��G�G�,�,�Y�7�E�%�3�3�E�:�C�C�DT�U�F��&�&�$%�$,�&(�$0��$4�&,�(���.�$���!����s�?BE�
 220  E�E)r`)�)Fr�)rj)F)rDr)rD))�__doc__r��sysrLr�urllib.parser)�urllib.requestr~�timer�rrrrr'�dirname�__file__r�r�rIrJrOr{rzr�r(r	r"r$r1r^r�r�r�r�r�r�r�rr$rr
 221  r�<module>r-s����
 222  �
 223  �����	��
 224  ���	� "�����/A� B� B�
 225  ������UW�U\�U\�Ud�Ud�em�Un�p{�H|��(��\��^��M��R��X��������&�$B�
 226  0�d>�@0�d� 8�t:�x�S�((6�Tr
 227