The video factory with agents|INEMA.CLUB-PRO

Lesson 8 · 18 min

Publishing a video: caption, thumb, three languages and YouTube

The factory's last engine takes the finished video to YouTube with title, description, tags, cover and captions. yt-pubx has a dry-run mode that builds everything and stops before sending. In this lesson you do a dry run with no model and no account, see the most common error and close the course with the plan for your first video.

Start the lesson
Three monitors side by side on a dark desk, each showing the same frame of mountains at dusk and a gray caption bar.

In this lesson you will

  1. 1Isolate the dry-run configuration with YTPUBX_CONFIG and YTPUBX_DATA
  2. 2When yt-pubx calls a model and how to do a dry run with none
  3. 3The cover built on your machine from an image and a phrase
  4. 4The dated plan for your first video, lesson by lesson

Goal: do a dry run of publishing with yt-pubx in --dry-run mode, with no model and no upload, and build the plan for your first video.

01From MP4 to live video

Click each step. The last one is yours, outside the course.

Click each block in the diagram to see what it does.

yt-pubx 2.4.0 (commit f9842a1, MIT license), read on 10/19/2026. Schedule, queue and channel on autopilot: the From chat to agent program.

02Dry run with no model and no account

The two variables send the config and the jobs to the dry-run folder: your real configuration is not touched. Title, description and tags by hand and --sem-thumb: no model is called.

Terminal · publishing dry run
E=${TMPDIR:-/tmp}/ensaio-fabrica/a8; rm -rf "$E"; mkdir -p "$E"; cd "$E"
git clone -q https://github.com/inematds/yt-pubx.git && git -C yt-pubx checkout -q f9842a1
export YTPUBX_CONFIG="$E/config" YTPUBX_DATA="$E/dados"
ffmpeg -v error -f lavfi -i color=c=0x0c0c10:s=1280x720:d=5 -f lavfi -i anullsrc=r=48000:cl=stereo -t 5 -shortest -c:v libx264 -pix_fmt yuv420p -c:a aac ensaio.mp4
./yt-pubx/yt-pubx init > /dev/null; echo "init: $?"
./yt-pubx/yt-pubx publicar ensaio.mp4 --dry-run --sem-thumb \
  --title "Ensaio da fábrica" --description "Vídeo de ensaio, 5 s, sem envio." --tags "ensaio,fabrica" 2>&1 \
  | grep -E "^(TÍTULO|TAGS|THUMB)|nada foi enviado" | sed "s/^\[yt-pubx [0-9:]*\] //"; echo "saída: ${PIPESTATUS[0]}"
Example from the repository
init: 0
TÍTULO: Ensaio da fábrica
TAGS: ensaio, fabrica
THUMB: None
--dry-run: nada foi enviado.
saída: 0

The init creates an example channel ("principal") in the dry-run folder. The block cuts the time from the start of the log lines. The plano.json stays in dados/trabalhos/.

03The most common error

With no title, no description and no context, yt-pubx has nothing to write from and stops before calling any model.

Terminal · dry run without text
cd ${TMPDIR:-/tmp}/ensaio-fabrica/a8
export YTPUBX_CONFIG="$PWD/config" YTPUBX_DATA="$PWD/dados"
./yt-pubx/yt-pubx publicar ensaio.mp4 --dry-run --sem-thumb 2>&1 | grep "ERRO" | sed "s/^\[yt-pubx [0-9:]*\] //"; echo "saída: ${PIPESTATUS[0]}"
Example from the repository
ERRO: sem --title/--description e sem --contexto/--contexto-arquivo/--legenda: não há do que escrever
saída: 1

The message already names the three ways out: pass the text by hand, give a context, or give the video's caption file (the last two call Codex).

04The cover composed on your machine

One art image, one short phrase and one scene: yt-pubx composes the 1280×720 cover with Pillow, no model needed.

Terminal · local cover
cd ${TMPDIR:-/tmp}/ensaio-fabrica/a8
export YTPUBX_CONFIG="$PWD/config" YTPUBX_DATA="$PWD/dados"
ffmpeg -v error -y -f lavfi -i "testsrc2=s=1280x720" -frames:v 1 arte.png
./yt-pubx/yt-pubx publicar ensaio.mp4 --dry-run --title "Ensaio da fábrica" --description "Vídeo de ensaio, 5 s, sem envio." \
  --tags "ensaio,fabrica" --frase-thumb "A FÁBRICA" --cena-thumb "mesa de edição" --thumb-arte arte.png 2>&1 \
  | grep -E "^THUMB|nada foi enviado" | sed -E "s/^\[yt-pubx [0-9:]*\] //; s#/[0-9]{8}-[0-9]{6}-#/<data>-#"; echo "saída: ${PIPESTATUS[0]}"
f=$(ls dados/trabalhos/*/thumb.jpg | tail -1); python3 -c "from PIL import Image; print('thumb:', Image.open('$f').size)"
Example from the repository
THUMB: /tmp/ensaio-fabrica/a8/dados/trabalhos/<data>-ensaio-mp4/thumb.jpg
--dry-run: nada foi enviado.
saída: 0
thumb: (1280, 720)

The date and time in the job folder name were replaced with <data>. In this capture the art is an ffmpeg test pattern; in yours, use a frame from your own video.

05Three languages

One video per language, each with its own title and its own caption.

1. Video

explicavideos produces PT, EN and ES when the config lists all three languages and there is a reviewed scenes file for each language (lesson 2). Translating the script and captions: the translator from your subscription, never an unreviewed step.

06The map of your first video

The deliverables that take a video of yours from idea to publishing dry run. Click a step to see its "done when".

Step 1Engine

qual-motor

3 exercises

Your case's line on the map, with Use: and the lesson.

See the lesson
Step 2Input

scenes or theme

3 exercises

The engine's input file, checked.

See the lesson
Step 3Gates

QA

3 exercises

Script and video approved at the engine's gates.

See the lesson
Step 4Avatar

if any

3 exercises

Consent form checked and gate open.

See the lesson
Step 5Dry run

dry-run

3 exercises

--dry-run: nada foi enviado.

See the lesson
At the end of the courseA video of yours run through an INEMA engine, checked at the gates and ready to upload.
24 exercises
Click an exercise to see what to do and the "done when".
  1. 1/5

    Engine

    The lesson 1 map tells you which engine and which lesson. The rest of the plan follows that engine.

  2. 2/5

    Input

    explicavideos scenes (lesson 2), actions.json (lesson 3), docflow theme (lesson 4) or the short's script (lesson 5).

  3. 3/5

    Gates

    Short: qa_roteiro and qa_short (lesson 5). Edited reel: pacing lint (lesson 6). Demo: MP4 checker (lesson 3).

  4. 4/5

    Avatar

    Only if the video has an avatar: your consent form and the lesson 7 gate, before any studio.

  5. 5/5

    Dry run

    This lesson's dry run with your video, your title and your cover. The real upload is yours, with --privacy private the first time.

The engines you don't use for this video are left for the next one: the lesson 1 map is the starting point for every new video.

07Practice

The kit's dry run and the dry run with your video.

E1 · Dry run

5 min

Run "ensaio de publicação" and "ensaio sem texto".

Done when: TÍTULO: Ensaio da fábrica, --dry-run: nada foi enviado. with saída: 0, and then ERRO: sem --title/--description e sem --contexto/--contexto-arquivo/--legenda: não há do que escrever with saída: 1.

E2 · Local cover

5 min

Run "capa local".

Done when: --dry-run: nada foi enviado., saída: 0 and thumb: (1280, 720).

E3 · Your video in a dry run

15 min

In the dry-run folder (cd ${TMPDIR:-/tmp}/ensaio-fabrica/a8), export the two variables as in the block (export YTPUBX_CONFIG="$PWD/config" YTPUBX_DATA="$PWD/dados") and run the same publicar with a video of your own (the one from lesson 3 will do), your title, your description and your tags.

Done when: ./yt-pubx/yt-pubx publicar [seu.mp4] --dry-run --sem-thumb --title "…" --description "…" --tags "…" 2>&1 | grep -c "nada foi enviado"; echo "saída: ${PIPESTATUS[0]}" → 1 and saída: 0.

08Generate your plan with dates

Pick a start date and how much time you have per week.

09Lesson quiz

The explanation appears after you answer.

Question 1 of 3

What are YTPUBX_CONFIG and YTPUBX_DATA for in the dry run?

10In three sentences

Dry run--dry-run builds everything and stops; YTPUBX_CONFIG and YTPUBX_DATA isolate.
No modeltitle, description, tags and cover by hand: nothing leaves the machine.
Planengine, input, gates, avatar if any, dry run: your first video.

Next step