🏠 Home 

TikTok Magic (ดาวน์โหลดไดนามิก)

ดาวน์โหลดวิดีโอโดยไม่มีโลโก้/ลายน้ำด้วยคลิกเดียวโดยตรงจาก TikTok คุณลักษณะเพิ่มเติมในเร็ว ๆ นี้

  1. // ==UserScript==
  2. // @name TikTok Magic (download dinâmico)
  3. // @namespace https://linkme.bio/jhonpergon/?userscript=tiktok_tools
  4. // @version 1.4
  5. // @author Jhon Pérgon
  6. // @description Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
  7. /// @name:pt TikTok Magic (download dinâmico)
  8. // @name:pt-BR TikTok Magic (download dinâmico)
  9. // @name:pt-PT TikTok Magic (download dinâmico)
  10. // @name:es TikTok Magic (descarga dinámica)
  11. // @name:en TikTok Magic (dynamic download)
  12. // @name:en-US TikTok Magic (dynamic download)
  13. // @name:fr TikTok Magic (téléchargement dynamique)
  14. // @name:ru TikTok Magic (динамическая загрузка)
  15. // @name:ja TikTok Magic(ダイナミックダウンロード)
  16. // @name:ko TikTok Magic (동적 다운로드)
  17. // @name:zh-TW TikTok Magic(動態下載)
  18. // @name:zh-CN TikTok Magic(动态下载)
  19. // @name:id TikTok Magic (unduhan dinamis)
  20. // @name:ug TikTok Magic (دينامىك چۈشەندۈرۈش)
  21. // @name:ar TikTok Magic (تحميل ديناميكي)
  22. // @name:he TikTok Magic (הורדה דינמית)
  23. // @name:hi TikTok Magic (गतिशील डाउनलोड)
  24. // @name:th TikTok Magic (ดาวน์โหลดไดนามิก)
  25. // @name:bg TikTok Magic (динамично изтегляне)
  26. // @name:ro TikTok Magic (descărcare dinamică)
  27. // @name:fi TikTok Magic (dynaaminen lataus)
  28. // @name:it TikTok Magic (download dinamico)
  29. // @name:el TikTok Magic (δυναμική λήψη)
  30. // @name:eo TikTok Magic (dinamika elŝuto)
  31. // @name:hu TikTok Magic (dinamikus letöltés)
  32. // @name:nb TikTok Magic (dynamisk nedlasting)
  33. // @name:sk TikTok Magic (dynamické sťahovanie)
  34. // @name:sv TikTok Magic (dynamisk nedladdning)
  35. // @name:sr TikTok Magic (динамично преузимање)
  36. // @name:pl TikTok Magic (dynamiczne pobieranie)
  37. // @name:nl TikTok Magic (dynamische download)
  38. // @name:de TikTok Magic (dynamischer Download)
  39. // @name:da TikTok Magic (dynamisk download)
  40. // @name:cs TikTok Magic (dynamické stahování)
  41. // @name:uk TikTok Magic (динамічне завантаження)
  42. // @name:tr TikTok Magic (dinamik indirme)
  43. // @name:vi TikTok Magic (tải xuống động)
  44. // @name:fr-CA TikTok Magic (téléchargement dynamique)
  45. // @description:pt Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
  46. // @description:pt-BR Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
  47. // @description:pt-PT Baixe vídeos sem logo/marca d'água com apenas um clique, diretamente do tiktok. Mais recursos em breve.
  48. // @description:es Descarga vídeos sin logo/marca de agua con un solo clic, directamente desde TikTok. Pronto más características.
  49. // @description:en Download videos without logo/watermark with just one click, directly from TikTok. More features coming soon.
  50. // @description:fr Téléchargez des vidéos sans logo/marque d'eau en un seul clic, directement depuis TikTok. Plus de fonctionnalités à venir.
  51. // @description:ru Загружайте видео без логотипа/водяного знака всего одним щелчком, прямо из TikTok. Скоро появятся дополнительные функции.
  52. // @description:ja ロゴ/ウォーターマークなしの動画を1クリックでTikTokから直接ダウンロードします。近日、さらなる機能を追加予定です。
  53. // @description:ko 로고/워터마크 없는 동영상을 한 번의 클릭으로 TikTok에서 직접 다운로드하세요. 곧 더 많은 기능이 출시됩니다.
  54. // @description:zh-TW 一次點擊即可從 TikTok 直接下載無標誌/水印的影片。更多功能即將推出。
  55. // @description:zh-CN 一次点击即可从 TikTok 直接下载无标志/水印的视频。更多功能即将推出。
  56. // @description:id Unduh video tanpa logo/tanda air dengan hanya satu kali klik, langsung dari TikTok. Fitur lebih lanjut akan segera hadir.
  57. // @description:ug TikTokدىن تەكشۈرۈشقا كۈنكەر قۇيۇپ، بىر قىلىشتا پۈتۈن چۈشەندۈرۈشقا بولىدۇ. قوشۇمچە ئىمكانلار قىلىنىدۇ.
  58. // @description:ar قم بتنزيل الفيديوهات بدون شعار/علامة مائية بنقرة واحدة، مباشرة من TikTok. المزيد من الميزات قريبًا.
  59. // @description:he הורד סרטונים ללא לוגו/סימן מים בלחיצה אחת, ישירות מ-TikTok. יש יותר תכונות בקרוב.
  60. // @description:hi एक क्लिक में लोगो/जलाम रहित वीडियो डाउनलोड करें, सीधे TikTok से। जल्द ही अधिक सुविधाएँ उपलब्ध होंगी।
  61. // @description:th ดาวน์โหลดวิดีโอโดยไม่มีโลโก้/ลายน้ำด้วยคลิกเดียวโดยตรงจาก TikTok คุณลักษณะเพิ่มเติมในเร็ว ๆ นี้
  62. // @description:bg Изтегляйте видеоклипове без лого/воден знак с едно щракване, директно от TikTok. Повече функции скоро.
  63. // @description:ro Descărcați videoclipuri fără logo/semn de apă cu doar un clic, direct de pe TikTok. Mai multe funcționalități în curând.
  64. // @description:fi Lataa videoita ilman logoa/vesileimaa vain yhdellä napsautuksella, suoraan TikTokista. Lisää ominaisuuksia tulossa pian.
  65. // @description:it Scarica video senza logo/watermark con un solo clic, direttamente da TikTok. Altre funzionalità in arrivo presto.
  66. // @description:el Κατεβάστε βίντεο χωρίς λογότυπο/υδατογραφή με μόνο ένα κλικ, απευθείας από το TikTok. Περισσότερες λειτουργίες σύντομα διαθέσιμες.
  67. // @description:eo Elŝutu videojn sen logo/aŭ akvo-marko per nur unu klako, rekte de TikTok. Pliaj funkcioj venos baldaŭ.
  68. // @description:hu Tölts le videókat logó/vízjel nélkül egyetlen kattintással, közvetlenül a TikTokról. Hamarosan több funkció érkezik.
  69. // @description:nb Last ned videoer uten logo/vannmerke med bare ett klikk, direkte fra TikTok. Flere funksjoner kommer snart.
  70. // @description:sk Stiahnite si videá bez loga/vodného značky jediným kliknutím priamo z TikToku. Ďalšie funkcie čoskoro.
  71. // @description:sv Ladda ner videor utan logotyp/vattenstämpel med bara ett klick, direkt från TikTok. Fler funktioner kommer snart.
  72. // @description:sr Преузмите видее без лого/воденог жига једним кликом, директно са ТикТока. Више функција ускоро.
  73. // @description:pl Pobieraj filmy bez logo/wodnego znaku za pomocą jednego kliknięcia, bezpośrednio z TikToka. Więcej funkcji wkrótce.
  74. // @description:nl Download video's zonder logo/watermerk met slechts één klik, rechtstreeks van TikTok. Meer functies binnenkort beschikbaar.
  75. // @description:de Laden Sie Videos ohne Logo/Wasserzeichen mit nur einem Klick direkt von TikTok herunter. Weitere Funktionen bald verfügbar.
  76. // @description:da Download videoer uden logo/vandmærke med kun ét klik, direkte fra TikTok. Flere funktioner kommer snart.
  77. // @description:cs Stahujte videa bez loga/vodního znamení jedním kliknutím přímo z TikToku. Další funkce brzy.
  78. // @description:uk Завантажуйте відео без лого/водяного знаку одним кліком, безпосередньо з TikTok. Більше функцій незабаром.
  79. // @description:tr TikTok'tan sadece bir tıklama ile logo/su damgası olmadan video indirin. Yakında daha fazla özellik.
  80. // @description:vi Tải xuống video mà không có logo/dấu nước chỉ bằng một cú nhấp chuột, trực tiếp từ TikTok. Các tính năng khác sẽ sớm được cập nhật.
  81. // @description:fr-CA Téléchargez des vidéos sans logo/marque d'eau en un seul clic, directement depuis TikTok. Plus de fonctionnalités à venir.
  82. // @grant GM_addStyle
  83. // @grant GM_getValue
  84. // @grant GM_setValue
  85. // @license MIT
  86. // @match https://*.tiktok.com/*
  87. // @icon https://cdn.iconscout.com/icon/free/png-256/free-tiktok-4069944-3365463.png
  88. // @compatible chrome
  89. // @compatible firefox
  90. // @compatible opera
  91. // @compatible edge
  92. // @compatible safari
  93. // @compatible berrybrowser
  94. // ==/UserScript==
  95. (function() {
  96. 'use strict';
  97. let contagemK = 0;
  98. function addBToks(){
  99. // Criação do elemento <a>
  100. var linkElement = document.createElement('a');
  101. linkElement.setAttribute('href', '#');
  102. linkElement.setAttribute('class', 'linkTok');
  103. linkElement.setAttribute('target', '_blank');
  104. if(GM_getValue("statusVideo") == true && contagemK == 0){
  105. GM_setValue("statusVideo", false);
  106. linkElement.addEventListener('click', function() {
  107. setTimeout(() => {
  108. window.close(); // Fecha a aba após iniciar o download
  109. }, 1800);
  110. });
  111. }
  112. // Criação do elemento <button>
  113. var buttonElement = document.createElement('button');
  114. buttonElement.setAttribute('data-e2e', 'arrow-right');
  115. buttonElement.setAttribute('title', 'download magic');
  116. buttonElement.setAttribute('role', 'button');
  117. buttonElement.setAttribute('aria-label', 'Download Limpo');
  118. buttonElement.setAttribute('class', 'tiktokDL');
  119. // Criação do elemento <svg>
  120. var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
  121. svgElement.setAttribute('width', '26');
  122. svgElement.setAttribute('height', '26');
  123. svgElement.setAttribute('viewBox', '0 0 48 48');
  124. svgElement.setAttribute('fill', '#fff');
  125. svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
  126. svgElement.setAttribute('style', '--darkreader-inline-fill: #d7d5d1;');
  127. // Criação do elemento <path> dentro do <svg>
  128. var pathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');
  129. pathElement.setAttribute('d', 'M21.9 7.38v19.86l-6.73-6.73a.87.87 0 0 0-1.24 0l-1.73 1.73a.88.88 0 0 0 0 1.24l11.18 11.18c.34.35.9.35 1.24 0L35.8 23.48a.88.88 0 0 0 0-1.24l-1.73-1.73a.87.87 0 0 0-1.24 0l-6.73 6.73V7.38c0-.49-.4-.88-.87-.88h-2.45c-.49 0-.88.4-.88.88ZM10.88 37.13c-.49 0-.88.39-.88.87v2.63c0 .48.4.87.88.87h26.24c.49 0 .88-.4.88-.87V38c0-.48-.4-.87-.87-.87H10.86Z');
  130. svgElement.appendChild(pathElement);
  131. buttonElement.appendChild(svgElement);
  132. linkElement.appendChild(buttonElement);
  133. var styleElement1 = document.createElement('style');
  134. styleElement1.innerHTML = `
  135. .tiktokDL{
  136. position: absolute;
  137. z-index: 1;
  138. display: flex;
  139. -moz-box-pack: center;
  140. justify-content: center;
  141. -moz-box-align: center;
  142. align-items: center;
  143. background: rgba(84, 84, 84, 0.5);
  144. border-radius: 50%;
  145. cursor: pointer;
  146. border: medium;
  147. outline: none;
  148. width: 40px;
  149. height: 40px;
  150. top: calc(50% + 62px);
  151. margin-top: -24px;
  152. right: 20px;
  153. z-index: 10;
  154. }
  155. `;
  156. var styleElement2 = document.createElement('style');
  157. styleElement2.innerHTML = `
  158. .tiktokDL{
  159. position: absolute;
  160. z-index: 1;
  161. display: flex;
  162. -moz-box-pack: center;
  163. justify-content: center;
  164. -moz-box-align: center;
  165. align-items: center;
  166. background: rgba(84, 84, 84, 0.5);
  167. border-radius: 50%;
  168. cursor: pointer;
  169. border: medium;
  170. outline: none;
  171. width: 40px;
  172. height: 40px;
  173. top: calc(50% + -262px);
  174. margin-top: -24px;
  175. right: 20px;
  176. z-index: 10;
  177. }
  178. `;
  179. if(document.querySelector(".css-1s9jpf8-ButtonBasicButtonContainer-StyledVideoSwitch.e11s2kul11")){
  180. // Selecionar o elemento com a classe específica
  181. document.head.appendChild(styleElement1);
  182. const targetElement = document.querySelector('.css-1s9jpf8-ButtonBasicButtonContainer-StyledVideoSwitch.e11s2kul11');
  183. targetElement.insertAdjacentElement('afterend', linkElement);
  184. }else if(document.querySelector(".css-ty9aj4-DivVideoContainer.eqrezik7")){
  185. document.head.appendChild(styleElement2);
  186. const targetElement = document.querySelector('.css-ty9aj4-DivVideoContainer.eqrezik7');
  187. targetElement.insertAdjacentElement('afterend', linkElement);
  188. }else{
  189. document.head.appendChild(styleElement1);
  190. document.querySelector("#app-header").appendChild(linkElement);
  191. }
  192. }
  193. // Armazena o valor após a última "/" no endereço do site
  194. var lastSegment = window.location.pathname.split('/').filter(function(segment) {
  195. return segment !== '';
  196. }).pop();
  197. function minhaFuncao() {
  198. console.log('O valor após a última "/" mudou para:', lastSegment);
  199. if(document.querySelector(".linkTok")){
  200. document.querySelector(".linkTok").remove();
  201. }
  202. if(window.location.href.includes("/video/")){
  203. addBToks();
  204. const videoTikTok = document.querySelector('video');
  205. if (videoTikTok && videoTikTok.src.includes("-prime.tiktok.com/video/")) {
  206. const videoSrc = videoTikTok.src;
  207. document.querySelector(".linkTok").href = videoSrc;
  208. } else {
  209. /*let cancellLink = document.querySelector(".linkTok");
  210. cancellLink.addEventListener('click', function(event) {
  211. event.preventDefault();
  212. });*/
  213. const linkTokElement = document.querySelector('.tiktokDL');
  214. linkTokElement.addEventListener('click', function() {
  215. GM_setValue("statusVideo", true);
  216. //alert('Error.');
  217. //window.location.reload();
  218. });
  219. }
  220. }
  221. }
  222. // Monitora as mudanças no valor após a última "/"
  223. function tokChck() {
  224. var newLastSegment = window.location.pathname.split('/').filter(function(segment) {
  225. return segment !== '';
  226. }).pop();
  227. // Se o valor mudou, chama a função
  228. if (lastSegment !== newLastSegment) {
  229. lastSegment = newLastSegment;
  230. contagemK++;
  231. minhaFuncao();
  232. }
  233. };
  234. if(window.location.href.includes("-prime.tiktok.com/video/")){
  235. const videoElement = document.querySelector('video');
  236. if (videoElement) {
  237. videoElement.pause();
  238. const videoSrc = videoElement.src;
  239. const uniqueId = Math.floor(Math.random() * 10000); // Gera um ID único com quatro números
  240. const downloadFileName = `tiktok_magic-${uniqueId}.mp4`;
  241. const downloadLink = document.createElement('a');
  242. downloadLink.href = videoSrc;
  243. downloadLink.download = downloadFileName;
  244. downloadLink.addEventListener('click', () => {
  245. setTimeout(() => {
  246. window.close(); // Fecha a aba após iniciar o download
  247. }, 1300); // Defina um intervalo de tempo suficiente para o download começar
  248. });
  249. downloadLink.click();
  250. } else {
  251. console.log('Elemento de vídeo não encontrado.');
  252. }
  253. }else{
  254. setTimeout(function(){
  255. minhaFuncao();
  256. setInterval(tokChck, 1500)
  257. },2500)
  258. }
  259. function carregarStatus() {
  260. const statusTK = GM_getValue("statusVideo");
  261. if (statusTK) {
  262. if(GM_getValue("statusVideo") == true){
  263. if(contagemK == 0){
  264. var dwstyle = document.createElement('style');
  265. dwstyle.innerHTML = `
  266. .tiktokDL{
  267. border: 1px solid transparent;
  268. animation: picbord .5s infinite;
  269. }
  270. @keyframes picbord {
  271. 0% {
  272. border: 1px solid transparent;
  273. }
  274. 100% {
  275. border: 1px solid lightgreen;
  276. }
  277. }
  278. `;
  279. document.head.appendChild(dwstyle);
  280. }
  281. }
  282. }else{
  283. GM_setValue("statusVideo", false);
  284. }
  285. }
  286. carregarStatus();
  287. })();