wolfyflutter

63. ogmp3.pro, ytmp3.ws [youtube] [downloader] [audio] [video]

Oct 12th, 2025 (edited)
453
0
Never
9
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 5.44 KB | Source Code | 0 0
  1. /*
  2.   yt audio video downloader
  3.   base   : https://ogmp3.pro/ | https://ytmp3.ws
  4.   note   : skrep dah jadi, bisa donlot audio dan video
  5.            supported format: 64k, 96k, 128k, 192k, 256k, 320k, 240p, 360p, 480p, 720p, 1080p
  6.   node   : 24.5.0
  7.   update : 11 November 2025, 12:57 wita
  8.   by     : wolep
  9. */
  10.  
  11. const yt = {
  12.     url: Object.freeze({
  13.         audio128: 'https://api.apiapi.lat',
  14.         video: 'https://api5.apiapi.lat',
  15.         else: 'https://api3.apiapi.lat',
  16.         referrer: 'https://ogmp3.pro/'
  17.     }),
  18.  
  19.     encUrl: (string) => string.split('').map(c => c.charCodeAt()).reverse().join(';'),
  20.     xor: (string) => string.split('').map(s => String.fromCharCode(s.charCodeAt() ^ 1)).join(''),
  21.     genRandomHex: () => {
  22.         const hex = '0123456789abcdef'.split('')
  23.         return Array.from({ length: 32 }, _ => hex[Math.floor(Math.random() * hex.length)]).join('')
  24.     },
  25.  
  26.     init: async function (rpObj) {
  27.         const { apiOrigin, payload } = rpObj
  28.         const { data } = payload
  29.         const api = apiOrigin + '/' + this.genRandomHex() + '/init/' + this.encUrl(this.xor(data)) + '/' + this.genRandomHex() + '/'
  30.         let resp = await fetch(api, {
  31.             method: 'post',
  32.             body: JSON.stringify(payload)
  33.         })
  34.         if (!resp.ok) throw Error(`${resp.status} ${resp.statusText}\n${await resp.text()}`)
  35.         const json = await resp.json()
  36.         //console.log(json)
  37.         return json
  38.     },
  39.  
  40.     genFileUrl: function (i, pk, rpObj) {
  41.         const { apiOrigin } = rpObj
  42.         console.log("done.. enjoy!")
  43.         const pk_value = pk ? pk + "/" : "";
  44.         const downloadUrl = apiOrigin + "/" + this.genRandomHex() + "/download/" + i + "/" + this.genRandomHex() + "/" + pk_value;
  45.         const result = { downloadUrl }
  46.         return result
  47.     },
  48.  
  49.     statusCheck: async function (i, pk, rpObj) {
  50.         const { apiOrigin } = rpObj
  51.         let json = {}
  52.         let counter = 0
  53.         do {
  54.             await new Promise(resolve => setTimeout(resolve, 5000))
  55.             counter++
  56.             console.log("pooling ke " + counter + "/100")
  57.  
  58.             const pk_value = pk ? pk + '/' : ''
  59.             let api = apiOrigin + '/' + this.genRandomHex() + '/status/' + i + '/' + this.genRandomHex() + '/' + pk_value
  60.             const resp = await fetch(api, {
  61.                 method: 'post',
  62.                 headers: { "Content-Type": "application/json" },
  63.                 body: JSON.stringify({ data: i })
  64.             })
  65.             if (!resp.ok) throw Error(`${resp.status} ${resp.statusText}\n${await resp.text()}`)
  66.             json = await resp.json()
  67.             //console.log(json)
  68.            
  69.             if(counter >=100) throw Error (`pooling mencapai 100 kali, proses dihentikan. gak jelas jir`)
  70.         } while (json.s === "P")
  71.         if (json.s === "E") throw Error('gagal gagal.. nih raw json\n' + JSON.stringify(json, null, 2))
  72.         return this.genFileUrl(i, pk, rpObj)
  73.     },
  74.  
  75.     download: async function (ytUrl, userFormat = '128k') {
  76.         const rpObj = this.resolvePayload(ytUrl, userFormat)
  77.         const initObj = await this.init(rpObj)
  78.         const { i, pk, s } = initObj
  79.         console.log(`your task id: ${i}`)
  80.         let result = { userFormat }
  81.         if (s === 'C') {
  82.             const wolep = this.genFileUrl(i, pk, rpObj)
  83.             Object.assign(result, wolep)
  84.         } else {
  85.             const wolep = await this.statusCheck(i, pk, rpObj)
  86.             Object.assign(result, wolep)
  87.         }
  88.         return result
  89.  
  90.     },
  91.  
  92.     resolvePayload: function (ytUrl, userFormat) {
  93.         const validFormat = ['64k', '96k', '128k', '192k', '256k', '320k', '240p', '360p', '480p', '720p', '1080p']
  94.         if (!validFormat.includes(userFormat)) throw Error(`param format salah. format tersedia: ${validFormat.join(', ')}`)
  95.         if (typeof (ytUrl) !== "string" || !ytUrl.trim().length) throw Error('param youtube url gak boleh kosong')
  96.  
  97.         let apiOrigin = this.url.audio128 //origin default
  98.  
  99.         // pemilihan format, mp3quality dan mp4quality
  100.         let data = this.xor(ytUrl) //data xor yturl
  101.         let referer = this.url.referrer
  102.         let format = '0' // 0=audio, default
  103.         let mp3Quality = '128' //quality default
  104.         let mp4Quality = '720' //quality default
  105.  
  106.         if (userFormat === validFormat[2]) { //128k
  107.             apiOrigin = this.url.audio128
  108.         } else if (/^\d+p$/.test(userFormat)) { // any video
  109.             apiOrigin = this.url.video
  110.             mp4Quality = userFormat.match(/\d+/g)[0]
  111.             format = '1'
  112.         } else {
  113.             apiOrigin = this.url.else
  114.             mp3Quality = userFormat.match(/\d+/g)[0]
  115.         }
  116.         const payload = {
  117.             data,
  118.             format,
  119.             referer,
  120.             mp3Quality,
  121.             mp4Quality,
  122.             "userTimeZone": "-480"
  123.         }
  124.         const result = { apiOrigin, payload }
  125.         return result
  126.     }
  127. }
  128.  
  129. // cara pakai
  130. const my_youtube_url = 'https://www.youtube.com/watch?v=ccJzB-N75W8&list=RDGMEMJQXQAmqrnmK1SEjY_rKBGAVMs1tAYmMjLdY&index=3'
  131. yt.download(my_youtube_url, '360p') // 360p bisa di ganti, liat note atas untuk ketersediaan format.
  132.     .then(console.log)
  133.     .catch(console.log)
  134.  
  135. /* atau yt.download(my_youtube_url) empty param auto download audio 128k.
  136.  
  137. output :
  138.  
  139. {
  140.   userFormat: '360p',
  141.   downloadUrl: 'https://api5.apiapi.lat/c9db387fcf0cf18af7ac45a........10ca219c57f4290327b378640ebe86/124845/'
  142. }
  143.  
  144. */
  145.  
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Xarvekig
    15 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Rekegbi
    5 hours
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=metjloqihz
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment