La_Syl Studio
Widgets guide

Viewer Cards

Score cards for your viewers — their own scores this stream and in total, and the achievements they unlocked, shown when they ask or all in turn.

Gives each viewer a score card: their own scores — messages this stream and all time, Bits, redemptions… — in sections of one or two columns, their chat badges and sub tier, and the badges of the achievements they unlocked. A card shows when a viewer asks for it (a command…), every active viewer's card plays in turn, or they all scroll past, each display mode on its own triggers, in one browser source.

The Viewer Cards are part of the Stream Scores widgets, with the Scoreboard. They work for free in one overlay, with one display mode, 5 scores per platform and 5 achievements per list; Stream Scores Licence lifts these limits → Stream Scores Licence.

Platforms: Twitch, YouTube, Kick, and integrations by name

Action pack: needed — Stream UI - Backend writes the viewers' variables, adds them to achievement groups and saves the screenshots. See Who needs what.

How it works

  • Scores live in Streamer.Bot, as each viewer's user variables, on the platform they came from — temp_messages, messages… Your own actions can read and change them.
  • Only what a viewer does counts. The trigger pickers offer only triggers a viewer sets off: platform events, Core › Commands, integration events naming a person, and User Global Variable Updated (a viewer's variable another tool writes, such as Chat First's firstInChat).
  • Integrations are matched by name. A Ko-fi tip only carries a name: it counts for the viewer of the same name on each platform where Streamer.Bot knows them (they hold a user variable there). Which field holds the name is on the Connection page, under the integration's row.
  • Achievements are user groups. When a viewer sets off an achievement's trigger, they join its Streamer.bot group, the New Achievement Unlocked custom trigger fires (if switched on) and its Chat message is posted in their chat — once: a viewer already in the group gets nothing.
  • Pictures and badges come from chat. At each viewer's first words, their profile picture and chat badges are saved in their profilePic and userBadges variables, for their card.
  • Counted by the overlay that runs the actions, while counting is on. Start counting and Stop counting, by hand or by trigger, switch it (streamUi.off.viewercards in Streamer.Bot). By default it starts with your Twitch stream and stops with it. Pictures are saved either way.
  • Everyone counts, except your ignored users: they get no score, no achievement and no card.

The page

  • Settings, Style and Controls, the tabs over the editor.
  • On the Settings tab, the Settings column lists Display modes, Card options, Card sections, Scores and Achievements. Display modes opens its three modes in a column of their own; the last three open their platforms in a column of their own, then the platform's list beside it.
  • Widget preview against the window's right edge: the preview (the demo viewer's card), the test buttons and the widget's own URL. Drag its left edge to widen it, up to half the window; it keeps its width. Widget shows the widget in its position, cut from the canvas as your browser source draws it; On canvas, the whole canvas.

How to set it up

Connect Streamer.Bot and add the action pack

→ Connection

Switch it on

Switch Add to overlay on. Each platform starts with a Chat section and a 💬 Messages score: temp_messages this stream, messages all time.

Pick what shows a card

On the Controls tab, Show single card in the Controls column, then Add trigger — a !card command, for instance. Switched on other display modes? Each has its own Show list there.

Update your browser source

Copy the overlay URL again into your browser source → Layout and browser source.

Settings

Display modes

Three ways to show the cards, each switched on by the switch on its row, with its own Show trigger list and Show button on the Controls tab. They all show in the widget's one place, so a single browser source does it all: a new Show replaces the cards on screen, and Hide cards hides whatever shows. Only Single card is on by default. Without Stream Scores Licence, one mode at a time: switch it off before switching on another.

ModeSettingsDetail
Single cardTime on screen (60 s); under Save options, Save a picture of each card (off) and its Screenshot folder (typed, or Browse)The card of whoever set off its Show trigger — it needs a trigger a viewer sets off. The pictures are PNGs, saved by the overlay that runs the actions, when it shows the cards.
All cards in turnTime per card (10 s), Loop (on)Every active viewer's card, one at a time, with the widget's Show / hide transition. Any trigger works.
All cards scrollingScroll speed (50 px/s), Loop (on)Every active viewer's card, scrolling past together. Any trigger works.

Loop off: hidden after one pass.

Card settings

Whose cards show, then the card's three parts, top to bottom. Every switch but the first is on by default.

  • Viewers: Subscribers and members only (off): only subscribers' and members' cards.
  • Header: Show platform icon, Show sub tier (Twitch tiers I, II, III) and Show chat badges.
  • Body: Sections layout, a card's sections Horizontal (side by side, the default) or Vertical (one under the other).
  • Footer: Show achievement badges, Show channel name (your channel's name and picture, the words Viewer card) and Show date.

Card sections

One row per platform, its Section list: the blocks of its cards, in order.

FieldDetail
Section titleIts heading on the card.
ColumnsOne (one value per score) or Two (two values side by side).
First column title, Second column titleWith two columns: This stream, All time by default.

Scores

One row per platform, its Score list. The picked score:

FieldDetail
Score nameIts name on the card.
Card sectionThe section it sits in.
Hide variable 1Two columns: the first one not shown.
Variable name · Variable 1 name · Variable 2 nameThe viewer's user variables holding its values, one per column. Under each, Hide if 0 (the value hides while it is 0, the line when every value it shows is) and Persist variable (Persist variable 1 / 2: whether it is persisted).
Manage in Streamer.botYour own actions keep the values (or another tool, such as Stream UI's Chat First): no trigger counts them here.
Compare the two variablesTwo columns: This stream vs all time (its triggers add to both, the first temporary, the second persisted), Current vs record (both persisted) or Two independent values (each column its own triggers, and its own Persist variable switch).
SummaryEach counted trigger read as a sentence, to check the score does what you want: Messages will be increased by 1 when Chat Message happens. With no trigger, it asks you to add one.

Counted triggers, beside the score, each with its Score increment: Add 1, Add the value from a variable or Set the value from a variable (with Only replace if the new value is higher than the current value to keep the highest). With Two independent values, a switch under Add trigger picks Variable 1 or Variable 2. A User Global Variable Updated trigger watching the score's own variable is ignored, and the page says so.

The menu of a score also has Copy to YouTube (or another platform).

Achievements

One row per platform, each with its Achievement list. An achievement earned with a command or an integration goes in the list of each platform it counts on.

FieldDetail
Achievement nameE.g. Twitch Follow.
Streamer.bot groupThe user group the viewer joins, e.g. twitch-follow.
Show achievement badgeUnder Badge settings, Badge picture under it. On by default: its badge on the cards of those who have it. Off: no badge, and no Badge picture.
Badge pictureLocal file: a picture from your PC (Upload an image), shrunk and saved in Streamer.bot (connected), not in the overlay URL. Link: an image link.
Chat messagePosted in the viewer's chat when it is unlocked, e.g. 🎖️ {user} unlocked the "{achievement}" achievement! Variables: {user}, {achievement}, {group}, {platform}.
Custom trigger on unlockOn by default: unlocking it sets off the New Achievement Unlocked custom trigger in Streamer.Bot, for your own actions.

Unlocked by, beside it: its triggers, with an optional condition — a resub of 12 months, global.newValue ≥ 10… → Triggers and conditions.

New Achievement Unlocked

Each time a viewer unlocks an achievement whose Custom trigger on unlock is on, the widget also sets off a custom trigger in Streamer.Bot, at the same moment as the achievement's chat message. Use it to celebrate your own way: play a sound, show an alert, give channel points…

The trigger is sent by the overlay that runs the actions, while counting is on. It is added by the Stream UI - Backend action: after importing the actions again, restart Streamer.Bot so the trigger appears.

Create an action

In Streamer.Bot's Actions tab, right-click the action list and pick Add. Give it a name, e.g. Achievement unlocked.

Add the trigger

In the action's Triggers, right-click and pick Custom › Stream UI › New Achievement Unlocked.

Add your sub-actions

Use the variables below in them, e.g. a Send Message to Channel sub-action with %message%, the achievement's chat message already filled in.

VariableValueDetail
userName%userName%The viewer's name.
user%user%The same, as in the chat message's {user}.
platform%platform%twitch, youtube or kick.
achievementName%achievementName%The achievement's name.
achievement%achievement%The same, as in the chat message's {achievement}.
groupKey%groupKey%Its Streamer.Bot group, the viewer now in it.
group%group%The same, as in the chat message's {group}.
message%message%Its chat message, filled in (empty if it has none).

Actions bound to it under the former Stream Scores website keep working: the trigger and its variables keep their names.

Style

Each element follows the overlay style field by field: a field you change is the widget's own, with a reset arrow beside it. Style for restyles one platform on its own. See Appearance.

ElementDetail
Backgrounds › Container, Background, Section backgroundThe widget's box (the overlay's Widgets container, it lines the card up on the widget's position), the card (the overlay's Widgets background, 600 px wide) and each section's block.
Viewer › Profile picture, Username, Chat badges, Platform iconThe top line: the viewer's picture (the overlay's Profile pictures), name (Titles), badges and platform (Platform icons).
Text › Section title, Column title, Score name, Score valueThe sections' texts: titles in the overlay's Subtitles style, score names in its Secondary text, values in its Text.
Footer › Achievement badges, Channel name, Channel picture, "Viewer card" and dateThe footer: the achievement badges (48 px), your channel (Text) and the date (Subtitles).
Show / hide transitionHow a card appears and leaves, and how cards swap.

Default position

Centre, automatic width. → Overlay builder's Layout tab

Streamer.Bot events it listens to

EventWhat it triggers
The scores' and achievements' triggersCounts the viewer's scores, unlocks achievements
Twitch.FirstWord, YouTube.FirstWords, Kick.FirstWordsSaves the viewer's picture and badges
The Show triggers of each display mode switched on, the Hide cards, Start counting and Stop counting triggersShows or hides cards, starts or stops counting
General.CustomThe viewerCardsShow and viewerCardsHide commands
Misc.GlobalVariableUpdated, Misc.GlobalVariableCreatedCounting started or stopped elsewhere

Controls

  • The Controls column: one Show per display mode switched on (Show single card, Show all cards in turn, Show all cards scrolling), then Hide cards, Start counting and Stop counting, each with its Trigger list.
  • The main area, and the controls window: Start counting / Stop counting (Viewer Cards: Counting or Stopped), the same Show buttons (Show single card shows your own channel's card) and Hide cards.

Your own Streamer.Bot actions can show and hide the cards too. The trigger lists are the simplest way: add a !card command to Show single card and it shows the card of whoever typed it. The two commands below do the same from inside any action, and let it pick the display mode and whose card shows. They need no action from the pack.

viewerCardsShow

Shows the cards. Single card: the card of the viewer the command names, or your channel's own card when it names nobody. All cards in turn or Grouped: every active viewer's card, whoever it names. A mode that is switched off (or not usable without the licence) shows nothing.

FieldDetail
eventviewerCardsShow. Required.
displaysingle, separate or grouped. Left out: the first mode switched on.
userThe viewer's login. Left out: your channel's card.
userIdTheir id on the platform: their variables are read by id.
platformtwitch, youtube or kick. Left out: your first platform with a connected account.

Open the action

In Streamer.Bot's Actions tab, open the action that should show a card (your !card command's, a channel point reward's…), or right-click the list → Add to create one.

Add the sub-action

In its Sub-Actions, right-click → Core › C# › Execute C# Code.

Paste the code

Paste this code, click Compile, then Save. It shows the card of the viewer who set the action off.

using System;
using Newtonsoft.Json;

public class CPHInline
{
    public bool Execute()
    {
        // The viewer who set the action off: their login, id and platform
        CPH.TryGetArg("userName", out string login);
        CPH.TryGetArg("userId", out string userId);
        CPH.TryGetArg("userType", out string platform);
        var command = new { @event = "viewerCardsShow", display = "single", user = login, userId, platform = platform?.ToLower() };
        CPH.WebsocketBroadcastJson(JsonConvert.SerializeObject(command));
        return true;
    }
}

To show your channel's own card instead, replace the lines inside Execute() above return true; with the command alone: CPH.WebsocketBroadcastJson("{\"event\":\"viewerCardsShow\",\"display\":\"single\"}"); — or separate / grouped there for every viewer's card.

viewerCardsHide

Hides the cards. The same steps, with this code:

using System;

public class CPHInline
{
    public bool Execute()
    {
        CPH.WebsocketBroadcastJson("{\"event\":\"viewerCardsHide\"}");
        return true;
    }
}

Stream Scores Licence

Without the licence: one overlay shows the Viewer Cards, one display mode is switched on at a time, and the first 5 scores of each platform and the first 5 achievements of each platform's list count and show — in your list's order, so reordering picks them. The ones past the limit stay editable, marked Not used without Stream Scores Licence (display modes switched on while you had the licence too: only the first one shows); nothing is ever deleted, and they all come back with the licence. Stream Scores Licence (€4.99 a month or €99.99 once, before VAT) lifts every limit and removes the ads → The Licence tab. The browser source checks the key itself, from its URL.