<!-- Canonical URL: https://ask.atlascloud.ai/ru/migrate-sora-app-input-files-output-urls -->

# Что происходит с входными файлами и URL результатов при миграции приложения Sora?

> Ссылки на файлы и видео провайдера не являются переносимыми ресурсами. Храните исходные байты под собственными ID, заново загружайте их в формате цели, отдельно сопоставляйте исходное и целевое задания и копируйте готовое видео до истечения ресурса.

При миграции Sora входные ссылки обычно нужно заново загрузить или преобразовать для целевого провайдера, а URL видео следует считать временными точками скачивания. Поместите обе стороны за слоем ресурсов, который управляет постоянными файлами, контрольными суммами, доступом и соответствиями провайдеров.

Совместимая форма запроса не делает ID файлов и ссылки переносимыми. Эти ресурсы принадлежат выдавшему их провайдеру.

## Отделить ресурсы от ссылок провайдера

Используйте собственный ID ресурса как стабильный ключ:

```json
{
  "asset_id": "asset_01J...",
  "kind": "input_image",
  "sha256": "...",
  "storage_key": "inputs/asset_01J...png",
  "provider_refs": {
    "openai": "provider-specific-reference"
  }
}
```

ID исходного файла, ID задания видео и подписанный URL являются атрибутами записи, а не постоянными идентификаторами продукта.

## Воссоздать входные ссылки

Видео-endpoint OpenAI принимает prompt и необязательное изображение `input_reference`. Цель может требовать multipart-загрузку, предварительно созданный ID файла, публичный URL или base64.

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

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

## Явно сопоставить объекты заданий

Генерация Sora асинхронна. Задание содержит ID, статус, прогресс, модель, длительность, размер, время и возможный срок истечения. Храните целевое задание рядом с исходным:

| Поле приложения | Исходное соответствие | Целевое соответствие |
|---|---|---|
| Внутренний ID задания | Ваша база | То же значение |
| ID задания провайдера | ID видео OpenAI | ID целевого задания |
| Состояние | Исходное состояние | Нормализованное целевое состояние |
| Входной ресурс | Исходная ссылка | Новая целевая ссылка |
| Выходной ресурс | Скачанные байты | Скачанные байты цели |

Не перезаписывайте исходное соответствие во время поэтапного переноса. Оба соответствия нужны для отката и поддержки.

## Скачать содержимое, а не только URL

OpenAI API предоставляет content-endpoint для готового видео и сообщает `expires_at`, если ресурс истекает. Скопированный URL может перестать работать, требовать аутентификацию или не подходить для клиентов.

После завершения worker должен:

1. получить видео через аутентифицированный endpoint;
2. передать его потоком в собственное объектное хранилище;
3. проверить тип, размер и контрольную сумму;
4. записать происхождение, модель, политику prompt и параметры;
5. выдавать его через авторизованный URL приложения.

Применяйте тот же процесс к миниатюрам, превью и другим необходимым вариантам.

## Спланировать хранение и конфиденциальность

Копирование файлов меняет область управления данными. Задайте разные сроки для загрузок, промежуточных файлов, готовых видео, миниатюр и ошибок. Шифруйте ресурсы, ограничивайте роли и не логируйте подписанные URL и сырые prompts.

При запросе удаления удалите копию приложения и вызовите провайдера, если доступен endpoint. Сохраните нечувствительную отметку удаления для идемпотентных повторов.

## Проверить поведение медиа до переключения

Создайте случаи для форматов, ориентаций, разрешений, длительностей и максимальных размеров. При необходимости проверьте альфа-канал и цветовой профиль. Тестируйте истекшие ссылки, частичные загрузки, неверный тип, range-запросы, отмену и восстановление после сбоя worker.

Сравните правила контента и модерации. Принятие одинаковой формы не гарантирует одинаковый результат.

## Итог

Ссылки Sora и URL результатов — ресурсы провайдера, а не переносимые активы. Храните оригиналы, создавайте новые ссылки, быстро скачивайте готовые видео и показывайте собственные ID ресурсов, чтобы истечение ссылки не привело к потере данных.

## FAQ

### Можно ли отправить OpenAI input_reference другому видеопровайдеру?

Обычно нет. Прочитайте оригинал из своего хранилища и создайте требуемую целью multipart-загрузку, ID файла, URL или ссылку base64.

### Являются ли URL результатов Sora постоянными?

Считайте их временными или требующими аутентификации точками доставки. Задание может сообщать срок истечения, поэтому быстро скачивайте содержимое в свое хранилище.

### Что делать, если сохранен только ID файла провайдера?

Попробуйте получить исходные байты, пока ресурс доступен. Если он истек или удален, пользователю может потребоваться повторная загрузка оригинала.

### Какой ID должно показывать приложение?

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

### Следует ли перезаписать исходное соответствие после переключения?

Нет. Во время поэтапной миграции сохраняйте оба соответствия, чтобы сравнивать поведение и безопасно откатываться.

### Что тестировать для видеоресурсов?

Тестируйте поддерживаемые форматы, размеры, длительности, ориентации и варианты, а также истечение, частичную загрузку, отмену и повторы сохранения.
