Перейти к основному контенту

Хранение изображений и видео ИИ: временные URL загрузки, краткосрочные результаты и надёжная передача через API

SpicyAPI хранит загрузки 1 день, результаты около 14 дней, а ссылки около 20 минут. Узнайте, какие настройки сокращают сроки или удаляют содержимое.

Автор
SpicyAPI Engineering
Опубликовано
Время чтения
11 мин чтения
Обновлено
Карточки пейзажей, соединённые золотым светом от стеклянной чаши через защищённый стеклянный колпак к стеклянной выставочной рамке

Если вы создаёте продукт для изображений или видео ИИ без цензуры, архитектуру хранения определяют три факта. Загруженные референсные файлы доступны 1 день. Медиа, созданные задачами API, SDK и Playground, хранятся около 14 дней (у медиа короткометражных фильмов Studio отдельный предел — около 60 дней), а каждая полученная ссылка для скачивания работает только около 20 минут. Это максимальные сроки: вы можете только сократить их, для всей учётной записи или одного запроса, и по требованию уничтожить содержимое завершённой задачи. Ни одна настройка не продлевает эти пределы.

Надёжная схема такова: загрузить файл напрямую с краткосрочным разрешением на загрузку, подтвердить файл, отправить асинхронную задачу с приватной ссылкой spicy://, получить ссылку на результат после завершения и либо скопировать результат в подконтрольное вам хранилище, либо намеренно дать ему истечь. Не помещайте загруженные клиентом файлы в публичный бакет и не сохраняйте возвращённый URL скачивания как постоянный.

Загрузка референса в SpicyAPI бесплатна; использующая его задача генерации оплачивается отдельно. Обновление ссылки для скачивания существующего результата не запускает и не оплачивает генерацию повторно. Новая попытка генерации имеет отдельную стоимость модели, а хранение, запросы и передача копии в вашем бакете оплачиваются по тарифам вашего провайдера хранения.

Прежде чем обещать клиентам срок хранения, прочитайте принятые системой сроки; документация по хранению объясняет настройки. Практический пример локальной копии приведён в статье как превратить временные медиа ИИ в долговечные ресурсы продукта.

Сначала попробуйте в Playground

  1. Откройте страницу z-image для генерации изображений из текста, оставайтесь в Workbench, в Form, введите Prompt, выберите Aspect ratio и нажмите Run model (сначала войдите в систему; это изображение — обычная платная генерация). Проверьте его в Preview и сохраните через Download.
  2. В Console откройте Logs и найдите эту задачу, чтобы узнать срок хранения её результата.
  3. Откройте Data protection, затем Retention, чтобы увидеть четыре срока и сократить любой из них.
  4. Когда у вас есть собственная копия, выберите Destroy outputs у завершённой задачи, чтобы удалить её содержимое.

Что хранит SpicyAPI и как долго

ДанныеСрок храненияЧто происходит по истечении
Загруженные референсные файлы1 день после успешного подтвержденияURI spicy:// перестаёт работать для новых задач, включая повторные попытки; затем объект удаляется, причём очистка может задержаться до 24 часов
Сгенерированные изображения, видео и аудиоОколо 14 дней для результатов API, SDK и Playground; около 60 дней внутри проекта короткометражного фильма Spicy Studio, с задержкой очистки до 24 часовУдаляются из объектного хранилища; ссылку для скачивания выдать невозможно
Текст промпта и пути файлов результата в задаче (input, output)30 днейОба поля очищаются; строка задачи остаётся
Запись задачи (ID, модель, состояние, сумма, временные метки)БессрочноСохраняется как доказательство расчётов; поля содержимого очищаются по отдельному расписанию
Реестр расчётовСтолько, сколько требует налоговое и бухгалтерское законодательство США (срок исчисляется годами)Сохраняется; удаление содержимого на него не влияет
Журналы задач и записи доставки webhookНе менее 60 днейУдаляются
Резервные копии базы данных35 днейЗаменяются по ротации; удаление содержимого не стирает резервные копии мгновенно

Сократите срок или уничтожьте содержимое самостоятельно

1. Сроки хранения учётной записи. В Retention на странице Data protection в консоли есть четыре отдельных срока:

СрокЧто охватываетПо умолчаниюБолее короткие варианты
Generated resultsИзображения, видео, аудио и данные результатаОколо 14 дней1 час, 6 часов, 24 часа, 7 дней
Short-film mediaМедиа короткометражных фильмов Studio и экспортированные фильмыОколо 60 днейОт 1 часа до 30 дней
Prompt textТекстовые поля запроса30 днейКак у результатов, 1 час, 24 часа, 7 дней
Uploaded filesРеференсные файлы1 деньDelete when the job ends

У срока хранения загруженных файлов три важных ограничения:

  • Delete when the job ends: загрузка удаляется, когда все использующие её задачи достигнут конечного состояния, обычно в течение минуты. Для новой генерации с этим удалённым референсом потребуется ещё одна загрузка.
  • Только существующие файлы: переключатель применяется к файлам, существующим на момент сохранения настройки. Последующие загрузки сейчас сохраняют стандартный срок истечения в 1 день, указанный в ответе на подтверждение.
  • Варианты 1 час и 24 часа: сейчас ничего не меняют; загрузка остаётся доступной до возвращённого expiresAt.

Предупреждение перед сокращением срока: более короткая настройка может затронуть уже выполненные задачи. Например, установка Prompt text в 1 или 24 часа очищает текст промпта и сгенерированные результаты всех задач, завершённых более дня назад, даже если Generated results остаётся равным 14 дням. Удалённое содержимое восстановить нельзя. Сначала скачайте то, что хотите сохранить; увеличение срока в настройке влияет только на будущее.

2. Для каждого запроса отдельно. При создании задачи отправьте заголовок X-Spicy-Retention (в секундах); документация по хранению показывает запрос. Фактический срок — самый короткий из указанного в запросе, настройки учётной записи и предела платформы. Читайте принятые сроки из задачи, а не обещайте запрошенную длительность.

Не используйте немедленное удаление для продукта, который обещает доставку или сохранённую библиотеку. Оно может удалить результат до завершения вашей копии. Оставьте после доставки запас времени для восстановления.

3. Уничтожение содержимого завершённой задачи. Скопировав необходимое или получив запрос клиента на удаление, удалите творческое содержимое этой задачи.

В консоли та же операция доступна как Destroy outputs у задачи в Logs. Действуют три правила:

  • Только завершённые задачи. Purge идемпотентен по taskId; Idempotency-Key не нужен. Он не отменяет генерацию и не возвращает списанную сумму, а billingRetained остаётся true.
  • Удаление планируется. contentState становится purged, а mediaDeletionPending остаётся true до окончания очистки, обычно в течение минуты. Подтвердите завершение, прежде чем сообщать клиенту, что байты удалены.
  • Ответ present ничего не удалил. Изучите ответ и настройки сохранения, вместо того чтобы сообщать о завершённом удалении.

contentState равен expired, когда содержимое удалено по сроку хранения, и purged, когда вы уничтожили его сами. Состояние задачи expired означает совсем другое: генерация превысила лимит времени и ничего не создала. Повторная попытка помогает только во втором случае.

Отправка референсных файлов

Референсное изображение, видео или аудиофайл можно передать задаче тремя способами. Публичный URL HTTPS должен возвращать сам файл: ссылка на страницу общего доступа (облачный диск, фотоальбом, публикация в соцсети) возвращает веб-страницу, и задача завершается ошибкой invalid_asset, поэтому скачайте файл и загрузите его. Небольшое изображение (до 1 MiB) можно включить напрямую как URI данных base64. Приватные или большие файлы следует загружать через SDK, CLI или Playground, которые возвращают приватную ссылку spicy:// для задачи.

Лимиты загрузки: JPEG, PNG, WebP и GIF до 10 MiB; WAV, MP3, WebM, MP4 и MOV до 90 MiB и 600 секунд, причём модель может принимать меньше. Сохраните оригинал, если он потребуется повторно после однодневного срока. Вашему бэкенду достаточно разрешить загрузку и записать владельца; клиент может передать байты напрямую. Загрузка бесплатна; генерация оплачивается отдельно. Документация по медиа описывает процесс.

Результаты: получить, затем скопировать или дать истечь

Киноплёнки проецируются на один экран: условная иллюстрация нескольких входных материалов, превращающихся в один доставленный результат

Рукопись и пейзажные кадры сходятся в одну проецируемую сцену.

Отправляйте каждый новый запрос со своим ключом идемпотентности, сохраняйте ID задачи и получайте результат через опрос или обратный вызов. Готовые ресурсы содержат подписанный url; скачивайте по нему без ключа API и передавайте User-Agent, например Mozilla/5.0, поскольку CDN отклоняет стандартный агент Python urllib с кодом 403, который не означает, что ссылка истекла. Задача succeeded может всё ещё содержать ресурс pending, поэтому продолжайте проверять, пока URL не будет готов. Истёкшую ссылку можно обновить в пределах срока хранения; документация по медиа показывает как.

Три состояния ресурса стоит обрабатывать явно:

Что вы видитеЗначениеЧто делать
pending: true, пока нет urlФайл ещё копируется в хранилищеЗапросить снова через несколько секунд
unavailable: true, нет keyНа платформе нет доступного ресурса: первоначальное сохранение не удалось, срок хранения закончился или Purge удалил егоВосстановить проверенную сохранённую копию; если её нет, явно решить, нужна ли новая генерация
HTTP 410 от download-urlКопия платформы превысила срок хранения или уничтоженаКопию платформы восстановить нельзя; использовать свой архив, если он есть

У исключительно текстовой модели вообще нет assets, а её текст в output.text стирается по тому же расписанию, поэтому прочитайте его, прежде чем предполагать наличие файла.

Исключение без списания платы при ошибке хранения действует, когда ни один результат задачи не удалось сохранить первоначально. Сам по себе старый ресурс unavailable не подтверждает право на возврат; проверьте первоначальный расчёт задачи.

Обратные вызовы содержат ваш промпт и подписанные ссылки на результаты. Ваш эндпоинт, обратный прокси, система отслеживания ошибок и цепочка журналирования получают материалы, которые само SpicyAPI стирает по расписанию. Исключайте тела обратных вызовов из журналов доступа и выполняйте копирование в фоновом обработчике. Проверка подписи, дедупликация и повторные попытки описаны в документации webhook.

  • Продукт обещает библиотеку, общий доступ или последующее редактирование: потоково перенесите результат в приватное подконтрольное вам хранилище сразу после успеха, запишите собственный ID ресурса и затем вызовите Purge, если хотите удалить копию платформы. Передавайте большое видео потоком, а не буферизуйте целиком, и сделайте запись в целевое хранилище идемпотентной по паре задача–ресурс.
  • Однократная доставка: не копируйте. Покажите результат, сообщите клиенту срок доступности и позвольте сроку хранения или короткому X-Spicy-Retention удалить его.

Загруженный пользователем референс — не маркетинговый ресурс, а успешный результат не означает согласия на публикацию. Отмечайте материал как «сохранён клиентом» только после подтверждения собственной копии.

Если что-то не работает

ЭтапСимптомПравильное восстановление
Создание задачиОтвет потерянПовторить сохранённое тело с тем же ключом идемпотентности в пределах 24-часового окна дедупликации; остановиться для сверки состояния, если окно могло истечь. Новый ключ может создать вторую задачу и списание
Обратный вызовДубликат, задержка или пропускУдалять дубликаты по request_id; опрашивать recordInfo, если ожидаемое конечное событие так и не пришло
Копия результатаСсылка истекла до получения из очереди или повторного соединенияПолучить свежий URL и снова передать потоком на тот же ключ назначения
После срока410 или unavailableСначала проверить подтверждённый архив; отметить как недоступное, если сохранённой копии не осталось

Полезные журналы без хранения творческих материалов

Проверьте эти пути появления случайных копий:

  • Отчёты об ошибках и журналы доступа: скрывайте промпты, разрешения на загрузку и подписанные ссылки; избегайте журналирования тел медиамаршрутов.
  • Аналитика и очереди: используйте непрозрачные ID операций, задач и ресурсов вместо URL или имён файлов, в том числе в хранилище недоставленных сообщений.
  • Выгрузки поддержки и публичная доставка: проверяйте снимки экрана, метаданные страниц и письма. Направляйте клиентов на страницу с аутентификацией, которая выдаёт свежую ссылку после проверки доступа.
  • Ваше хранилище и резервные копии: применяйте собственную политику удаления. Истёкшая ссылка не может отозвать файл, который уже скачали.

Чего настройки хранения не могут обещать

  • Модель видит промпт. Модель, выполняющая запрос, получает его открытым текстом, поэтому настройки SpicyAPI управляют только сроком хранения самим SpicyAPI. Не отправляйте лишние материалы.
  • Purge — асинхронный запрос удаления. Подтвердите возвращённое состояние содержимого и завершение удаления медиа. Очистка по жизненному циклу хранилища и ротация резервных копий имеют отдельные сроки; вашим скопированным файлам и резервным копиям тоже нужны собственные операции удаления. Записи расчётов остаются в любом случае.

Если нужен иной срок хранения, закреплённый в договоре, поднимите вопрос до подписания, а не выводите его из страницы документации.

Частые вопросы

Можно ли использовать временный URL загрузки как URL изображения в запросе генерации?

Нет. URL загрузки разрешает только прямую запись. Загрузите, подтвердите и поместите подтверждённый URI spicy:// в поле, которое текущая схема модели отмечает как поле загрузки.

Можно ли хранить сгенерированное видео в SpicyAPI дольше 14 дней?

Для результатов API, SDK и Playground — нет: их предел около 14 дней. У медиа короткометражных фильмов Studio отдельный предел около 60 дней. Для более долгого доступа скопируйте файл в своё хранилище после успеха.

Возвращает ли Purge плату за задачу?

Нет. Purge удаляет только содержимое; списание и запись задачи остаются.

Может ли webhook полностью заменить опрос?

Он может быть основным путём с ограниченной проверкой сверки для пропущенных доставок. Используйте request_id доставки и ID задачи как ключи обработчика.

Можно ли вставить ссылку на результат в письмо?

Избегайте этого. Письма пересылаются и хранятся ещё долго после истечения краткосрочной ссылки. Направляйте клиентов на страницу с аутентификацией, которая проверяет доступ и выдаёт свежую ссылку.

Что должно произойти, когда клиент удаляет сохранённый результат?

Удалите или отзовите свою копию и путь её доставки и сохраните запись о выполнении. Копия платформы следует своему расписанию; используйте Destroy outputs, если её нужно удалить раньше.

Проверить существующую задачу из кода

Установите spicyapi, задайте SPICY_API_KEY и TASK_ID, затем выполните эту проверку только для чтения. Она не создаёт генерацию и не удаляет содержимое.

python
import json
import os
from spicyapi import SpicyClient

client = SpicyClient()
task = client.get_task(os.environ["TASK_ID"])
print(json.dumps({"taskId": task["taskId"], "state": task["state"],
    "contentState": task.get("contentState"), "retention": task.get("retention"),
    "mediaDeletionPending": task.get("mediaDeletionPending")}, indent=2))

Справочник по хранению описывает настройки запроса и контракт удаления.

Поручите вызов Agent

Поручите проверку хранения, если у вас уже есть ID задачи; новая генерация не требуется.

  • CLI: npx @spicyapi/cli tasks get "$TASK_ID" считывает текущие сроки. См. руководство CLI.
  • MCP: попросите spicyapi_task_get проверить эту задачу. Используйте spicyapi_task_purge только после явного одобрения уничтожения её содержимого; руководство MCP объясняет подтверждение.
  • Skill: после npx skills add spicyapi-ai/spicy-skill попросите $spicyapi проверить сроки хранения задачи и объяснить, что истечёт. См. руководство Skill.

Другие языки English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Italiano · Polski