Skip to content

Instantly share code, notes, and snippets.

@tsvtt
Last active October 10, 2026 22:46
Show Gist options
  • Select an option

  • Save tsvtt/65f335fde4f873b7d2702e7294334194 to your computer and use it in GitHub Desktop.

Select an option

Save tsvtt/65f335fde4f873b7d2702e7294334194 to your computer and use it in GitHub Desktop.
Скачать видео с boosty
  • Открыть страницу с видео, видеоплеер должен быть виден на странице
  • Открыть средства разработчика в браузере (F12), открыть вкладку с консолью
  • Выполнить:
    document.querySelector('vk-video-player').store.actions.internal.downloadVideo()
@yuhrim

yuhrim commented May 10, 2026

Copy link
Copy Markdown

У меня нет. Воспользовался:
pip install boosty-downloader

@pianino2

Copy link
Copy Markdown

спасибо!!!!!!

@kahper88

kahper88 commented Aug 7, 2026

Copy link
Copy Markdown

Четко)

@Glitchy-Sheep

Copy link
Copy Markdown

У меня нет. Воспользовался: pip install boosty-downloader

Спасибо, что пользуетесь моим детищем ❤️
Сделано с любовью: https://github.com/Glitchy-Sheep/boosty-downloader

@kalininDanil17Y

Copy link
Copy Markdown

Код выводит в консоль все найденные видео на странице, ссылки на разное качество этих видео
Бусти использует ВКшный плеер, из него можно вытянуть всё и вся, да и у бусти весь state лежит в одном месте, тоже легко достать всё что нужно

(() => {
  const stateEl = document.getElementById('initial-state');
  if (!stateEl) {
    console.error('❌ initial-state не найден');
    return;
  }

  const state = JSON.parse(stateEl.textContent);
  const posts = state?.posts?.postsList?.data?.posts || [];

  if (!posts.length) {
    console.error('❌ Посты не найдены');
    return;
  }

  const qualityMap = {
    ultra_hd: '2160p',
    quad_hd:  '1440p',
    full_hd:  '1080p',
    high:     '720p',
    medium:   '480p',
    low:      '360p',
    lowest:   '240p',
    tiny:     '144p'
  };

  // Красивое форматирование длительности
  const formatDuration = (sec) => {
    if (!sec && sec !== 0) return '?';
    const h = Math.floor(sec / 3600);
    const m = Math.floor((sec % 3600) / 60);
    const s = Math.floor(sec % 60);
    if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
    return `${m}:${String(s).padStart(2, '0')}`;
  };

  let videoIndex = 0;

  posts.forEach((post, postIdx) => {
    const postTitle = post.title || post.data?.find(x => x.type === 'text')?.content || `Пост #${postIdx + 1}`;
    const videos = (post.data || []).filter(item => item.type === 'ok_video' && item.playerUrls);

    if (!videos.length) return;

    videos.forEach((video, vIdx) => {
      videoIndex++;
      const videoTitle = video.title || `Видео ${vIdx + 1}`;
      const duration = formatDuration(video.duration);

      console.log(`\n%c🎬 [${videoIndex}] ${videoTitle}`, 'font-size:14px; font-weight:bold; color:#0f0');
      console.log(`%c📌 Пост: ${postTitle}`, 'color:#aaa');
      console.log(`%c⏱ Длительность: ${duration} | ID: ${video.id || video.vid || '—'}`, 'color:#888');

      const qualities = video.playerUrls
        .filter(u => u.url && qualityMap[u.type])
        .sort((a, b) => {
          const order = ['ultra_hd','quad_hd','full_hd','high','medium','low','lowest','tiny'];
          return order.indexOf(a.type) - order.indexOf(b.type);
        });

      if (!qualities.length) {
        console.log('%c   Нет прямых ссылок', 'color:#f55');
        return;
      }

      qualities.forEach(q => {
        console.log(`   %c${qualityMap[q.type].padEnd(6)}`, 'color:#0af; font-weight:bold', q.url);
      });

      const hls = video.playerUrls.find(u => u.type === 'hls' && u.url);
      const dash = video.playerUrls.find(u => u.type === 'dash' && u.url);
      if (hls)  console.log(`   %cHLS   `, 'color:#fa0; font-weight:bold', hls.url);
      if (dash) console.log(`   %cDASH  `, 'color:#fa0; font-weight:bold', dash.url);
    });
  });

  if (videoIndex === 0) {
    console.log('%c❌ Видео типа ok_video на странице не найдено', 'color:#f55');
  } else {
    console.log(`\n%c✅ Найдено видео: ${videoIndex}`, 'font-weight:bold; color:#0f0');
  }
})();
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment