ABMediaX Poster

Changelog

Every ship, every fix. In our own words.

  1. UGC style preset

    videougctiktok

    New preset in the video generator: UGC. The "iPhone in someone's hand talking about a product" look, without the actual person or the actual iPhone.

    What it wires up under the hood:

    • Prompt scaffolding. The router gets an extra system message steering it toward handheld framing, natural indoor lighting, medium close-up, no cinematic camera moves. Aspect ratio locked to 9:16.
    • Burned-in captions. Post-render we run an FFmpeg pass with subtitles=captions.srt:force_style='Fontname=Inter,Fontsize=18,PrimaryColour=&HFFFFFF&,OutlineColour=&H000000&,BorderStyle=3,Outline=1' — the TikTok-native look, not a subtitle track a platform might strip.
    • Humanized TTS. ElevenLabs eleven_multilingual_v2 with stability=0.35, similarity_boost=0.75. Lower stability on purpose — the tiny imperfections read as human.
    • Product photo upload. Drop a JPEG/PNG in the UGC panel and it gets passed to Runway as a reference image so the product shape stays consistent shot-to-shot. Nothing fancy; the reference-image field was already there, we just exposed it.

    Meant for creator-brand ads. Works surprisingly well for SaaS demo cutdowns too.

    Austin
  2. Per-brand voice AI

    voiceaicaptions

    Captions used to sound like a robot doing an impression of you. Now they sound like you.

    • Voice profiles live in Postgres with a pgvector embedding column. Paste in 10–50 sample captions, we chunk and embed with text-embedding-3-small (1536-dim), and store them per workspace.
    • RAG at caption time: when you hit "generate caption", we pull the top-k nearest neighbors to the current draft topic (cosine distance, k=6) and inject them as few-shot examples. The model gets your actual phrasing, not a description of it.
    • Dashboard at /dashboard/voice: create profiles, paste samples, mark a profile as default, preview how a caption comes out with vs. without the profile.

    Tested it against my own last 200 TikTok captions — the with-profile output is close enough that I don't need to rewrite it. That was the whole bar.

    Austin
  3. MCP + OpenAPI shipped

    mcpapiautomation

    You can now drive the whole app from Claude Desktop, Cursor, or n8n's AI Agent node without touching the UI.

    • /api/mcp — Model Context Protocol endpoint. Streamable HTTP transport. Six tools out of the gate: list_posts, create_post, schedule_post, generate_caption, upload_media, get_post_status. Auth via Authorization: Bearer pk_live_....
    • /api/docs — OpenAPI 3.1 spec plus a Scalar-rendered reference. Same auth model. Every dashboard action has a matching endpoint; if it's not in the spec, it doesn't exist.
    • API keys live under Dashboard → Settings → API keys. Hashed with SHA-256 before insert; we show the plaintext exactly once at creation. Scoped per-workspace, revocable, last-used timestamp is tracked so you can spot stale ones.

    The reason this exists: I wanted my own agents to schedule my own content. If you want the same, you now can.

    Austin
  4. ABMediaX Poster is live

    postingbillinglaunch

    First public build is up at poster.abmediax.com. Been running it privately for weeks; time to let other people use it.

    What works today:

    • YouTube posting is live and reviewed. Uploads via resumable session, sets title/description/tags, honors your default privacy setting.
    • TikTok, Instagram, X are wired end-to-end but pending platform review. You can connect the accounts now; publishing turns on the moment each app is approved. No code change needed on your end when it flips.
    • Captions via OpenAI (gpt-4o-mini for drafts, gpt-4o for the "make it better" pass). Prompt is boring on purpose — hook, body, CTA, hashtags — and it respects the brand voice profile if you have one set.
    • Auth is Supabase (email + Google). Sessions via @supabase/ssr, middleware-gated everywhere except /, /login, /changelog, /api/docs, /api/mcp.
    • Storage is Vercel Blob. Videos land there first, then get pushed to each platform. No S3 bill to reason about.
    • Custom domain: poster.abmediax.com, HTTPS via Vercel, wildcard subdomain reserved for future workspaces.
    • Pro plan ($19/mo) unlocks the scheduler (Vercel Cron every 5 minutes checks posts where status='scheduled' AND scheduled_at <= now()).
    • OAuth tokens for each connected platform are encrypted at rest (AES-256-GCM, key from TOKEN_ENCRYPTION_KEY env). We never store platform passwords, only refresh tokens.

    There will be bugs. Report them and I'll ship a fix the same day.

    Austin
  5. AI video generation (Runway)

    videoairunway

    Shipped a one-box AI video generator. Type any prompt, get a finished clip in your workspace. Preview-only — nothing auto-posts until you approve it.

    How it works:

    1. Router. Your prompt goes to a gpt-4o router that plans cinematic shots — subject, camera move, lighting, duration per shot. Cheap and fast; output is a strict JSON schema.
    2. Render. Shots go to Runway Gen-4.5 as the primary provider. There's a Sora fallback stub wired up but disabled until API access lands.
    3. Quality gate. Every returned file is probed with ffprobe. If duration is off by more than ±0.5s, resolution is below the requested tier, or audio track length doesn't match video length, we reject and retry once. Failed twice = surfaced to you with the probe output so you know why.
    4. Delivery. Passing clips land in Vercel Blob and show up under /dashboard/video as previewable assets. You pick one, edit the caption, then send it to the poster.

    New route: /dashboard/video. Runway credits pass through at cost — no markup, no re-billing.

    Austin