# Catatan 1 Oktober 2026 (WIB)

## Cron healthcare StudioSoft (hc52) — 02:00 WIB

**Threads StudioSoft (carousel, 5 slide baru `ss_hc52_webrs_*`)**
- Topik: **"Pembuatan Website Rumah Sakit: Fitur Wajib dan Vendor"** —
  https://studiosoft.id/pembuatan-website-rumah-sakit/
- 🆕 **ARTIKEL HEALTHCARE BARU** — publish 30 Sep 2026 08:00Z (WP id 9158), **artikel healthcare
  pertama sejak 13 Sep 2026** (sebelum ini stok HC selalu HABIS → hc41–hc51 semua RE-AIR).
  Diverifikasi HTTP 200 sebelum dipakai.
- Jejak di Threads / LinkedIn / Facebook StudioSoft = **0 di ketiga platform** (belum pernah
  dipakai sama sekali) → dipilih jadi topik carousel, bukan re-air.
- Jadwal: album `6abd5d401246a403edae84a7` @ **2 Okt 2026 09:00 WIB** (2026-10-02T02:00:00.000Z)
  + 2 reply anak `...84af` (02:01Z, link artikel) & `...d10f` (02:02Z, hashtag) — keduanya
  terverifikasi menempel ke album.
- Caption 486 char (≤500), hashtag huruf kecil, 0 mention, CTA komentar di ekor, 0 CJK.
- Slide dari isi artikel asli: kenapa website RS berbeda (pengguna tidak tenang / menyangkut
  keselamatan / aturan lebih ketat) · struktur halaman wajib (izin, layanan, jadwal dokter, IGD,
  pendaftaran & biaya) · fitur pembeda (pencarian dokter, jadwal bisa diubah sendiri, ramah koneksi
  lambat, WhatsApp, data terstruktur) · pertanyaan sebelum memilih vendor.

**LinkedIn StudioSoft (TEXT-only) — TIDAK SKIP kali ini**
- Artikel yang sama (baru, belum ada di antrean LI) → jadwal `6abd5d411246a403edae84c1`
  @ **11 Okt 2026 14:00 WIB** (2026-10-11T07:00:00.000Z).
- Caption storytelling 1.630 char, medias=0, replies=[], 0 mention, CTA diskusi.
- Catatan: hc50 & hc51 LinkedIn SKIP karena 11 artikel HC lama sudah semua ada di antrean LI
  pending (5–11 Okt). Artikel baru ini belum masuk antrean, jadi aman dijadwalkan.
- ⚠️ Temuan lama yang MASIH berlaku: 6 jadwal LI pending 9–10 Okt berlink artikel yang sudah 404
  (dibuat saat artikelnya masih hidup): `6aa5a58e703d29cb586594c4`, `6aa9974d88a23118dad5a25d`,
  `6aac3a00fc107e4fe5d5a012`, `6ab104d202078a414acb4216`, `6ab180383032e3a79c26d7e5`,
  `6ab2d1532cf2c1b59c43a8ea`. Belum diubah — menunggu keputusan Bos (hapus atau ganti artikel).

**Facebook StudioSoft (TEXT-only, tanpa media, `replies=[]`)**
- Artikel: "7 Aplikasi Mental Health Anak Usia 4–10 Tahun yang Harus Dicoba Orang Tua"
  (jejak FB terakhir **14 Sep 2026 07:00Z** = paling tua di antara artikel HC yang masih hidup).
- Jadwal `6abd5d411733078385fdd129` @ **1 Okt 2026 19:30 WIB** (2026-10-01T12:30:00.000Z).
  Caption 887 char, angle "kesehatan mental anak" (beda dari angle Threads), 0 mention, CTA diskusi.
- Catatan: artikel ini juga topik carousel Threads hc51 yang tayang 1 Okt 09:00 WIB; caption FB
  dibuat dari angle berbeda (tanda anak belum bisa mengungkapkan emosi) supaya tidak terasa duplikat.

**Status stok artikel healthcare**
- 7 artikel HC lama **MASIH 404** (dihapus 24–25 Sep): strategi-digital-marketing-rumah-sakit,
  website-rumah-sakit-gagal-pasien, iklan-facebook-rumah-sakit, klinik-kecil-butuh-digital-marketing,
  konten-edukasi-kesehatan-kepercayaan-pasien, social-media-rumah-sakit-efektif,
  data-analytics-rumah-sakit-kebutuhan-pasien → **tidak dipakai** sebagai link/artikel sumber.
- Artikel HC hidup: 11 lama + 1 baru (`pembuatan-website-rumah-sakit`).
- Slot carousel Threads 09:00 WIB: hanya 1 Okt yang terisi (hc51) → hc52 dapat **2 Okt 09:00 WIB**.

**Script run ini (workspace):** `hc52_audit.py` · `hc52_pick.py` · `hc52_show_captions.py` ·
`studiosoft_hc52_carousel_gen.py` (`ss_hc52_webrs_*`, engine `ss_carousel_lib.py`, bg #122B63) ·
`studiosoft_healthcare_cron_run_hc52.py` (DRY=1 lolos 100%) · `verify_hc52.py`.

**Verifikasi:** media 5/5 JPEG 1080×1350 q85 (116–164 KB), 200 di KEDUA ingress
(103.84.155.153 & 103.84.155.217), 2 link artikel 200; ketiga jadwal `pending` saat dibaca ulang
dari API; tidak ada duplikat media (hanya 1 album memakai `ss_hc52_webrs_*`).

## Preview carousel 10 slide FEED IG StudioSoft (perintah Bos, 1 Okt 08:02 WIB)

Bos: *"Tun lanjutkan feed Instagram hingga akhir oktober. Buatkan 1 carousel 10 slides.
Preview disini dulu"* → dibaca: **feed IG StudioSoft** (feed = post yang muncul di grid; saat ini
diisi reel 11:00 & 19:00 yang cuma terpasang s/d 4 Okt) + minta **1 carousel 10 slide** untuk
feed-nya, preview dulu sebelum dijadwalkan.

- **Audit state feed IG SS** (`ig_feed_inventaris.py` → `/tmp/ig_feed_inv.json`): reel `type=video`
  pending s/d **4 Okt** (11:00 & 19:00, 8 jadwal) + story s/d 4 Okt (20 story) + 3 story harian
  07/14/20 & retry hc26. Carousel feed (album) terakhir tayang **30 Sep** (seri Sep 4 slide dari Mili);
  IG SS **nol album/carousel pending** → memang perlu lanjutan.
- **Isi carousel**: topik **GEO (Generative Engine Optimization)**, sumber artikel
  https://studiosoft.id/apa-itu-geo-generative-engine-optimization/ (25 Sep 2026). Artikel ini
  **0 jadwal** di IG SS (belum pernah dipakai di akun ini) → bukan duplikat.
- **Slide (10)**: cover · apa itu GEO · kenapa sekarang · beda GEO vs SEO · tiga pilar ·
  ciri konten yang dikutip AI · langkah 1 (mulai dari pertanyaan) · langkah 2 (tata ulang konten lama) ·
  cara mengukur · CTA (DM / www.studiosoft.id).
- **Desain**: engine `ss_carousel_lib.py`, 1080×1350, rata kiri, blok tengah vertikal, tanpa separator,
  Poppins, **bg selang-seling navy #122B63 ↔ putih** (mengikuti seri IG SS + aturan Bos 30 Sep soal
  warna bergantian). Aksen slide putih dibikin #2563EB karena SKY terlalu pucat di atas putih
  (temuan pemeriksaan visual pertama).
- **File**: script `ss_ig_car10_geo.py` → folder `ss_ig_car10_geo/` (10 PNG `ss_car10_geo_01..10.png`
  + `_contact_sheet.jpg`). Diverifikasi `vision_analyze` (2 putaran, putaran 1 menemukan kontras aksen
  kurang di slide putih → diperbaiki).
- **Caption draft** (1.147 char, link artikel, CTA komentar, 7 hashtag huruf kecil, 0 mention, 0 CJK)
  disimpan `/tmp/caption_geo.txt`; cek `cek_caption_geo.py`. Link belum diverifikasi lewat check-host
  (semua node timeout, situs klien lambat) tapi artikel TERBACA utuh lewat `r.jina.ai` → live.
- **Status: BELUM dijadwalkan** — menunggu keputusan Bos. Kalau GO: carousel = jam **09:00 WIB**
  (aturan carousel) di hari bebas berikutnya, plus lanjutan feed/reel+story IG SS sampai 31 Okt.
- Catatan pembacaan alternatif: kalau yang dimaksud feed IG **@_ukyhandoko**, stok foto Korea
  (Bukchon 20 + Seoul 37) sudah **habis** dipakai & 500T jalan s/d 20 Okt → perlu foto baru dari Bos.

### ✅ EKSEKUSI (perintah Bos 08:2x WIB: "Ok bener ayo pasang mulai hari ini jam 8.30")

- **Jadwal tayang**: album **`6abdb5b91246a403edb9fed1`** — akun IG SS (Kreasi Studiosoft),
  `type=album`, `scheduleAt 2026-10-01T01:30:00.000Z` = **1 Okt 08:30 WIB**, **10 media** urut
  `ss_car10_geo_01..10.jpg`, `replies=[]`. Verifikasi baca balik: `pending`, akun/`type`/media benar.
- **Media**: PNG render → JPEG q85 (83–104 KB) di `openclaw-img/`, **200 di KEDUA ingress**
  (103.84.155.153 & .217) sebelum create. Script: `pasang_car10_geo.py --go` (abort otomatis kalau
  ada media tidak 200), arsip `output_jadwal_car10_geo.json`.
- **Story mirror** (aturan Bos 30 Sep "semua postingan feed tampil juga di Story"): story
  `6abdb61217330783850f6175` @ **08:40 WIB** (feed + 10 menit), slide pertama (`ss_car10_geo_01.jpg`),
  caption kosong. Dibuat via `ss_ig_story_mirror.py --hari 1 --go` (roll cron pagi sudah lewat,
  jadi carousel ini belum kebagian mirror).
- **Rutinitas harian dipasang**: cron job **`ss-ig-carousel-feed` (`cde9a71b9203`)** —
  `30 19 * * *` (= 02:30 WIB), prompt panjang (4.035 char), `--workdir` workspace, skill
  `atun-social-automation`, deliver ke Telegram 85049143. Tugasnya: pilih artikel fresh
  (`ss_ig_car_pick.py`, 53 kandidat per 1 Okt — 8 link SS sudah terpakai di IG SS), rakit 10 slide,
  JPEG + cek 2 ingress, create album IG SS jam **08:30 WIB** hari itu, verifikasi baca balik,
  tulis catatan, kirim preview 3 slide. Run pertama **2 Okt 02:30 WIB** untuk slot 2 Okt 08:30 WIB.
- Sisa feed IG SS (reel 11:00 & 19:00 + story 07/14/20 + mirror) tetap dipegang cron
  `ss-ig-reel-roll` (horizon 4 hari, `06:20 WIB`).

## Tinjauan visual feed + reels IG StudioSoft (perintah Bos, 1 Okt 12:4x WIB)

Bos kirim contact sheet 15 slide lalu: *"ini adalah tampilan feed n reels. jadi pastikan kamu bisa
cek bergantian seperti ini untuk reels n feednya"* → tugasnya: bikin kemampuan meninjau tampilan
**feed dan reels bergantian** (bukan cuma catatan teks jadwal).

- Script baru **`ss_ig_tinjau.py`** (workspace). Alur: tarik SEMUA jadwal akun IG SS
  `6a38ac33c5ff4ce3a3231232` dari Repliz (semua status) → kelompokkan per tanggal WIB → per post
  ambil medianya (album: 10 slide JPEG; video/reel: 4 potongan frame dari mp4 lewat ffmpeg dengan
  ffprobe durasi) → susun contact sheet 5 kolom, setiap baris diberi label jam/tipe + header hari
  kalau >1 hari. Media diambil dari `openclaw-img/` (fallback unduh dari media server).
- Opsi: `--tgl`, `--hari N`, `--pakai feed|reel|story` (default album+video = feed + reels),
  `--out`. Contoh: `python3 ss_ig_tinjau.py --hari 3`.
- Hasil 1 Okt: `feed=1 · reel=2 · story=7` → `/tmp/ss_ig_tinjau_2026-10-01.jpg` (1228×1644, 4 baris:
  FEED 08:30 slide 1–5, slide 6–10, REEL 11:00 putih ss_opt2_06, REEL 19:00 navy ss_opt2_05).
  3 hari → `/tmp/ss_ig_tinjau_2026-10-01_3hari.jpg` (1228×3670, 8 baris) — 2 & 3 Okt feed kosong
  karena album-nya baru dibuat cron 02:30 WIB di hari yang sama.
- Belum dijadikan cron; menunggu Bos menentukan format & ritme (harian? per hari tertentu?).

## Video reel: tanpa fade di awal (perintah Bos 1 Okt 13:0x WIB)

Bos: *"pastikan videonya langsung tampakkan halaman depan (tanpa ada transisi fade out awal).
ok preview 1 reels disini"* → `build()` di `ss_ig_reel_warna.py` diubah: slide PERTAMA tidak lagi
diberi `fade=t=in` (parameter `fade_awal=False` sebagai default, bisa dinyalakan lagi kalau Bos minta).
Slide ke-2 dan seterusnya tetap pakai fade masuk/keluar seperti sebelumnya.

- Preview: `python3 /tmp/atun_preview_reel.py 05 biru /tmp/preview_reel_19_biru05.mp4`
  (script preview merakit ke `/tmp` — JANGAN menimpa `openclaw-img/ss_reel_*.mp4` yang URL-nya sudah
  dipakai jadwal; pakai `--force-video` di jalur resmi kalau memang mau ganti medianya).
- Verifikasi: frame ke-0 vs slide asli → selisih rata-rata 1,2/255 (praktis identik), artinya halaman
  depan tampil utuh sejak detik 0.
- ⚠️ Reel yang sudah terjadwal (s/d 4 Okt) masih memakai file lama yang ada fade-nya. Kalau Bos acc,
  render ulang dengan `ss_ig_reel_warna.py --hari N --force-video --go` supaya media di URL itu ikut
  terganti (URL-nya sama, jadi post yang belum tayang otomatis pakai versi baru).
- Story (`ss_ig_story_3x.py`) belum diubah; tunggu perintah kalau mau disamakan.

### ✅ EKSEKUSI (Bos: "ok sip betul begitu", 1 Okt 13:1x WIB)

`python3 ss_ig_reel_warna.py --hari 31 --force-video --go` (log `/tmp/reel_roll_31okt.log`) →
**`selesai: 54 slot dibuat, 0 janggal`, EXIT=0**.

- Reel IG SS sekarang terisi **30 Sep s/d 31 Okt** (64 jadwal `type=video`), **0 slot kosong** untuk
  1–31 Okt. Semua `pending`, media 200 di KEDUA ingress.
- 14 video dirender/dirender ulang: putih 06/08/10/14/16/18/20 + biru 05/07/09/11/13/17/19
  (5 di antaranya baru: putih 18 & 20, biru 13/17/19).
- Media lama diganti versi tanpa fade. Cek: `openclaw-img/ss_reel_biru_05.mp4` (dipakai slot 1 Okt
  19:00) frame ke-0 vs slide asli → selisih 1,24/255; URL 200 di dua ingress, 286.951 byte.
- Batas horizon cron `ss-ig-reel-roll` (4 hari) tidak lagi jadi pengikat sampai 31 Okt habis.

## Story mirror: media gambar dibuat 1080x1920 (perintah Bos 1 Okt 13:2x WIB)

Bos kirim screenshot Story IG (13.23, "Your story 5h") — cover carousel GEO tampil **kepotong
kiri-kanan** ("EO AR BISNIS NDA DIKUTIP ESIN AI"): *"tolong untuk story .. jangan sampai terpotong
seperti ini"*. Penyebabnya: mirror story mengunggah slide 4:5 (1080×1350) apa adanya, dan Instagram
memaksa media story memenuhi kanvas 9:16 → sisi kiri-kanan terpotong ~228 px.

- `ss_ig_story_mirror.py`: fungsi baru **`kanvas_story(nama)`** — slide ditaruh utuh di tengah kanvas
  1080×1920 **sewarna latar slide** (warna diambil dari piksel sudut (8,8); ≥235 di ketiga kanal → putih),
  disimpan sebagai `openclaw-img/ss_story_canvas_<nama>.jpg` q90. Gambar yang sudah 1080×1920 dilewatkan
  apa adanya. `media_story()` sekarang memakai kanvas ini untuk tipe image/album (video/reel tetap apa adanya
  karena mp4-nya sudah 9:16) + cek 200 di KEDUA ingress sebelum create. Urutan di main() diperbaiki:
  slot yang jamnya sudah lewat di-SKIP sebelum merakit kanvas (biar tidak bikin file sia-sia).
- Uji: `ss_ig_story_mirror.py --hari 4` (dry-run) jalan normal, cuma menambah mirror 5 Okt 11:10
  (slot reel baru). `ss_story_canvas_ss_car10_geo_01.jpg` 1080×1920, 200 di kedua ingress (126.620 byte).
- Jadwal story bergambar yang sudah ada: **cuma 1 dan sudah tayang** (1 Okt 08:40, `success`) — jadi
  tidak ada yang perlu di-PUT; perbaikan berlaku mulai mirror berikutnya (2 Okt 08:40 dst).
- Bukti visual: `/tmp/story_before_after.jpg` (kiri potongan simulasi IG, kanan kanvas baru) +
  script demo `/tmp/atun_story_kanvas_demo.py`.
