Умные скрипты
Умные скрипты позволяют PicHound автоматически распознавать и группировать изображения по назначению на любой карточке товара, без ручной сортировки. С 50+ встроенными скриптами e-commerce для Taobao, Tmall, JD, Amazon, Shopee и др. он разделяет главные изображения, SKU, детали и видео. Поддерживаются JPEG, PNG, GIF, WEBP, BMP, SVG, AVIF, интерфейс на 30+ языках и лицензия Lifetime Pro за $13.99 на 3 активации устройств (безлимит при входе через Google). Все правила выполняются 100% локально в браузере: первая загрузка модели ИИ около 100 МБ, далее офлайн на RMBG-1.4 / MODNet. Бесплатным пользователям — задания до 10 бесплатны, крупные пакеты 12 в день; Lifetime Pro — безлимит.

Пользовательские скрипты для любого сайта
Если целевой сайт не покрыт встроенными скриптами, расширьте PicHound пользовательским JSON-шаблоном. Шаблон сопоставляет URL страниц регулярными выражениями и извлекает узлы изображений/видео через DOM-селекторы или выражения JavaScript — тот же опыт групповой загрузки, что у официальных скриптов.
Предварительные требования
Для пользовательских скриптов нужны:
- Знание HTML, JavaScript, CSS и AJAX, чтобы понимать структуру страницы и интерфейсы данных.
- Уверенная работа с Chrome DevTools: инспекция DOM, просмотр сетевых запросов, отладка.
- Надёжное знание regex для точного извлечения URL, путей атрибутов и адресов изображений.
- Умение самостоятельно разбирать проблемы и итерировать правила при изменении страниц.
📃Пример скрипта
JSON ниже на примере карточки 1688 показывает, как назначить главные изображения, SKU, детали и видео отдельным группам:
{
"id": 10009,
"name": "1688",
"ico": "https://assets.pichound.app/1688.ico",
"version": "25.1.1",
"description": "Интеллектуально извлекать HD-изображения и видео со страниц товаров 1688",
"reg": "detail.1688.com/offer",
"status": "prod",
"tags": [
"ec"
],
"examples": [
"https://detail.1688.com/offer/739240146617.html"
],
"groups": [
{
"fn": "updateGroupByIds",
"props": {
"groupName": "Главные изображения",
"groupIndex": 0,
"source": "Object.entries(window.__INIT_DATA.data).find(([k,v]) => v.componentType === '@ali/tdmod-pc-od-main-pic')[1]?.data?.offerImgList",
"ids": [
{
"attributes": []
}
]
}
},
{
"fn": "updateGroupByIds",
"props": {
"groupName": "SKU",
"groupIndex": 1,
"source": "window.__INIT_DATA.globalData.skuModel.skuProps.reduce((acc, o) => { acc.push(...o.value); return acc }, []);",
"ids": [
{
"attributes": [
"imageUrl"
],
"imageNameAttributes": [
"name"
],
"replaceUrlRules": [
{
"pattern": "!q.*$",
"replaceValue": "?sku"
}
]
}
]
}
},
{
"fn": "updateGroupByIds",
"props": {
"groupName": "Детали",
"groupIndex": 2,
"ids": [
{
"id": ".content-detail img",
"attributes": [
"dataset.lazyloadSrc",
"src"
]
}
]
}
},
{
"fn": "updateGroupByIds",
"props": {
"groupName": "Видео",
"groupIndex": 3,
"source": "[Object.entries(window.__INIT_DATA.data).find(([k,v]) => v.componentType === '@ali/tdmod-pc-od-main-pic')[1]?.data?.video]",
"ids": [
{
"attributes": [
"videoUrl"
],
"type": "VIDEO"
}
]
}
}
]
}🔑Документация API
Интерфейсы TypeScript для правил группировки, сопоставления полей и замены URL:
export interface IGroup {
_id?: string;
// Уникальный ID
id: string;
// Конфигурация: включено или нет
enable: boolean;
// Тип
type: 'custom' | 'official';
// Прочие конфигурации
config?: IGroupConfig;
// Форма
rawConfig?: string;
// Время обновления
updateAt?: number;
}
export interface IGroupConfig {
// Уникальный ID
id: number;
// Имя расширения
name: string;
// Значок расширения
ico?: string;
// Версия расширения
version?: string;
// Описание расширения
description?: string;
// Путь сопоставления по умолчанию
reg: string;
// Предскрипт
prevJS: string;
// Функция группировки расширения
groups: IRun[];
// Статус публикации
status?: string;
// Примеры
examples?: string[];
}
export interface IRun {
// Возможность функции
fn: string;
// Дополнительные параметры
props: IRunProps;
}
export interface IIds {
// Параметры Ids
id: string;
// Путь параметров
attributes?: string[];
// Тип, возможно видео
type?: string;
// Описание изображения
alt?: string;
// Правила замены URL изображений
replaceUrlRules?: IReplaceUrlRule[];
// Правила фильтрации URL изображений
filterUrlRules?: IReplaceUrlRule[];
// Параметры для получения имён изображений
imageNameAttributes?: string[];
}
export interface IReplaceUrlRule {
// Regex замены
pattern: string
// Частичное/полное совпадение regex
flags?: string
// Значение замены
replaceValue?: string
}
export interface IRunProps {
// Исходный объект, по умолчанию document.querySelectorAll, возвращает итерируемый массив
source?: string;
// Параметры Ids
ids: IIds[];
// Имя группы
groupName: string;
// Индекс группы
groupIndex: number;
}