Доступ к Pintere LLC и использование Pintere LLC (\ "Pintere\" или \"Pintere.com\") вы соглашаетсяе быть связанными Pintere.com условиями обслуживания, как указано в этом документе. Если вы не принимаете эти условия, вам не разрешается использовать Pintere.com или его услуги.
Pintere.com резервирует за собой право изменять, изменять, обновлять или прекращать срок службы по своему усмотрению в любое время по любой причине.
Если вы нарушаете положения об услугах, то любое предварительное разрешение, имплицитное или явное, на использование Pintere.com или его услуги немедленно прекращаются без уведомления.
В результате признания этих условий службы никаких отношений между работодателем и работником, партнерских отношений или других отношений с Pintere.com не возникает.
Регистрация
Вы представляете и утверждаете для нас, что: а) вы - индивид (т.е. не корпорация), и вы имеете законный возраст для заключения обязательного договора или для этого имеете разрешение вашего родителя, и вам не менее 13 лет или старше; b) вся представляемая вами информация о регистрации является точной и правдивой; и С) вы будете сохранять точность такой информации. Вы также удостоверяете, что вам разрешено пользоваться услугами и получать доступ к ним, и берете на себя всю полноту ответственности за выбор, использование и доступ к услугам. Это соглашение является недействительным, если оно запрещено законом, и любой доступ к Pintere.com или его услугам в таких юрисдикциях запрещен.
Содержание
Pintere.com сохраняет права на любой из своих оригинальных материалов Pintere.com и на свой веб-сайт.
Pintere.com может собирать информацию из вашего использования Pintere.com и его сервисов. Например, Pintere.com собирает ваш IP-адрес для записи ограничений скорости, если вы не пользователь UPGRADE. Это единственный случай, когда Pintere.com регистрирует ваш IP-адрес. На любом транскодере нет IP. Он не связывает его с любым видео, которое он записывает или аудио. Он просто показывает, что запись была сделана этим IP, пока IP не достигнет трех запросов. Через час ваш IP-адрес истекает. Это единственный случай, когда Pintere.com будет использовать ваш IP-протокол (\"IP\") адрес. Любые и все другие виды использования будут прямо запрещены, поскольку Pintere.com не регистрируют ни на какие серверы, которые он использует. Он может также собирать информацию, которую вы можете предоставить при создании счета. Хотя вы владеете вашими личными данными и информацией, используя Pintere.com и его услуги, вы предоставляете Pintere.com разрешений и лицензий на доступ, сбор и хранение таких пользовательских данных и информации (\ «Информация пользователя»). Ваша информация пользователя не включает никаких ссылок, которые вы используете.
Вы представляете, что имеете право предоставлять Pintere.com вашей информации для пользователей. Вы также согласны с тем, что вся информация для пользователей, которую вы представляете Pintere.com, прямо или с использованием Pintere.com и ее услуг, будет собираться и регулироваться политикой защиты частной жизни Pintere.com.
Pintere.com использует некоторые иконы для социальных медиа-услуг (\ «Social Media Icons» ) для направления пользователей на сайт Pintere.com о записи контента из таких социальных сетей.
Помимо информации, представляемой пользователями и собранной у их пользователей, Pintere.com не собирает и не хранит никакого содержания или информации третьих сторон.
При использовании ссылки на контент третьей стороны с Pintere.com вы понимаете, что вы несете полную ответственность за использование связи с услугами Pintere.com. Pintere.com не отвечает за какое-либо содержание, доступное через такие ссылки или связанные с ними материалы. Вы берете на себя всю ответственность.
Pintere.com не содержит никаких ссылок на содержание третьей стороны и просто содержит напрямую к вам трубы. В результате Pintere.com могут получить доступ только к контенту, который не защищен DRM. Поскольку вы отвечаете за обеспечение связи с Pintere.com и его услугами, Pintere.com не пересматривают и не одобряют содержание сайтов третьей стороны. Кроме того, Pintere.com не претендуют на какие-либо права на такое содержание. Вы признаете, что содержание и материалы, доступные через ссылки, представленные Pintere.com, и его услуги не всегда могут быть точными, полными или обновленными.
Определенное содержание может содержать цифровые механизмы прав, которые препятствуют доступу или хранению такого контента. Вы согласны не пытаться обойти такие цифровые механизмы прав.
Вы используете любые ссылки, как свою собственную свободу действий и риск. Вы понимаете.
Pintere.com человек уважают права интеллектуальной собственности других лиц и не разрешают и не оправдывают деятельность, нарушающую авторские права, и поэтому эта служба позволяет исключительно регистрировать доступное для общественности содержание в Интернете.
Опять же, Pintere.com не хранят никакого контента, доступного третьей стороне через ее сервисы или веб-сайт. Поэтому мы не можем удалить какой-либо контент. Если вы хотите удалить или отключить доступ к контенту, доступному через другие вебсайты, просьба направить любое уведомление поставщику (например, Instagram, FaceBook, Pinterest и т.д.) напрямую. Вы можете связаться с некоторыми из них по следующим ссылкам:
Удаление инстаграма, Удаление процентов.
Поведение
"Strong" Pintere.com, и его услуги должны использоваться только для личного, некоммерческого использования. >/сильно> Любое коммерческое использование Pintere.com строго запрещено. Pintere.com преследует исключительно цель позволить пользователю создать копию доступного онлайнового контента посредством использования его услуг в виде видеомагнитофона для частного, некоммерческого использования пользователя (\"справедливое использование"). Однако это не включает публикацию записанных видео на любой публичной платформе без прямого разрешения владельца. Любое использование контента третьей стороны должно быть санкционировано владельцем такого контента и его интеллектуальной собственности. Пользователь несет полную ответственность за использование Pintere.com. Pintere.com действует только в качестве поставщика технических услуг.
Кроме того, вы согласны не:
- Назовите любые законы в вашей юрисдикции, включая любые законы о борьбе с пиратством.
- Изображайте какую-либо третью сторону или сторону.
- Disrupt the activities of other Pintere.com users.
Вы согласны использовать услуги Pintere.com ответственно.
Any violation of these Terms of Services and rights of any party may result in civil or criminal penalties pursued by Pintere.com or other third parties.
DMCA Политика
Pintere.com соблюдают права интеллектуальной собственности. Pintere.com сами по себе не хранят контент третьих сторон на своем веб-сайте или серверах, как видно из нашего примера кода, как настроить галерею-дл или похожий и Python для этого click здесь>/a>
Политика возмещения
Если вы хотите получить возмещение по какой бы то ни было причине в течение 30 дней после покупки, пожалуйста, обращайтесь к , свяжитесь с нами>/a>.
Аффилированное раскрытие информации
Pintere.com человек могут заработать небольшую комиссионную от избранных нескольких ссылок по всему сайту
Вопросы
Если у вас есть какие-либо вопросы по этому служебному документу, не стесняйтесь 0) {
var dur = parseFloat(attrDuration);
info.data('duration', dur);
info.find('.clip-fields').show();
info.find('.clip-loading').hide();
initClipSlider(info, dur);
} else {
info.find('.clip-loading').show();
info.find('.clip-fields').hide();
info.find('.clip-error').hide();
var itemPageUrl = info.attr('data-item-page-url') || '';
var pageUrl = decodeURIComponent(info.find('.download-button').data('page-url') || '');
var directUrl = decodeURIComponent(info.find('.download-button').data('url') || '');
var fetchUrl = itemPageUrl || pageUrl || directUrl;
$.ajax({
url: '/api/duration/',
type: 'POST',
data: {
url: fetchUrl,
csrfmiddlewaretoken: '896n6uFucMXcJGpiJL7pV3KhIv5D2Rz84QXBIm75Bj3N2nimHk5gfE5tydtI1WlZ'
},
success: function(data) {
if (data.duration) {
info.data('duration', data.duration);
info.find('.clip-loading').hide();
info.find('.clip-fields').show();
initClipSlider(info, data.duration);
} else {
info.find('.clip-loading').hide();
info.find('.clip-error').text('Could not get duration').show();
}
},
error: function() {
info.find('.clip-loading').hide();
info.find('.clip-error').text('Could not get duration').show();
}
});
}
}
} else {
clipInputs.hide();
}
resetDownloadButton(info);
});
container.on("click", ".download-button", function (e) {
var target = $(this);
var info = target.closest('.result-item-info');
var itemType = target.data('type') || '';
var format = info.find('[data-input=format]:checked').val() || '';
var quality = info.find('[data-input=quality]').val() || '';
var h264 = info.find('input[name=h264]').is(':checked');
// Image conversion (available to all users)
if (itemType === 'image' && GO_API_URL) {
var imgFormat = info.find('[data-input=img-format]:checked').val() || '';
var imgWidth = info.find('[data-input=img-width]').val() || '';
var imgHeight = info.find('[data-input=img-height]').val() || '';
var imgAspectRatio = info.find('[data-input=img-aspect-ratio]').val() || '';
var needsImageConversion = imgFormat !== '' || imgWidth !== '' || imgHeight !== '' || imgAspectRatio !== '';
if (needsImageConversion) {
e.preventDefault();
if (!hasPro) {
var modal = new bootstrap.Modal(document.getElementById('upgradeModal'));
modal.show();
return;
}
var sourceUrl = decodeURIComponent(target.data('url'));
var fn = target.data('fn') || 'image';
var form = document.createElement('form');
form.method = 'POST';
form.action = '/api/convert/image/';
form.style.display = 'none';
function addImgField(name, value) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = value;
form.appendChild(input);
}
addImgField('csrfmiddlewaretoken', '896n6uFucMXcJGpiJL7pV3KhIv5D2Rz84QXBIm75Bj3N2nimHk5gfE5tydtI1WlZ');
addImgField('url', sourceUrl);
addImgField('title', fn);
if (imgFormat) addImgField('image_format', imgFormat);
if (imgWidth) addImgField('width', imgWidth);
if (imgHeight) addImgField('height', imgHeight);
if (imgAspectRatio) addImgField('aspect_ratio', imgAspectRatio);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
onDownloadButton.call(target[0]);
return;
}
}
var needsConversion = (format === 'wav') || (quality !== '') || h264;
if (needsConversion && !hasPro) {
e.preventDefault();
var modal = new bootstrap.Modal(document.getElementById('upgradeModal'));
modal.show();
return;
}
if (needsConversion && GO_API_URL) {
e.preventDefault();
var pageUrl = decodeURIComponent(target.data('page-url') || '');
var fn = target.data('fn') || 'download';
var sourceUrl = pageUrl;
if (pageUrl.indexOf('tiktok.com') !== -1) {
var proxyType = (itemType === 'audio') ? 'audio' : 'video';
sourceUrl = GO_API_URL + '/api/proxy?url=' + encodeURIComponent(pageUrl) + '&type=' + proxyType + '&fn=' + encodeURIComponent(fn);
}
var fmt;
if (format === 'wav') {
fmt = 'wav';
} else if (itemType === 'audio') {
fmt = 'mp3';
} else {
fmt = 'mp4';
}
var form = document.createElement('form');
form.method = 'POST';
form.action = '/api/convert/' + fmt + '/';
form.style.display = 'none';
function addField(name, value) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = value;
form.appendChild(input);
}
addField('csrfmiddlewaretoken', '896n6uFucMXcJGpiJL7pV3KhIv5D2Rz84QXBIm75Bj3N2nimHk5gfE5tydtI1WlZ');
addField('url', sourceUrl);
addField('title', fn);
if (fmt === 'mp3' && quality) addField('audio_quality', quality + 'k');
if (fmt === 'mp4' && quality) addField('video_quality', quality);
if (fmt === 'mp4' && h264) addField('h264', 'true');
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
onDownloadButton.call(this);
} else {
onDownloadButton.call(this);
}
});
container.on("change", "[data-input=format]", function () {
var info = $(this).closest('.result-item-info');
var row = info.find('.quality-row');
if ($(this).val() === 'wav') {
row.addClass("d-none");
} else {
row.removeClass("d-none");
}
resetDownloadButton(info);
});
container.on("change input", "[data-input=quality]", function () {
resetDownloadButton($(this).closest('.result-item-info'));
});
container.on("change", "input[name=h264]", function () {
resetDownloadButton($(this).closest('.result-item-info'));
});
onChangeURLValue();
function onDownloadAll() {
var target = $(this);
target.find(".spinner-border").removeClass("d-none");
target.prop("disabled", true);
var filter = container.find('input[name="downloadFilter"]:checked').val() || 'all';
var downloadLinks = [];
var downloadButtons = container.find(".download-button");
downloadButtons.each(function (index, item) {
var type = $(item).data("type") || "";
if (filter === "all" || type === filter || (filter === "video" && (type === "video" || type === "video_watermark"))) {
downloadLinks.push($(item).data("url"));
$(item).addClass("downloaded");
}
});
if (downloadLinks.length === 0) {
target.find(".spinner-border").addClass("d-none");
target.prop("disabled", false);
return;
}
var batchDownloadI18n = {
intro: "We detected {count} files. To keep things reliable we will download them in {n} batches of up to {size}. Each batch is saved separately as it finishes.",
progress: "Batch {current} of {total}",
retrying: "Batch {batch} failed, retrying in {sec}s…",
failed: "Batch {batch} failed after retries. Press Resume to try again.",
done_status: "All batches downloaded.",
resume_prompt: "You already downloaded {done} of {total} batches for this list. Continue from there?",
cancel_confirm: "Cancel the remaining batches?"
};
batchDownload.show({
urls: downloadLinks,
baseName: "Pintere",
csrfToken: "896n6uFucMXcJGpiJL7pV3KhIv5D2Rz84QXBIm75Bj3N2nimHk5gfE5tydtI1WlZ",
goApiUrl: GO_API_URL || "",
i18n: batchDownloadI18n,
onAllDone: function () {
setTimeout(function () {
target.find(".spinner-border").addClass("d-none");
target.text('Поделиться Pintere.com');
target.removeClass('btn-primary').addClass('btn-success');
target.prop("disabled", false);
launchConfetti(target, 150, 2200);
}, 100);
},
onError: function (err) {
alert(err && err.message ? err.message : err);
target.find(".spinner-border").addClass("d-none");
target.prop("disabled", false);
},
onCancel: function () {
target.find(".spinner-border").addClass("d-none");
target.prop("disabled", false);
}
});
}
var individualDownloadCount = 0;
function onDownloadButton() {
var target = $(this);
if (!target.data('original-html')) {
target.data('original-html', target.html());
target.data('original-class', target.attr('class'));
}
target.find(".spinner-border").removeClass("d-none");
setTimeout(function () {
target.find(".spinner-border").addClass("d-none");
target.text('Поделиться Pintere.com');
target.removeClass('btn-outline-primary').addClass('btn-success');
launchConfetti(target, 150, 2200);
}, 100)
if (!hasPro) {
individualDownloadCount++;
var banner = $('#batchUpsellBanner');
if (banner.length && individualDownloadCount >= 3) {
$('#batchUpsellCount').text(individualDownloadCount);
banner.removeClass('d-none');
}
}
}
function resetDownloadButton(info) {
var btn = info.find('.download-button');
var originalHtml = btn.data('original-html');
if (originalHtml) {
btn.html(originalHtml);
btn.attr('class', btn.data('original-class'));
}
}
// Multi-select for batch download
container.on('change', '.select-item-checkbox', function () {
var checked = container.find('.select-item-checkbox:checked');
var count = checked.length;
if (!hasPro && count > 1) {
$(this).prop('checked', false);
var modal = new bootstrap.Modal(document.getElementById('upgradeModal'));
modal.show();
return;
}
$('#selectedCount').text(count);
if (count > 1) {
$('#downloadSelectedBtn').removeClass('d-none');
} else {
$('#downloadSelectedBtn').addClass('d-none');
}
});
$('#downloadSelectedBtn').on('click', function () {
var target = $(this);
target.find('.spinner-border').removeClass('d-none');
target.prop('disabled', true);
var selectedUrls = [];
container.find('.select-item-checkbox:checked').each(function () {
selectedUrls.push($(this).data('url'));
});
if (selectedUrls.length === 0) {
target.find('.spinner-border').addClass('d-none');
target.prop('disabled', false);
return;
}
var batchDownloadI18n = {
intro: "We detected {count} files. To keep things reliable we will download them in {n} batches of up to {size}. Each batch is saved separately as it finishes.",
progress: "Batch {current} of {total}",
retrying: "Batch {batch} failed, retrying in {sec}s…",
failed: "Batch {batch} failed after retries. Press Resume to try again.",
done_status: "All batches downloaded.",
resume_prompt: "You already downloaded {done} of {total} batches for this list. Continue from there?",
cancel_confirm: "Cancel the remaining batches?"
};
batchDownload.show({
urls: selectedUrls,
baseName: "Pintere-selected",
csrfToken: "896n6uFucMXcJGpiJL7pV3KhIv5D2Rz84QXBIm75Bj3N2nimHk5gfE5tydtI1WlZ",
goApiUrl: GO_API_URL || "",
i18n: batchDownloadI18n,
onAllDone: function () {
target.find('.spinner-border').addClass('d-none');
target.prop('disabled', false);
launchConfetti(target, 150, 2200);
},
onError: function (err) {
alert(err && err.message ? err.message : 'An error occurred');
target.find('.spinner-border').addClass('d-none');
target.prop('disabled', false);
},
onCancel: function () {
target.find('.spinner-border').addClass('d-none');
target.prop('disabled', false);
}
});
});
function launchConfetti($btn, amount, lifetime) {
var colors = ['#FF4757', '#2ED573', '#1E90FF', '#FFA502', '#A55EEA', '#2ECC71', '#FF6B81'];
var offset = $btn.offset();
var btnWidth = $btn.outerWidth();
var btnHeight = $btn.outerHeight();
for (var i = 0; i < amount; i++) {
var $c = $('');
var size = 3 + Math.random() * 4; // 🎯 más pequeño: 3–7 px
var dur = 0.8 + Math.random() * 0.8; // más rápido: 0.8–1.6 s
var delay = Math.random() * 0.2;
var color = colors[Math.floor(Math.random() * colors.length)];
var rotateStart = Math.floor(Math.random() * 360);
var startLeft = offset.left + Math.random() * btnWidth;
var startTop = offset.top + Math.random() * btnHeight;
$c.css({
position: 'absolute',
left: startLeft + 'px',
top: startTop + 'px',
background: color,
width: size + 'px',
height: (size + 2) + 'px',
transform: 'rotate(' + rotateStart + 'deg)',
animation: 'fall linear forwards',
animationDuration: dur + 's',
animationDelay: delay + 's',
zIndex: 9999,
pointerEvents: 'none',
opacity: 0.9
});
$('body').append($c);
(function (el) {
setTimeout(function () {
el.remove();
}, lifetime || 2000);
})($c);
}
}
function onChangeURLValue() {
const inputValue = $('#url').val();
if (!inputValue) {
return
}
const button = $('#copyPasteText');
const pasteText = button.data('paste');
const clearText = button.data('clear');
if (inputValue.trim() === '') {
button.text(pasteText);
} else {
button.text(clearText);
}
}
function onLoadMore() {
var wrapper = $(this).closest(".job-wrapper");
container.find("#loadMoreEntries").prop("disabled", true);
container.find("#loadMoreEntries").find(".spinner-border").removeClass("d-none");
var target = container.find("#form");
var formData = target.serializeArray();
var nextPageToken = wrapper.find("[name=next_page_token]").val();
formData.push({name: 'page', value: page});
formData.push({name: 'next_page_token', value: nextPageToken});
$.ajax({
url: `/api/extract/`,
type: 'POST',
data: formData,
success: function (data) {
if (data.error === true || data.success === false) {
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
container.find("#loadMoreEntries .spinner-border").addClass("d-none");
container.find("#loadMoreEntries").prop("disabled", false);
if (data.html) {
wrapper.find(".job-result").append(data.html);
}
return;
}
wrapper.find("#actionsWrapper").remove();
wrapper.find(`.job-result #postListWrapper`).append(data.html);
wrapper.find(`[name=next_page_token]`).val(data.next_page_token);
if (!data.next_page_token) {
container.find("#loadMoreEntries").remove();
} else {
container.find("#loadMoreEntries .spinner-border").addClass("d-none");
container.find("#loadMoreEntries").removeClass('m-progress').removeAttr('disabled');
}
initializeLazyLoad();
page += 1;
},
error: function (xhr, status, error) {
container.find("#loadMoreEntries .spinner-border").addClass("d-none");
container.find("#loadMoreEntries").prop("disabled", false);
try {
var response = JSON.parse(xhr.responseText);
if (response.html) {
wrapper.find(".job-result").append(response.html);
}
} catch (e) {
alert(error);
}
}
});
}
function onSubmit(e) {
page = 1;
var target = $(this);
container.find("#result").html("");
container.find("#heading").html("");
e.preventDefault();
var urlInput = target.find("#url").val();
if (!isValidURL(urlInput)) {
alert("Введите действительный URL-адрес.");
return;
}
target.find("button").addClass("m-progress").attr('disabled', 'disabled');
// Show loader
var wrapperId = 'extract-' + Date.now();
var wrapperHtml = "";
container.find("#result").append(wrapperHtml);
container.find("#" + wrapperId + " .job-result").append($(loader));
$.ajax({
url: `/api/extract/`,
type: 'POST',
data: target.serialize(),
success: function (data) {
if (data.error === true || data.success === false) {
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
if (data.html) {
container.find("#" + wrapperId + " .job-result").html(data.html);
} else {
container.find("#" + wrapperId + " .job-result").html(
'Произошла неизвестная ошибка.
'
);
}
return;
}
container.find("#heading").html(data.heading);
container.find("#" + wrapperId + " .job-result").html(data.html);
container.find("#" + wrapperId + " [name=next_page_token]").val(data.next_page_token);
if (!data.next_page_token) {
container.find("#loadMoreEntries").remove();
}
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
initializeLazyLoad();
page += 1;
},
error: function (xhr, status, error) {
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
try {
var errorJSON = JSON.parse(xhr.responseText);
// Rate limit error
if (errorJSON.rate_limit || errorJSON.no_credits) {
container.find("#" + wrapperId).remove();
container.find("#rateModal .exceeded-wrapper").html(errorJSON.error);
container.find('#rateModal').modal('show');
if (errorJSON.until) {
var rateInterval;
var totalSeconds = errorJSON.until;
container.find('.time-exceeded').text(utils.formatDuration(totalSeconds));
rateInterval = setInterval(
function () {
totalSeconds--;
container.find('.time-exceeded').text(utils.formatDuration(totalSeconds));
if (totalSeconds < 0) {
clearInterval(rateInterval);
window.location.reload();
}
}, 1000
);
}
return;
}
// Bulk URL error
if (errorJSON.bulk === false) {
container.find("#" + wrapperId).remove();
container.find("#rateModal .exceeded-wrapper").html(errorJSON.error);
container.find('#rateModal').modal('show');
return;
}
// Other error with HTML
if (errorJSON.html) {
container.find("#" + wrapperId + " .job-result").html(errorJSON.html);
} else if (errorJSON.error) {
container.find("#" + wrapperId + " .job-result").html(
'' + errorJSON.error + '
'
);
}
} catch (e) {
container.find("#" + wrapperId + " .job-result").html(
'При обработке запроса произошла ошибка.
'
);
}
}
});
}
function isValidURL(string) {
try {
// Extraer solo la parte antes de los parámetros (?)
let baseUrl = string.split("?")[0];
// Intentar crear un objeto URL para validar
let url = new URL(baseUrl);
// Asegurar que el hostname (dominio) es válido
return !!(url.hostname && url.hostname.includes("."));
} catch (e) {
return false; // Si la URL no es válida, devolver false
}
}
function getResults(jobId, $wrapper, onComplete, next_page_token) {
$.ajax({
url: `/api/result/`,
type: 'GET',
data: {
job_id: jobId,
nextPageToken: next_page_token,
},
success: function (data) {
if (data.loading) {
setTimeout(function () {
getResults(jobId, $wrapper, onComplete, next_page_token);
}, 4000);
return;
}
// Check if response indicates failure (even with status 200)
// This happens when job completes but with errors
if (data.error === true || data.success === false) {
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
if (data.html) {
container.find(`#${jobId} .job-result`).html(data.html);
} else {
container.find(`#${jobId} .job-result`).html(
'Произошла неизвестная ошибка.
'
);
}
if (onComplete) onComplete();
return;
}
container.find("#heading").html(data.heading);
if (page > 1) {
$wrapper.find("#actionsWrapper").remove();
$wrapper.find(`.job-result #postListWrapper`).append(data.html);
$wrapper.find(`[name=next_page_token]`).val(data.next_page_token);
} else {
container.find(`#${jobId} .job-result`).html(data.html);
container.find(`#${jobId} [name=next_page_token]`).val(data.next_page_token);
}
if (!data.next_page_token) {
container.find("#loadMoreEntries").remove();
} else {
container.find("#loadMoreEntries .spinner-border").addClass("d-none");
container.find("#loadMoreEntries").removeClass('m-progress').removeAttr('disabled');
}
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
initializeLazyLoad();
page += 1;
if (onComplete) onComplete();
},
error: function (xhr, status, error) {
$('.m-progress').removeClass('m-progress').removeAttr('disabled');
try {
const response = JSON.parse(xhr.responseText);
if (response.html) {
container.find(`#${jobId} .job-result`).html(response.html);
} else {
container.find(`#${jobId} .job-result`).html(
'Произошла неизвестная ошибка.
'
);
}
} catch (e) {
container.find(`#${jobId} .job-result`).html(
'При обработке запроса произошла ошибка.
'
);
}
if (onComplete) onComplete();
}
});
}
function initializeLazyLoad() {
const lazyImages = document.querySelectorAll('img.lazyload[data-src]');
if (!('IntersectionObserver' in window)) {
// Fallback simple para navegadores antiguos
lazyImages.forEach(img => {
img.src = img.getAttribute('data-src');
img.removeAttribute('data-src');
img.classList.remove('lazyload');
});
return;
}
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
if (!img.getAttribute('data-src')) return;
img.src = img.getAttribute('data-src');
img.removeAttribute('data-src');
img.onload = () => {
const parent = img.closest('.thumbnail-container') || img.closest('.result-image');
const loader = parent ? parent.querySelector('.loader-gif') : null;
if (loader) {
loader.style.display = 'none';
}
};
img.classList.remove('lazyload');
observer.unobserve(img);
}
});
});
lazyImages.forEach(img => observer.observe(img));
// Initialize Bootstrap tooltips on newly loaded content
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(function(el) {
if (!bootstrap.Tooltip.getInstance(el)) {
new bootstrap.Tooltip(el);
}
});
}
}
);
}());
[Error: All translation engines failed for batch: MADLAD batch translation failed: CUDA out of memory. Tried to allocate 2.00 MiB. GPU 0 has a total capacity of 23.87 GiB of which 3.62 MiB is free. Process 3280094 has 228.00 MiB memory in use. Process 2050901 has 244.00 MiB memory in use. Process 3310941 has 1.43 GiB memory in use. Process 3310930 has 1.56 GiB memory in use. Process 3310934 has 1.06 GiB memory in use. Process 3310933 has 1.12 GiB memory in use. Process 3310931 has 1.10 GiB memory in use. Process 3310938 has 1.53 GiB memory in use. Process 3310945 has 1.19 GiB memory in use. Process 3310935 has 1.02 GiB memory in use. Process 3310940 has 1.06 GiB memory in use. Process 3310929 has 1.04 GiB memory in use. Process 3310947 has 1000.00 MiB memory in use. Process 3310943 has 1.06 GiB memory in use. Including non-PyTorch memory, this process has 8.95 GiB memory in use. Process 3358747 has 336.00 MiB memory in use. Of the allocated memory 8.76 GiB is allocated by PyTorch, and 14.83 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)]
[Error: All translation engines failed for batch: MADLAD batch translation failed: CUDA out of memory. Tried to allocate 2.00 MiB. GPU 0 has a total capacity of 23.87 GiB of which 3.62 MiB is free. Process 3280094 has 228.00 MiB memory in use. Process 2050901 has 244.00 MiB memory in use. Process 3310941 has 1.43 GiB memory in use. Process 3310930 has 1.56 GiB memory in use. Process 3310934 has 1.06 GiB memory in use. Process 3310933 has 1.12 GiB memory in use. Process 3310931 has 1.10 GiB memory in use. Process 3310938 has 1.53 GiB memory in use. Process 3310945 has 1.19 GiB memory in use. Process 3310935 has 1.02 GiB memory in use. Process 3310940 has 1.06 GiB memory in use. Process 3310929 has 1.04 GiB memory in use. Process 3310947 has 1000.00 MiB memory in use. Process 3310943 has 1.06 GiB memory in use. Including non-PyTorch memory, this process has 8.95 GiB memory in use. Process 3358747 has 336.00 MiB memory in use. Of the allocated memory 8.76 GiB is allocated by PyTorch, and 14.83 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)]
🚀
Массовая загрузка - Массовая загрузка в один клик
📥
Несколько URL-адресов одновременно - Скопируйте несколько ссылок вместе и загрузите все за один раз.
🥇
Неограниченные загрузки - Неограниченные загрузки, никаких ограничений
✂️
Скачок - Вырезать части видео- и аудиоматериалов
🎞️
Самое высокое качество - Получить 8k, 4k, 1080p, 720p видео и 320kbit/s аудио
💬
Субтитры - Если в видео есть субтитры, можете добавить их.
💸
Гарантия возврата денег - Если вы не удовлетворены, верните свои деньги — без лишних вопросов.