Generowanie filmów za pomocą Veo 3

Veo 3 to najnowocześniejszy model Google do generowania 8-sekundowych filmów w rozdzielczości 720p o wysokiej jakości na podstawie promptów tekstowych. Generuje realistyczne filmy z dźwiękiem. Veo 3 doskonale radzi sobie z różnymi stylami wizualnymi i filmowymi. Wybierz poniżej przykład, aby zobaczyć, jak wygenerować film z dialogami, kinowym realizmem lub kreatywną animacją.

Generowanie filmów na podstawie obrazów

Poniższy kod pokazuje, jak wygenerować obraz za pomocą Imagen, a następnie użyć go jako klatki początkowej filmu.

Python

import time
from google import genai

client = genai.Client()

prompt = "Panning wide shot of a calico kitten sleeping in the sunshine"

# Step 1: Generate an image with Imagen
imagen = client.models.generate_images(
    model="imagen-3.0-generate-002",
    prompt=prompt,
)

# Step 2: Generate video with Veo 2 using the image
operation = client.models.generate_videos(
    model="veo-2.0-generate-001",
    prompt=prompt,
    image=imagen.generated_images[0].image,
)

# Poll the operation status until the video is ready
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the video
video = operation.response.generated_videos[0]
client.files.download(file=video.video)
video.video.save("veo2_with_image_input.mp4")
print("Generated video saved to veo2_with_image_input.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "Panning wide shot of a calico kitten sleeping in the sunshine";

// Step 1: Generate an image with Imagen
const imagenResponse = await ai.models.generateImages({
  model: "imagen-3.0-generate-002",
  prompt: prompt,
});

// Step 2: Generate video with Veo 2 using the image
let operation = await ai.models.generateVideos({
  model: "veo-2.0-generate-001", // Use Veo 2
  prompt: prompt,
  image: {
    imageBytes: imagenResponse.generatedImages[0].image.imageBytes,
    mimeType: "image/png",
  },
});

// Poll the operation status until the video is ready
while (!operation.done) {
  console.log("Waiting for video generation to complete...")
  await new Promise((resolve) => setTimeout(resolve, 10000));
  operation = await ai.operations.getVideosOperation({
    operation: operation,
  });
}

// Download the video
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "veo2_with_image_input.mp4",
});
console.log(`Generated video saved to veo2_with_image_input.mp4`);

Przeczytaj

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := "Panning wide shot of a calico kitten sleeping in the sunshine"

    // Step 1: Generate an image with Imagen
    imagenResponse, err := client.Models.GenerateImages(
        ctx,
        "imagen-3.0-generate-002",
        prompt,
        nil, // GenerateImagesConfig
    )
    if err != nil {
        log.Fatal(err)
    }

    // Step 2: Generate video with Veo 2 using the image
    operation, err := client.Models.GenerateVideos(
        ctx,
        "veo-2.0-generate-001",
        prompt,
        imagenResponse.GeneratedImages[0].Image, // Use generated image
        nil, // GenerateVideosConfig
    )
    if err != nil {
        log.Fatal(err)
    }

    // Poll the operation status until the video is ready
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the video
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "veo2_with_image_input.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname) 
}

Parametry i specyfikacje generowania filmów

Są to parametry, które możesz ustawić w żądaniu interfejsu API, aby kontrolować proces generowania filmu.

Parametr Opis Veo 3 (wersja testowa) Veo 2 (stabilna)
prompt Tekstowy opis filmu. Obsługuje wskazówki audio. string string
negativePrompt Tekst opisujący, czego należy unikać w filmie. string string
image Początkowy obraz do animacji. Nieobsługiwane Image obiekt
aspectRatio Format obrazu filmu. "16:9" "16:9", "9:16"
personGeneration Określa generowanie osób. "allow_all" "allow_all", "allow_adult", "dont_allow"

Możesz dostosować generowanie filmów, ustawiając parametry w prośbie. Możesz na przykład użyć symbolu negativePrompt, aby naprowadzić model.

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

operation = client.models.generate_videos(
    model="veo-3.0-generate-preview",
    prompt="A cinematic shot of a majestic lion in the savannah.",
    config=types.GenerateVideosConfig(negative_prompt="cartoon, drawing, low quality"),
)

# Poll the operation status until the video is ready
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video)
generated_video.video.save("parameters_example.mp4")
print("Generated video saved to parameters_example.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

let operation = await ai.models.generateVideos({
  model: "veo-3.0-generate-preview",
  prompt: "A cinematic shot of a majestic lion in the savannah.",
  config: {
    aspectRatio: "16:9",
    negativePrompt: "cartoon, drawing, low quality"
  },
});

// Poll the operation status until the video is ready
while (!operation.done) {
  console.log("Waiting for video generation to complete...")
  await new Promise((resolve) => setTimeout(resolve, 10000));
  operation = await ai.operations.getVideosOperation({
    operation: operation,
  });
}

// Download the generated video
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "parameters_example.mp4",
});
console.log(`Generated video saved to parameters_example.mp4`);

Przeczytaj

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    videoConfig := &genai.GenerateVideosConfig{
        AspectRatio: "16:9",
        NegativePrompt: "cartoon, drawing, low quality",
    }

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.0-generate-preview",
        "A cinematic shot of a majestic lion in the savannah.",
        nil,
        videoConfig,
    )

    // Poll the operation status until the video is ready
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "parameters_example.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response. 
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.0-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A cinematic shot of a majestic lion in the savannah."
      }
    ],
    "parameters": {
      "aspectRatio": "16:9",
      "negativePrompt": "cartoon, drawing, low quality"
    }
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o parameters_example.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Obsługa operacji asynchronicznych

Generowanie filmów jest zadaniem wymagającym dużej mocy obliczeniowej. Gdy wyślesz żądanie, interfejs API rozpocznie długotrwałe zadanie i natychmiast zwróci obiekt operation. Następnie musisz wysyłać zapytania, dopóki film nie będzie gotowy. Wskazuje na to stan done.

Podstawą tego procesu jest pętla sondowania, która okresowo sprawdza stan zadania.

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

# After starting the job, you get an operation object
operation = client.models.generate_videos(
    model="veo-3.0-generate-preview",
    prompt="A cinematic shot of a majestic lion in the savannah.",
)

# Alternatively, you can use the operation.name to get the operation
operation = types.GenerateVideosOperation(name=operation.name)

# This loop checks the job status every 10 seconds
while not operation.done:
    time.sleep(10)
    # Refresh the operation object to get the latest status
    operation = client.operations.get(operation)

# Once done, the result is in operation.response
# ... process and download your video ...

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

// After starting the job, you get an operation object
let operation = await ai.models.generateVideos({
  model: "veo-3.0-generate-preview",
  prompt: "A cinematic shot of a majestic lion in the savannah.",
});

// Alternatively, you can use the operation.name to get the operation
// operation = types.GenerateVideosOperation(name=operation.name)

// This loop checks the job status every 10 seconds
while (!operation.done) {
    await new Promise((resolve) => setTimeout(resolve, 1000));
    // Refresh the operation object to get the latest status
    operation = await ai.operations.getVideosOperation({ operation });
}

// Once done, the result is in operation.response
// ... process and download your video ...

Funkcje modelu

Funkcja Opis Veo 3 (wersja testowa) Veo 2 (stabilna)
Dźwięk Natywnie generuje dźwięk z filmu. ✔️ Zawsze włączony ❌ Tylko cichy
Rodzaje danych wejściowych Typ danych wejściowych użytych do generowania. Tekst na film Tekst na film, obraz na film
Rozdzielczość Rozdzielczość wyjściowa filmu. 720p 720p
Liczba klatek Liczba klatek na sekundę wyjściowego filmu. 24 kl./s 24 kl./s
Czas trwania filmu Długość wygenerowanego filmu. 8 sekund 5–8 sekund
Filmy na żądanie Liczba filmów wygenerowanych na żądanie. 1 1 lub 2
Stan i szczegóły Dostępność modelu i dalsze szczegóły. Podgląd Stabilna

Więcej ograniczeń dotyczących korzystania z Veo znajdziesz na stronach Modele, CenyLimity.

Przewodnik po promptach w Veo

Ta sekcja zawiera przykłady filmów, które możesz utworzyć za pomocą Veo, oraz pokazuje, jak modyfikować prompty, aby uzyskać różne wyniki.

Filtry bezpieczeństwa

Veo stosuje w Gemini filtry bezpieczeństwa, aby mieć pewność, że wygenerowane filmy i przesłane zdjęcia nie zawierają obraźliwych treści. Prompty, które naruszają nasze warunki i wytyczne, są blokowane.

Prompting for Audio (Veo 3)

W przypadku Veo 3 możesz podawać wskazówki dotyczące efektów dźwiękowych, szumu otoczenia i dialogów. Model uwzględnia niuanse tych wskazówek, aby wygenerować zsynchronizowaną ścieżkę dźwiękową.

  • Dialog: używaj cudzysłowów, aby oznaczyć konkretne wypowiedzi. (Przykład: „To musi być klucz” – mruknął).
  • Efekty dźwiękowe: dokładnie opisz dźwięki. (Przykład: głośny pisk opon, ryk silnika).
  • Szum otoczenia: opisz dźwięki otoczenia. (Przykład: w tle słychać cichy, upiorny szum).

Te filmy pokazują, jak za pomocą promptów generować dźwięk w Veo 3 z coraz większą ilością szczegółów.

Prompt Wygenerowane dane wyjściowe
Więcej szczegółów (dialogi i otoczenie)
 Zbliżenie na 2 osoby wpatrujące się w tajemniczy rysunek na ścianie, przy migoczącym świetle latarki. – To musi być klucz – mruknął, odrysowując wzór. „Ale co to znaczy?” zapytała z zaciekawieniem, przechylając głowę. Wilgotny kamień, misternie rzeźbione detale, ukryte symbole. W tle słychać cichy, niesamowity szum.
Poszukiwacze skarbów w jaskini.
Mniej szczegółów (dialog)
Kemping (animacja poklatkowa): turysta: „Teraz jestem jednością z naturą!”. Miś: „Natura wolałaby trochę przestrzeni osobistej”.
Poszukiwacze skarbów w jaskini.

Wypróbuj te prompty, aby usłyszeć dźwięk. Wypróbuj Veo 3

Podstawowe informacje o pisaniu promptów

Dobre prompty są opisowe i jasne. Aby w pełni wykorzystać możliwości Veo, zacznij od określenia głównego pomysłu, dopracuj go, dodając słowa kluczowe i modyfikatory, a także włącz do promptów terminologię związaną z wideo.

W prompcie powinny się znaleźć te elementy:

  • Temat: obiekt, osoba, zwierzę lub sceneria, które chcesz umieścić w filmie, np. pejzaż miejski, przyroda, pojazdy lub szczenięta.
  • Działanie: co robi osoba (np. idzie, biegnie lub obraca głowę).
  • Styl: określ kierunek kreatywny, używając słów kluczowych związanych z określonym stylem filmowym, np. science fiction, horror, film noir lub stylem animacji, np. kreskówka.
  • Położenie i ruch kamery: [opcjonalnie] steruj położeniem i ruchem kamery za pomocą określeń takich jak widok z lotu ptaka, na poziomie oczu, zdjęcie z góry, zdjęcie z ruchu lub z perspektywy żabiej.
  • Kompozycja: [opcjonalnie] sposób kadrowania ujęcia, np. szerokie ujęcie, zbliżenie, jedno ujęcie lub dwa ujęcia.
  • Ostrość i efekty obiektywu: [opcjonalnie] użyj terminów takich jak płytka ostrość, głęboka ostrość, miękka ostrość, obiektyw makro i obiektyw szerokokątny, aby uzyskać określone efekty wizualne.
  • Ambiance: [Opcjonalnie] Jak kolor i światło wpływają na scenę, np. niebieskie odcienie, noc lub ciepłe odcienie.

Więcej wskazówek dotyczących pisania promptów

  • Używaj opisowego języka: używaj przymiotników i przysłówków, aby przedstawić Veo jasny obraz.
  • Uwydatnij szczegóły twarzy: określ szczegóły twarzy jako główny element zdjęcia, np. używając w prompcie słowa portret.

Bardziej szczegółowe strategie tworzenia promptów znajdziesz w artykule wprowadzającym do projektowania promptów.

Przykładowe prompty i dane wyjściowe

W tej sekcji znajdziesz kilka promptów, które pokazują, jak szczegółowe opisy mogą poprawić jakość każdego filmu.

Sople

Z tego filmu dowiesz się, jak w prompcie wykorzystać elementy podstaw pisania promptów.

Prompt Wygenerowane dane wyjściowe
Zbliżenie (kompozycja) topniejących sopli (obiekt) na zamarzniętej (kontekst) skalnej ścianie (kontekst) w chłodnych, niebieskich odcieniach (atmosfera), z przybliżeniem (ruch kamery) zachowującym szczegóły kropel wody (działanie). Kapiące sople na niebieskim tle.

Mężczyzna rozmawia przez telefon

Te filmy pokazują, jak możesz poprawiać prompt, dodając coraz bardziej szczegółowe informacje, aby Veo dostosował wynik do Twoich potrzeb.

Prompt Wygenerowane dane wyjściowe
Mniej szczegółów
 Kamera przesuwa się, aby pokazać zbliżenie na zdesperowanego mężczyznę w zielonym prochowcu. Dzwoni z telefonu ściennego z tarczą, który jest oświetlony zielonym neonem. Wygląda to jak scena z filmu.
Mężczyzna rozmawia przez telefon.
Więcej szczegółów
Zbliżenie w stylu filmowym przedstawia zdesperowanego mężczyznę w spranym zielonym prochowcu, który wybiera numer na telefonie z tarczą zamontowanym na szorstkiej ceglanej ścianie, oświetlonej upiornym blaskiem zielonego neonu. Kamera zbliża się do niego, ukazując napięcie w jego szczęce i rozpacz na twarzy, gdy próbuje wykonać połączenie. Płytka głębia ostrości skupia się na jego zmarszczonym czole i czarnym telefonie obrotowym, rozmywając tło w morze neonowych kolorów i niewyraźnych cieni, co tworzy poczucie pilności i izolacji.
Mężczyzna rozmawia przez telefon

Irbis śnieżny

Prompt Wygenerowane dane wyjściowe
Prosty prompt:
Urocze stworzenie z futrem podobnym do futra irbisa śnieżnego idzie przez zimowy las, render w stylu kreskówki 3D.
Irbis śnieżny jest ospały.
Szczegółowy prompt:
Utwórz krótką animowaną scenę 3D w radosnym stylu kreskówkowym. Urocze stworzenie z futrem podobnym do futra pantery śnieżnej, dużymi, wyrazistymi oczami i przyjazną, zaokrągloną sylwetką radośnie kroczy przez fantastyczny zimowy las. Scena powinna przedstawiać zaokrąglone, pokryte śniegiem drzewa, delikatnie padające płatki śniegu i ciepłe światło słoneczne przebijające się przez gałęzie. Skoczne ruchy i szeroki uśmiech stworzenia powinny wyrażać czystą radość. Postaw na optymistyczny, ciepły ton, jasne, wesołe kolory i zabawne animacje.
Irbis śnieżny biegnie szybciej.

Przykłady według elementów tekstu

Te przykłady pokazują, jak doprecyzować prompty za pomocą poszczególnych elementów podstawowych.

Temat i kontekst

Określ główny obiekt (temat) oraz tło lub otoczenie (kontekst).

Prompt Wygenerowane dane wyjściowe
Render architektoniczny białego betonowego budynku mieszkalnego o płynnych, organicznych kształtach, płynnie łączącego się z bujną zielenią i futurystycznymi elementami. Obiekt zastępczy.
Satelita unoszący się w kosmosie z księżycem i gwiazdami w tle. Satelita unoszący się w atmosferze.

Działanie

Określ, co robi osoba (np. idzie, biegnie lub obraca głowę).

Prompt Wygenerowane dane wyjściowe
Szeroki kadr przedstawiający kobietę spacerującą po plaży. Jest zadowolona i zrelaksowana, patrzy w stronę horyzontu o zachodzie słońca. Zachód słońca jest absolutnie piękny.

Styl

Dodaj słowa kluczowe, aby skierować generowanie w stronę określonej estetyki (np. surrealistycznej, vintage, futurystycznej, film noir).

Prompt Wygenerowane dane wyjściowe
Film noir, mężczyzna i kobieta idą ulicą, tajemnica, filmowy, czarno-biały. Styl film noir jest absolutnie piękny.

Ruch kamery i kompozycja

Określ, jak porusza się kamera (ujęcie z perspektywy pierwszej osoby, widok z lotu ptaka, widok z drona śledzącego) i jak jest kadrowane ujęcie (szeroki plan, zbliżenie, ujęcie z dołu).

Prompt Wygenerowane dane wyjściowe
Zdjęcie z perspektywy pierwszej osoby przedstawiające zabytkowy samochód jadący w deszczu w Kanadzie w nocy, w stylu filmowym. Zachód słońca jest absolutnie piękny.
Ekstremalne zbliżenie oka, w którym odbija się miasto. Zachód słońca jest absolutnie piękny.

Atmosfera

Palety kolorów i oświetlenie wpływają na nastrój. Spróbuj użyć terminów takich jak „stonowane pomarańczowe ciepłe odcienie”, „naturalne światło”, „wschód słońca” lub „chłodne niebieskie odcienie”.

Prompt Wygenerowane dane wyjściowe
Zbliżenie na dziewczynkę trzymającą uroczego szczeniaka golden retrievera w parku, w promieniach słońca. Szczeniak w ramionach dziewczynki.
Filmowe zbliżenie na smutną kobietę jadącą autobusem w deszczu, chłodne niebieskie odcienie, smutny nastrój. Kobieta jadąca autobusem, która jest smutna.

Używanie obrazów referencyjnych do generowania filmów

Możesz ożywiać obrazy, korzystając z funkcji przekształcania obrazów w filmy w Veo.

Prompt Wygenerowane dane wyjściowe
Obraz wejściowy (wygenerowany przez Imagen)
Królik z czekoladą.
Królik ucieka.
Film wyjściowy (wygenerowany przez Veo 2)
Królik ucieka.
Królik ucieka.

Negatywne prompty

Wykluczone prompty określają elementy, których nie chcesz widzieć w filmie.

  • ❌ Nie używaj języka instruktażowego, np. nie lub nie. (np. „Brak ścian”).
  • ✅ Opisz, czego nie chcesz zobaczyć. (np. „ściana, rama”).
Prompt Wygenerowane dane wyjściowe
Bez negatywnego prompta:
wygeneruj krótką, stylizowaną animację przedstawiającą duże, samotne drzewo dębu, którego liście są gwałtownie poruszane przez silny wiatr... [truncated]
Drzewo z użyciem słów.
Z negatywnym promptem:
[Ten sam prompt]

Negatywny prompt: tło miejskie, struktury stworzone przez człowieka, ciemna, burzowa lub groźna atmosfera.
Drzewo bez wykluczających słów.

Formaty obrazu

Veo umożliwia określenie formatu obrazu filmu.

Prompt Wygenerowane dane wyjściowe
Panoramiczny (16:9)
Utwórz film z widokiem z drona śledzącego mężczyznę jadącego czerwonym kabrioletem w Palm Springs w latach 70. XX wieku. Ciepłe światło słoneczne, długie cienie.
Mężczyzna prowadzący czerwony kabriolet w Palm Springs w stylu lat 70.
Pionowa (9:16 – tylko Veo 2)
Utwórz film przedstawiający płynny ruch majestatycznego hawajskiego wodospadu w bujnym lesie deszczowym. Skup się na realistycznym przepływie wody, szczegółowych liściach i naturalnym oświetleniu, aby przekazać spokój. Uchwyć szumiącą wodę, mglistą atmosferę i plamki światła słonecznego przenikające przez gęste korony drzew. Użyj płynnych, filmowych ruchów kamery, aby pokazać wodospad i jego otoczenie. Postaw na spokojny, realistyczny ton, który przeniesie widza w spokojne piękno hawajskiego lasu deszczowego.
Majestatyczny hawajski wodospad w bujnym lesie deszczowym.

Ograniczenia

  • Czas oczekiwania na żądanie: min.: 11 sekund; maks.: 6 minut (w godzinach szczytu).
  • Ograniczenia regionalne: personGeneration: "allow_all" (domyślne w Veo 3) i przekształcanie obrazu w film personGeneration (Veo 2) są niedozwolone w UE, Wielkiej Brytanii, Szwajcarii i regionie MENA.
  • Przechowywanie filmów: wygenerowane filmy są przechowywane na serwerze przez 2 dni, a następnie usuwane. Aby zapisać kopię lokalną, musisz pobrać film w ciągu 2 dni od jego wygenerowania.
  • Dodawanie znaków wodnych: filmy utworzone za pomocą Veo są oznaczane znakiem wodnym za pomocą SynthID, naszego narzędzia do dodawania znaków wodnych i identyfikowania treści generowanych przez AI.
  • Bezpieczeństwo: wygenerowane filmy są sprawdzane przez filtry bezpieczeństwa i procesy weryfikacji zapamiętywania, które pomagają ograniczać ryzyko związane z prywatnością, prawami autorskimi i tendencyjnością.

Co dalej?