Pipeline outputs

An output is where what a pipeline made goes: a post on one channel, a draft with no channel yet, or the library. It is the last stop, and nothing comes after it. A pipeline has one or more outputs, each fed by one or more steps, and each with its own small settings. Outputs replace the single outbox pipelines used to end in.

A pipeline's budget belongs to the pipeline, not to an output: Credits a run may spend and Credits a month. An output that proposes posts or posts by itself needs both set. See Budgets.

Each section below ends with the output as it sits in a pipeline's definition, which is what an assistant reads and proposes. id is the output's short name in this pipeline, kind is the key in the heading, after names the steps that feed it, and settings holds only what differs from the defaults.

One step into several outputs, several steps into one

A pipeline is a graph, not a line. Sources feed steps, steps feed outputs, and either side can be more than one:

  • One step feeding several outputs runs once. Write the post writes one text with one AI call, Cut a clip cuts one clip, and every output it feeds gets the same items. Each output then makes its own post on its own channel, with its own approval.
  • Several steps feeding one output each hand it their own items. A clip from one branch and a picture from another each become a post on that output.
  • What it costs: a pipeline's estimate counts each step once, however many outputs it feeds. Posting, where a network is priced, is charged for each post that goes out.

For Lanternfall, a game by Hollow Oak Games, one pipeline cuts each "Clip that" moment once, writes its post once, and sends it to three outputs: YouTube, Instagram and TikTok. Each gets its own post of the same clip and text, and each asks for its own approval.

How a channel output works

Every output. channel below makes one post of each item it is handed, on that channel only, and then does what What happens to what it makes says. A channel a post could not go to is never quietly missing: the run says why, for a person to put right.

Each takes copy, clip, media and activity, and gives nothing. A channel output from a kit, such as a Steam announcement, is offered only to a brand with that kit.

What happens to what it makes

The setting autonomy, labelled What happens to what it makes:

  • Drafts somebody approves and schedules (draft): the default. The post waits in Posts for somebody to edit, approve and schedule, as one written by hand does.
  • Posts proposed at a time, for approval (review): the post is complete, with a time proposed from its Timing, and waits in the review queue. Whoever approves it schedules it, as themselves. It needs the right to publish the brand's posts, and a budget on the pipeline.
  • Posts scheduled by itself where allowed, else for approval (auto): the post is scheduled with nobody's click where every gate allows it, and sent for approval as review is where any gate does not. It needs GreenMind's approval for the brand. YouTube, TikTok, LinkedIn and Reddit always ask a person. See Posting by itself.

A preview only ever drafts, whatever this says.

Timing

The setting timing, labelled Timing, says when a proposed post would go out. A draft ignores it, as a person schedules it.

  • When (mode): As soon as the spacing allows (asap), At a set time (fixed) or Between two times (window). Default between two times.
    • Set time (at): for a set time. Default 18:00.
    • From (from) and To (to): for between two times. Default 17:00 to 21:00.
  • Days of the week (weekdays): from 0 for Sunday to 6 for Saturday. Default every day.
  • Time zone (timeZone): Default UTC, so set your own.
  • Quiet hours (quietHours): never inside these hours, every day, across midnight if need be.
    • From (from) and To (to). Default none.
  • Days never to post (blackoutDates): dates in the time zone set. Default none.

Whatever the timing, posts are spaced from every other post on the same account: those of every pipeline, those written by hand, and those of another brand sharing the account, since a network sees one account. How far apart, and how many a day, is set for each network by GreenMind.

Account, video and finishing in the app

  • Account (account): the brand's account on that network to post from. Default empty: the brand's one account there, or, where it has several, a person chooses for each post. Network channels only, not the blog or a channel posted to by hand.
  • Which video of a clip (video): The best made: captioned, then vertical (best), The vertical one (vertical) or The original shape (original). Default the best made. Channels that take video only.
  • Finish it in the network's app (native): on or off. On, a person finishes each post on their phone in the network's own app, to add a sound or music, and is told when one is ready. See Finishing a post by hand. Default off. Every network but Discord, the blog and channels posted to by hand.

output.facebook

Facebook Page

Makes a post on the brand's Facebook Page of each item: text, a link, pictures, a video or a Reel.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Facebook Page.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): draft, review or auto. Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Facebook is charged at Facebook's posting price (posting.facebook), where Facebook is priced. See Credits.

Example:

{
  "id": "facebook",
  "kind": "output.facebook",
  "after": ["write"],
  "settings": { "autonomy": "draft" }
}

output.instagram

Instagram

Makes a post on the brand's Instagram account of each item: a picture, a carousel, a video or a Reel.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Instagram account.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • Trial reel (instagramTrial): a Reel shown first to people who do not follow the account, to try a hook without spending your followers' attention. No: a Reel for everyone (off), A trial reel, shared to followers by hand in Instagram (manual) or A trial reel, shared to followers by Instagram if it does well (performance). Default off. Reels only.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Instagram is charged at Instagram's posting price (posting.instagram), where Instagram is priced.

Example:

{
  "id": "instagram",
  "kind": "output.instagram",
  "after": ["cut"],
  "settings": { "instagramTrial": "performance" }
}

output.threads

Threads

Makes a post on the brand's Threads account of each item: text, a link, pictures or a video.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Threads account.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Threads is charged at Threads' posting price (posting.threads), where Threads is priced.

Example:

{ "id": "threads", "kind": "output.threads", "after": ["write"], "settings": {} }

output.youtube

YouTube

Uploads each item to the brand's YouTube channel as a video or a Short, with the post's text as its description and its title cut to YouTube's length. It goes out public and not made for children, which whoever approves it can change.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one YouTube channel.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft. YouTube always asks a person, so auto sends each post for approval.
  • Timing (timing): See Timing.

Cost: making the post is free. Each upload is charged at YouTube's posting price (posting.youtube), where YouTube is priced.

Example:

{
  "id": "youtube",
  "kind": "output.youtube",
  "after": ["write"],
  "settings": { "video": "vertical" }
}

output.tiktok

TikTok

Makes a post on the brand's TikTok account of each item: a video, or pictures as a photo post, with the post's text as its caption.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one TikTok account.
  • Finish it in the network's app (native): Default off. Turn it on to add a sound or music in TikTok.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft. TikTok always asks a person, so auto sends each post for approval.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on TikTok is charged at TikTok's posting price (posting.tiktok), where TikTok is priced.

Example:

{ "id": "tiktok", "kind": "output.tiktok", "after": ["write"], "settings": { "native": true } }

output.reddit

Reddit

Makes a text or link post of each item in one subreddit, with the post's text as its body and the item's title as its title.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Reddit account.
  • Subreddit (subreddit): where the posts go, without the r/. Needed: Reddit is left out of the post until it is filled in. No default.
  • Finish it in the network's app (native): Default off.
  • What happens to what it makes (autonomy): Default draft. Reddit always asks a person, so auto sends each post for approval.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Reddit is charged at Reddit's posting price (posting.reddit), where Reddit is priced.

Example:

{
  "id": "reddit",
  "kind": "output.reddit",
  "after": ["write"],
  "settings": { "subreddit": "lanternfall" }
}

output.x

X

Makes a post on the brand's X account of each item: text, a link, up to four pictures or one video.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one X account.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on X is charged at X's posting price (posting.x), where X is priced.

Example:

{ "id": "x", "kind": "output.x", "after": ["link"], "settings": {} }

output.bluesky

Bluesky

Makes a post on the brand's Bluesky account of each item: text with its links made clickable, up to four pictures or one video.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Bluesky account.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Bluesky is charged at Bluesky's posting price (posting.bluesky), where Bluesky is priced.

Example:

{ "id": "bluesky", "kind": "output.bluesky", "after": ["link"], "settings": {} }

output.mastodon

Mastodon

Makes a post on the brand's Mastodon account of each item, within the limits of the account's own instance.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one Mastodon account.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Mastodon is charged at Mastodon's posting price (posting.mastodon), where Mastodon is priced.

Example:

{ "id": "mastodon", "kind": "output.mastodon", "after": ["write"], "settings": {} }

output.discord

Discord

Posts each item to the brand's Discord channel through its webhook. Discord has no app to finish a post in, so it has no Finish it in the network's app.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): the Discord channel's webhook to post through. Default the brand's one.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on Discord is charged at Discord's posting price (posting.discord), where Discord is priced.

Example:

{
  "id": "discord",
  "kind": "output.discord",
  "after": ["write"],
  "settings": { "autonomy": "review" }
}

output.linkedin

LinkedIn page

Makes a post on the brand's LinkedIn company page of each item: text, a link, one picture or a video.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • Account (account): Default the brand's one LinkedIn page.
  • Finish it in the network's app (native): Default off.
  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft. LinkedIn always asks a person, so auto sends each post for approval.
  • Timing (timing): See Timing.

Cost: making the post is free. Each post that goes out on LinkedIn is charged at LinkedIn's posting price (posting.linkedin), where LinkedIn is priced.

Example:

{ "id": "linkedin", "kind": "output.linkedin", "after": ["write"], "settings": {} }

output.blog

Blog

Makes a post on the brand's own blog of each item: text, pictures and links. The blog is the brand's own channel, so there is no account to choose and nothing to finish in an app.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): See Timing.

Cost: free.

Example:

{ "id": "blog", "kind": "output.blog", "after": ["write"], "settings": {} }

output.steam-announcement

Steam announcement

Makes a post of each item for the game's Steam events and announcements, written in Steam's own markup. Steam has no way to post for you, so scheduling it makes a task for whoever posts it by hand in Steamworks. See Channels you post to by hand. Offered only to a brand linked to a game.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): when the task is due. See Timing.

Cost: free.

Example:

{ "id": "steam", "kind": "output.steam-announcement", "after": ["write"], "settings": {} }

output.steam-store-listing

Steam store page

Makes a post of each item for the Steam store page's short description, plain text of at most 300 characters. Scheduling it makes a task for whoever changes the page by hand in Steamworks. Offered only to a brand linked to a game.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): when the task is due. See Timing.

Cost: free.

Example:

{ "id": "store-page", "kind": "output.steam-store-listing", "after": ["short"], "settings": {} }

output.google-play-listing

Google Play listing

Makes a post of each item for the Google Play listing's full description, plain text of at most 4000 characters. Scheduling it makes a task for whoever changes the listing by hand in the Play Console. Offered only to a brand linked to a game.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): when the task is due. See Timing.

Cost: free.

Example:

{ "id": "play", "kind": "output.google-play-listing", "after": ["write"], "settings": {} }

output.app-store-listing

App Store listing

Makes a post of each item for the App Store description, plain text of at most 4000 characters. Scheduling it makes a task for whoever changes the product page by hand in App Store Connect. Offered only to a brand linked to a game.

Takes: copy, clip, media, activity. Gives: nothing.

Settings:

  • What happens to what it makes (autonomy): Default draft.
  • Timing (timing): when the task is due. See Timing.

Cost: free.

Example:

{ "id": "app-store", "kind": "output.app-store-listing", "after": ["write"], "settings": {} }

output.drafts

Drafts

Leaves a post draft of each item with no channel chosen, for somebody to address and finish in Posts. A draft an earlier Draft a post step made is left as it is, channels and all. Use it when a person decides where each post goes.

Takes: copy, clip, media, activity, draft. Gives: nothing.

Settings:

  • Which video of a clip (video): Default the best made.
  • What happens to what it makes (autonomy): Default draft. Anything else sends the draft for approval at a time, as described in What happens to what it makes.
  • Timing (timing): See Timing.

Cost: free.

Example:

{ "id": "drafts", "kind": "output.drafts", "after": ["write"], "settings": {} }

output.library

Library

Leaves what it is handed in the library, a draft until somebody keeps it, and makes no post. This is how the band kit's song clips wait for the band: one clip per song, kept or thrown away by a person.

Takes: clip, media. Gives: nothing.

Settings: none.

Cost: free.

Example:

{ "id": "library", "kind": "output.library", "after": ["cut"], "settings": {} }

outbox.send

Outbox (retired)

The single last step pipelines ended in before outputs. Versions made before outputs still run it as they always did, and runs already under way finish on the version they started on.

Saving a new version converts it to outputs:

  • An outbox sending to one network becomes that network's output.
  • An outbox sending to several networks becomes one output per network. Each makes its own post and asks for its own approval, where the outbox made one post for them all.
  • An outbox sending to the library becomes output.library.
  • An outbox with no channel chosen, or after Draft a post, becomes output.drafts.

Its budget moves to the pipeline. See Budgets.