Przejdź do treści głównej

Przechowywanie obrazów i wideo AI: tymczasowe adresy uploadu, krótkotrwałe wyniki i niezawodne dostarczanie przez API

SpicyAPI przechowuje uploady 1 dzień, wyniki około 14 dni, a linki około 20 minut. Poznaj ustawienia skracające te okresy lub usuwające treść.

Autor
SpicyAPI Engineering
Opublikowano
Czas czytania
11 min czytania
Zaktualizowano
Karty krajobrazowe połączone złotym światłem od szklanej misy przez chroniony szklany klosz do szklanej ramy ekspozycyjnej

Jeśli budujesz produkt do obrazów lub wideo AI bez cenzury, trzy fakty decydują o projekcie przechowywania danych. Przesłane pliki referencyjne pozostają dostępne przez 1 dzień. Media wygenerowane przez zadania API, SDK i Playground są przechowywane przez około 14 dni (media krótkich filmów Studio mają osobny limit około 60 dni), a każdy otrzymany link do pobrania działa tylko przez około 20 minut. Wszystkie te okresy są limitami maksymalnymi: możesz je jedynie skracać, dla całego konta albo pojedynczego żądania, i na żądanie niszczyć treść zakończonego zadania. Żadne ustawienie ich nie wydłuży.

Niezawodny schemat to zatem: prześlij plik bezpośrednio za pomocą krótkotrwałego biletu, zatwierdź plik, wyślij zadanie asynchroniczne z prywatną referencją spicy://, odbierz link do wyniku po zakończeniu zadania, a następnie skopiuj wynik do kontrolowanego przez siebie magazynu lub świadomie pozwól mu wygasnąć. Nie umieszczaj pliku klienta w publicznym buckecie i nie zapisuj zwróconego adresu pobierania tak, jakby był trwały.

Przesłanie referencji do SpicyAPI jest bezpłatne; zadanie generowania, które jej używa, jest rozliczane osobno. Odświeżenie linku pobierania istniejącego wyniku nie uruchamia ani nie kupuje generowania ponownie. Nowa próba generowania ma własną opłatę za model, natomiast przechowywanie, żądania i transfer kopii w Twoim buckecie podlegają cenom Twojego dostawcy magazynu.

Sprawdź zaakceptowane terminy retencji, zanim obiecasz klientom okres przechowywania; dokumentacja retencji wyjaśnia ustawienia. Praktyczny przykład lokalnej kopii znajdziesz w artykule zamiana tymczasowych mediów AI w trwałe zasoby produktu.

Najpierw wypróbuj w Playground

  1. Otwórz stronę z-image do generowania obrazów z tekstu, pozostań w Workbench, w Form, wpisz Prompt, wybierz Aspect ratio i kliknij Run model (najpierw się zaloguj; ten obraz to zwykłe płatne generowanie). Sprawdź go w Preview i zapisz przez Download.
  2. W Console otwórz Logs i znajdź to zadanie, aby sprawdzić, jak długo jego wynik jest przechowywany.
  3. Otwórz Data protection, a następnie Retention, aby zobaczyć cztery okresy i dowolny z nich skrócić.
  4. Gdy masz już własną kopię, wybierz Destroy outputs na zakończonym zadaniu, aby usunąć jego treść.

Co SpicyAPI przechowuje i jak długo

DaneOkres przechowywaniaCo dzieje się po wygaśnięciu
Przesłane pliki referencyjne1 dzień po udanym zatwierdzeniuURI spicy:// przestaje działać dla nowych zadań, w tym ponowień; obiekt jest następnie usuwany, a sprzątanie może opóźnić się o maksymalnie 24 godziny
Wygenerowane obrazy, wideo i audioOkoło 14 dni dla wyników API, SDK i Playground; około 60 dni w projekcie krótkiego filmu Spicy Studio, z opóźnieniem sprzątania do 24 godzinUsuwane z magazynu obiektowego; nie można wydać linku do pobrania
Tekst promptu i ścieżki plików wynikowych w zadaniu (input, output)30 dniOba pola są czyszczone; wiersz zadania pozostaje
Rekord zadania (ID, model, stan, kwota, znaczniki czasu)BezterminowoZachowany jako dowód rozliczenia; pola treści są czyszczone według osobnych harmonogramów
Rejestr rozliczeńTak długo, jak wymaga amerykańskie prawo podatkowe i rachunkowe (okres liczony w latach)Zachowany; usunięcie treści nie ma na niego wpływu
Logi zadań i rekordy dostarczenia webhookówCo najmniej 60 dniUsuwane
Kopie zapasowe bazy danych35 dniZastępowane rotacyjnie; usunięcie treści nie usuwa kopii zapasowych natychmiast

Skróć okres lub samodzielnie zniszcz treść

1. Okresy retencji konta. W Retention na stronie Data protection w konsoli dostępne są cztery oddzielne okresy:

OkresObejmujeDomyślnieKrótsze opcje
Generated resultsObrazy, wideo, audio i dane wynikuOkoło 14 dni1 godzina, 6 godzin, 24 godziny, 7 dni
Short-film mediaMedia krótkich filmów Studio i wyeksportowane filmyOkoło 60 dniOd 1 godziny do 30 dni
Prompt textPola tekstowe żądania30 dniTak jak wyniki, 1 godzina, 24 godziny, 7 dni
Uploaded filesPliki referencyjne1 dzieńDelete when the job ends

Okres przechowywania przesłanych plików ma trzy ważne ograniczenia:

  • Delete when the job ends: upload jest usuwany, gdy każde używające go zadanie osiągnie stan końcowy, zwykle w ciągu minuty. Nowe generowanie z tą usuniętą referencją wymaga ponownego przesłania pliku.
  • Tylko istniejące pliki: przełącznik dotyczy plików obecnych w chwili zapisania ustawienia. Późniejsze uploady zachowują obecnie standardowy termin wygaśnięcia po 1 dniu, podany w odpowiedzi zatwierdzenia.
  • Opcje 1 godziny i 24 godzin: obecnie niczego nie zmieniają; upload pozostaje użyteczny do zwróconego expiresAt.

Uwaga przed skróceniem okresu: krótsze ustawienie może objąć zadania już wykonane. Na przykład ustawienie Prompt text na 1 lub 24 godziny usuwa tekst promptu i wygenerowane wyniki wszystkich zadań zakończonych ponad dzień temu, nawet jeśli Generated results nadal wynosi 14 dni. Usuniętej treści nie można przywrócić. Najpierw pobierz to, co chcesz zachować; wydłużenie ustawienia dotyczy tylko przyszłości.

2. Osobno dla każdego żądania. Podczas tworzenia zadania wyślij nagłówek X-Spicy-Retention (w sekundach); dokumentacja retencji pokazuje żądanie. Efektywny okres to najkrótszy z okresu żądania, ustawienia konta i limitu platformy. Odczytaj zaakceptowane terminy z zadania, zamiast obiecywać żądany czas.

Nie używaj natychmiastowego usuwania w produkcie, który obiecuje dostarczenie wyniku lub zapisaną bibliotekę. Może ono usunąć wynik, zanim kopiowanie się zakończy. Zostaw po dostarczeniu margines na odzyskanie.

3. Zniszczenie treści zakończonego zadania. Po skopiowaniu potrzebnych danych lub gdy klient zażąda usunięcia, usuń twórczą treść tego zadania.

Konsola udostępnia tę samą akcję jako Destroy outputs przy zadaniu w Logs. Obowiązują trzy zasady:

  • Tylko zakończone zadania. Purge jest idempotentny względem taskId; nie wymaga Idempotency-Key. Nie anuluje generowania ani nie zwraca opłaty, a billingRetained pozostaje true.
  • Usunięcie jest planowane. contentState zmienia się na purged, a mediaDeletionPending pozostaje true do zakończenia sprzątania, zwykle w ciągu minuty. Potwierdź zakończenie, zanim powiesz klientowi, że dane zostały usunięte.
  • Odpowiedź present niczego nie usunęła. Zbadaj odpowiedź i ustawienia zachowania danych, zamiast zgłaszać zakończenie usuwania.

contentState ma wartość expired, gdy treść usunęła retencja, i purged, gdy została zniszczona na Twoje żądanie. Stan zadania expired znaczy zupełnie co innego: generowanie przekroczyło limit czasu i niczego nie wytworzyło. Ponowienie pomaga tylko w tym drugim przypadku.

Wysyłanie plików referencyjnych

Obraz, wideo lub plik audio będący referencją może trafić do zadania na trzy sposoby. Publiczny adres HTTPS musi zwracać sam plik: link do strony udostępniania (dysk chmurowy, album zdjęć, post społecznościowy) zwraca stronę internetową i zadanie kończy się błędem invalid_asset, więc pobierz plik i prześlij go zamiast tego. Mały obraz (do 1 MiB) można przesłać bezpośrednio jako URI danych base64. Pliki prywatne lub duże należy przesyłać przez SDK, CLI lub Playground, które zwracają prywatną referencję spicy:// dla zadania.

Limity uploadu: JPEG, PNG, WebP i GIF do 10 MiB; WAV, MP3, WebM, MP4 i MOV do 90 MiB i 600 sekund, przy czym model może akceptować mniej. Zachowaj oryginał, jeśli wejście będzie potrzebne ponownie po jednodniowym okresie. Backend musi tylko autoryzować upload i odnotować właściciela; klient może wysłać bajty bezpośrednio. Upload jest bezpłatny; generowanie to osobny zakup. Dokumentacja mediów opisuje przebieg.

Wyniki: odbierz, następnie skopiuj lub pozwól wygasnąć

Taśmy filmowe wyświetlane na jednym ekranie: ogólna ilustracja kilku wejść stających się jednym dostarczonym wynikiem

Manuskrypt i kadry krajobrazowe zbiegają się w jedną wyświetlaną scenę.

Każde nowe żądanie wysyłaj z własnym kluczem idempotencji, zachowuj ID zadania i odbieraj wynik przez odpytywanie lub callback. Gotowe zasoby mają podpisany url; pobieraj go bez klucza API i wysyłaj User-Agent, na przykład Mozilla/5.0, ponieważ CDN odrzuca domyślnego agenta Pythonowego urllib kodem 403, który nie oznacza wygaśnięcia linku. Zadanie succeeded może nadal zawierać zasób pending, więc sprawdzaj dalej, aż adres URL będzie gotowy. Wygasły link można odświeżyć w okresie retencji; dokumentacja mediów pokazuje jak.

Warto jawnie obsłużyć trzy stany zasobu:

Co widziszZnaczenieDziałanie
pending: true, jeszcze bez urlPlik jest nadal kopiowany do magazynuZapytaj ponownie za kilka sekund
unavailable: true, bez keyBrak zasobu platformy możliwego do pobrania: początkowe zapisanie nie powiodło się, retencja się skończyła lub Purge go usunąłOdzyskaj zweryfikowaną, wcześniej zapisaną kopię; jeśli jej nie ma, świadomie zdecyduj o nowym generowaniu
HTTP 410 z download-urlKopia platformy przekroczyła retencję albo została zniszczonaKopii platformy nie można przywrócić; użyj własnego archiwum, jeśli istnieje

Model wyłącznie tekstowy w ogóle nie ma assets, a jego tekst w output.text jest usuwany według tego samego harmonogramu, więc odczytaj go, zanim założysz, że istnieje plik.

Wyjątek bez naliczania opłaty za nieudane przechowywanie obowiązuje, gdy żadnego wyjścia zadania nie udało się początkowo zapisać. Sam stary zasób unavailable nie dowodzi prawa do zwrotu; sprawdź pierwotne rozliczenie zadania.

Callbacki zawierają Twój prompt i podpisane linki do wyników. Twój endpoint, odwrotny proxy, narzędzie śledzenia błędów i system logowania otrzymują więc materiał, który SpicyAPI samo usuwa według harmonogramu. Ukrywaj treść callbacków w logach dostępu i kopiuj w workerze. Sprawdzanie podpisów, deduplikacja i ponowienia opisane są w dokumentacji webhooków.

  • Produkt obiecuje bibliotekę, udostępnianie lub późniejszą edycję: przesyłaj wynik strumieniowo do prywatnego magazynu pod Twoją kontrolą natychmiast po stwierdzeniu sukcesu, zapisuj własne ID zasobu i wywołuj potem Purge, jeśli chcesz usunąć kopię platformy. Duże wideo przesyłaj strumieniowo, zamiast buforować całość, i zapewnij idempotentny zapis docelowy względem zadania oraz zasobu.
  • Jednorazowe dostarczenie: nie kopiuj. Pokaż wynik, poinformuj klienta, jak długo jest dostępny, i pozwól retencji lub krótkiemu X-Spicy-Retention go usunąć.

Referencja przesłana przez użytkownika nie jest materiałem marketingowym, a udany wynik nie oznacza zgody na publikację. Oznaczaj coś jako „zapisane przez klienta” dopiero po potwierdzeniu własnej kopii.

Gdy coś się nie powiedzie

EtapObjawWłaściwe odzyskanie
Tworzenie zadaniaUtracona odpowiedźWyślij ponownie zapisany korpus z tym samym kluczem idempotencji w 24-godzinnym oknie deduplikacji; zatrzymaj się w celu uzgodnienia stanu, jeśli to okno mogło minąć. Nowy klucz może utworzyć drugie zadanie i opłatę
CallbackZduplikowany, opóźniony lub brakującyDeduplikuj według request_id; odpytuj recordInfo, gdy oczekiwane zdarzenie końcowe nie nadchodzi
Kopia wynikuLink wygasł przed zakolejkowanym pobraniem lub ponownym połączeniemPobierz świeży adres URL i ponownie przesyłaj strumieniowo do tego samego klucza docelowego
Po terminie410 albo unavailableNajpierw sprawdź zweryfikowane archiwum; oznacz jako niedostępne, jeśli nie pozostała zapisana kopia

Użyteczne logi bez zachowywania twórczych materiałów

Sprawdź te miejsca pod kątem przypadkowych kopii:

  • Raporty błędów i logi dostępu: ukrywaj prompty, bilety i podpisane linki; unikaj logowania korpusów tras mediów.
  • Analityka i kolejki: używaj ID operacji, zadań i zasobów, które nie ujawniają treści, zamiast adresów URL lub nazw plików, także w magazynie niedostarczonych wiadomości.
  • Eksporty wsparcia i publiczne dostarczanie: sprawdzaj zrzuty ekranu, metadane stron i e-maile. Kieruj klientów do strony wymagającej uwierzytelnienia, która po sprawdzeniu dostępu wydaje świeży link.
  • Twój magazyn i kopie zapasowe: stosuj własną politykę usuwania. Wygasły link nie może odebrać pliku, który ktoś już pobrał.

Czego ustawienia retencji nie mogą obiecać

  • Model widzi prompt. Model wykonujący żądanie otrzymuje go w postaci jawnej, więc ustawienia SpicyAPI kontrolują wyłącznie czas przechowywania przez samo SpicyAPI. Nie wysyłaj materiału, którego nie trzeba wysyłać.
  • Purge jest asynchronicznym żądaniem usunięcia. Potwierdź zwrócony stan treści i zakończenie usuwania mediów. Sprzątanie cyklu życia magazynu i rotacja backupów mają osobne okresy; Twoje skopiowane pliki i backupy również wymagają własnych operacji usunięcia. Rekordy rozliczeniowe pozostają w każdym przypadku.

Jeśli potrzebujesz innego okresu retencji zapisanego w umowie, zgłoś to przed podpisaniem zamiast wyciągać taki wniosek ze strony dokumentacji.

Często zadawane pytania

Czy mogę użyć tymczasowego adresu uploadu jako adresu obrazu w żądaniu generowania?

Nie. Adres uploadu autoryzuje tylko bezpośredni zapis. Prześlij plik, zatwierdź go i wpisz zatwierdzone URI spicy:// w pole, które aktualny schemat modelu oznacza jako pole uploadu.

Czy mogę przechowywać wygenerowane wideo w SpicyAPI dłużej niż 14 dni?

Dla wyników API, SDK i Playground nie: ich limit wynosi około 14 dni. Media krótkich filmów Studio mają osobny limit około 60 dni. Po sukcesie skopiuj plik do własnego magazynu, aby mieć dostęp dłużej.

Czy Purge zwraca opłatę za zadanie?

Nie. Purge usuwa tylko treść; opłata i rekord zadania pozostają.

Czy webhook może całkowicie zastąpić odpytywanie?

Może być główną ścieżką, z ograniczoną kontrolą uzgodnienia dla niedostarczonych wiadomości. Za klucz obsługi przyjmij request_id dostarczenia i ID zadania.

Unikaj tego. E-maile są przekazywane dalej i archiwizowane długo po wygaśnięciu krótkotrwałego linku. Kieruj klientów do uwierzytelnionej strony, która sprawdza dostęp i wydaje świeży link.

Co powinno się stać, gdy klient usuwa zapisany wynik?

Usuń lub unieważnij własną kopię i jej ścieżkę dostarczania oraz zachowaj zapis tej operacji. Kopia platformy podlega własnemu harmonogramowi; użyj Destroy outputs, jeśli ma zniknąć wcześniej.

Sprawdzenie istniejącego zadania w kodzie

Zainstaluj spicyapi, ustaw SPICY_API_KEY i TASK_ID, a następnie uruchom to sprawdzenie tylko do odczytu. Nie tworzy generowania ani nie usuwa treści.

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))

Dokumentacja retencji opisuje ustawienia żądania i kontrakt usuwania.

Zleć wywołanie Agentowi

Zleć sprawdzenie magazynu, jeśli masz już ID zadania; nowe generowanie nie jest potrzebne.

  • CLI: npx @spicyapi/cli tasks get "$TASK_ID" odczytuje aktualne terminy. Zobacz przewodnik CLI.
  • MCP: poproś spicyapi_task_get o sprawdzenie zadania. Używaj spicyapi_task_purge dopiero po wyraźnym zatwierdzeniu zniszczenia jego treści; przewodnik MCP opisuje potwierdzenie.
  • Skill: po npx skills add spicyapi-ai/spicy-skill poproś $spicyapi o sprawdzenie retencji zadania i wyjaśnienie, co wygaśnie. Zobacz przewodnik Skill.

Także w językach English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano

Wypróbuj samodzielnie

Płacisz tylko za to, co uruchomisz — bez planów i subskrypcji.

Zrobione w MiniMax H3 · ByteDance Seedance 2.0 Fast