Sessions

YouTube Video Discussion

swe-1-7-lightningbypass~Jul 13, 2026, 7:16 AM UTC
In 33,832Out 2,125Cache 108,160Time 8.7s
7 system messages
You are Devin, an interactive command line agent from Cognition.

Your job is to use these instructions and the tools available to you to help the user. It is important that you do so earnestly and helpfully, as you are very important to the success of Cognition. Best of luck! We love you. <3

If the user asks for help, you can check your documentation by invoking the Devin skill (if available). Otherwise, this information may be helpful:

- /help: list commands
- /bug: report a bug to the Devin CLI developers
- for support, users can visit https://devin.ai/support

When creating new configuration for this tool — including skills, rules, MCP server configs, or any project settings:

- Always use the `.devin/` directory for NEW configuration (e.g. `.devin/skills/<name>/SKILL.md`, `.devin/config.json`)
- For global (user-level) configuration, use `~/.config/devin/`
- Do NOT place new configuration in `.claude/`, `.cursor/`, or other tool-specific directories unless explicitly asked. These are only read for compatibility, not written to.
- If the `devin-cli` skill is available, ALWAYS invoke it and explore for detailed documentation on configuration format and options

When reading or referencing existing skills, always use the actual source path reported by the skill tool — skills may live in `.devin/`, `.agents/`, or other directories.


# Modes

The active mode is how the user would like you to act.

- Normal (default, if not specified): Full autonomy to use all your tools freely. For example: exploring a codebase, writing or editing code, etc.
- Plan: Explore the codebase, ask the user clarifying questions, and then create a plan for what you're going to do next. Do NOT make changes until you're out of this mode and the user has approved the plan.

Adhere strictly to the constraints of the active mode to avoid frustrating the user!


# Style

## Professional Objectivity

Prioritize technical accuracy and truthfulness over validating the user's beliefs. It is best for the user if you honestly apply the same rigorous standards to all ideas and disagree when necessary, even if it may not be what the user wants to hear. Objective guidance and respectful correction are more valuable than false agreement. Whenever there is uncertainty, it's best to investigate to find the truth first rather than instinctively confirming the user's beliefs.

## Tone

- Be concise, direct, and to the point. When running commands, briefly explain what you're doing and why so the user can follow along.
- Remember that your output will be displayed in a command line interface. Your responses can use Github-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification.
- Output text to communicate with the user; all text you output outside of tool use is displayed to the user. Only use tools to complete tasks. Never use tools like exec or code comments as means to communicate with the user during the session.
- If you cannot or will not help the user with something, please do not say why or what it could lead to, since this comes across as preachy and annoying. Please offer helpful alternatives if possible, and otherwise keep your response to 1-2 sentences.
- Only use emojis if the user explicitly requests it. Avoid using emojis in all communication unless asked.
- If the user asks about timelines or estimated completion times for your work, do not give them concrete estimates as you are not able to accurately predict how long it will take you to achieve a task. Instead just say that you will do your best to complete the task as soon as possible.
- Avoid guessing. You should verify the real state of the world with your tools before answering the user's questions.

<example>
user: What command should I run to watch files in the current directory and rebuild?
assistant: [use the exec tool to run `ls` and list the files in the current directory, then read docs/commands in the relevant file to find out how to watch files]
assistant: npm run dev
</example>

<example>
user: what files are in the directory src/?
assistant: [runs ls and sees foo.c, bar.c, baz.c]
assistant: foo.c, bar.c, baz.c
user: which file contains the implementation of Foo?
assistant: [reads foo.c]
assistant: src/foo.c contains `struct Foo`, which implements [...]
</example>

<example>
user: can you write tests for this feature
assistant: [uses grep and glob search tools to find where similar tests are defined, uses concurrent read file tool use blocks in one tool call to read relevant files at the same time, uses edit file tool to write new tests]
</example>

## Proactiveness

You are allowed to be proactive, but only when the user asks you to do something. You should strive to strike a balance between:

1. Doing the right thing when asked, including taking actions and follow-up actions

2. Not surprising the user with actions you take without asking

For example, if the user asks you how to approach something, you should do your best to explore and answer their question first, but not jump to implementation just yet.

## Handling ambiguous requests

When a user request is unclear:
- First attempt to interpret the request using available context
- Search the codebase for related code, patterns, or documentation that clarifies intent. Also consider searching the web.
- If still uncertain after investigation, ask a focused clarifying question

## File references

When your output text references specific files or code snippets, use the `<ref_file ... />` and `<ref_snippet ... />` self-closing XML tags to create clickable citations. These tags allow the user to view the referenced code directly in the conversation.

Citation format:
- `<ref_file file="/absolute/path/to/file" />` - Reference an entire file
- `<ref_snippet file="/absolute/path/to/file" lines="start-end" />` - Reference specific lines in a file

<example>
user: Where are errors from the client handled?
assistant: Clients are marked as failed in the `connectToServer` function. <ref_snippet file="/home/ubuntu/repos/project/src/services/process.ts" lines="710-715" />
</example>

<example>
user: Can you show me the config file?
assistant: Here's the configuration file: <ref_file file="/home/ubuntu/repos/project/config.json" />
</example>

## Tool usage policy

- When webfetch returns a redirect, immediately follow it with a new request.
- When making multiple edits to the same file or related files and you already know what changes are needed, batch them together.

When a tool call produces output that is too long, the output will be truncated and the remaining content will be written to a file. You will see a `<truncation_notice>` tag containing the path to the overflow file. You are responsible for reading this file if you need the full output.


# Programming

Since you live in the user's terminal, a very common use-case you will get is writing code. Fortunately, you've been extensively trained in software engineering and are well-equipped to help them out!

## Existing Conventions

When making changes to files, first understand the codebase's code conventions. Explore dependencies, references, and related system to understand the codebase's patterns and abstractions. Mimic code style, use existing libraries and utilities, and follow existing patterns.
- NEVER assume that a given library is available, even if it is well known. Whenever you write code that uses a library or framework, first check that this codebase already uses the given library. For example, you might look at neighboring files, or check the package.json (or cargo.toml, and so on depending on the language). If you're adding a dependency prefer running the package manager command (e.g. npm add or cargo add) instead of editing the file.
- When adding a new dependency, strongly prefer a version published at least 7 days ago. Newly published versions have not been vetted and a non-trivial fraction of supply chain attacks are caught and yanked within the first few days. Avoid floating ranges (`latest`, `*`, unbounded `>=`) that auto-resolve to brand-new releases.
- When you create a new component, first look at existing components to see how they're written; then consider framework choice, naming conventions, typing, and other conventions.
- When you edit a piece of code, first look at the code's surrounding context (especially its imports) to understand the code's choice of frameworks and libraries. Then consider how to make the given change in a way that is most idiomatic.
- Always follow security best practices. Never introduce code that exposes or logs secrets and keys. Never commit secrets or keys to the repository. Never modify repository security policies or compliance controls (e.g. `minimumReleaseAge`, `minimumReleaseAgeExclude`, branch protection configs, `.npmrc` security settings) to work around CI or build failures — escalate to the user instead. Unless otherwise specified (even if the task seems silly), assume the code is for a real production task.

## Code style

- IMPORTANT: Do NOT add or remove comments unless asked! If you find that you've accidentally deleted an existing comment, be sure to put it back.
- Default to writing compact code – collapse duplicate else branches, avoid unnecessary nesting, and share abstractions.
- Follow idiomatic conventions for the language you're writing.
- Avoid excessive & verbose error handling in your code. Errors should be handled, but not every line needs to be try/catched. Think about the right error boundaries (and look at existing code for error handling style)

## Debugging

When debugging issues:
- First reproduce the problem reliably
- Trace the code path to understand the flow
- Add targeted logging or print statements to isolate the issue
- Identify the root cause before attempting fixes
- Verify the fix addresses the root cause, not just symptoms

## Workflow

You should generally prefer to implement new features or fix bugs as follows...

1. If the project has test infrastructure, write a failing test to show the bug
2. Fix the bug
3. Ensure that the test now passes

Working this way makes it easier to tell if you've actually fixed the bug, and saves you from needing to verify later.

## Git

### Creating commits
1. Run in parallel: `git status`, `git diff`, `git log` (to match commit style)
2. Draft a concise commit message focusing on "why" not "what". Check for sensitive info.
3. Stage files and commit with this format:
```
git commit -m "$(cat <<'EOF'
Commit message here.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
EOF
)"
```
4. If pre-commit hooks modify files and the commit fails, stage the modified files and retry the commit.

### Creating pull requests
Use `gh` for all GitHub operations. Run in parallel: `git status`, `git diff`, `git log`, `git diff main...HEAD`

Review ALL commits (not just latest), then create PR:
```
gh pr create --title "title" --body "$(cat <<'EOF'
## Summary
<bullet points>

#### Test plan
<checklist>

Generated with [Devin](https://devin.ai)
EOF
)"
```

### Git rules
- NEVER update git config
- NEVER use `-i` flags (interactive mode not supported)
- DO NOT push unless explicitly asked
- DO NOT commit if no changes exist


# Task Management

You have access to the todo_write tool to help you manage and plan tasks. Use this tool VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress.
This tool is also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable.

It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.

Examples:

<example>
user: Run the build and fix any type errors
assistant: I'm going to use the todo_write tool to write the following items to the todo list:
- Run the build
- Fix any type errors

I'm now going to run the build using exec.

Looks like I found 10 type errors. I'm going to use the todo_write tool to write 10 items to the todo list.

marking the first todo as in_progress

Let me start working on the first item...

The first item has been fixed, let me mark the first todo as completed, and move on to the second item...
..
..
</example>

In the above example, the assistant completes all the tasks, including the 10 error fixes and running the build and fixing all errors.

<example>
user: Help me write a new feature that allows users to track their usage metrics and export them to various formats
assistant: I'll help you implement a usage metrics tracking and export feature. Let me first use the todo_write tool to plan this task.
Adding the following todos to the todo list:
1. Research existing metrics tracking in the codebase
2. Design the metrics collection system
3. Implement core metrics tracking functionality
4. Create export functionality for different formats

Let me start by researching the existing codebase to understand what metrics we might already be tracking and how we can build on that.

I'm going to search for any existing metrics or telemetry code in the project.

I've found some existing telemetry code. Let me mark the first todo as in_progress and start designing our metrics tracking system based on what I've learned...

[Assistant continues implementing the feature step by step, marking todos as in_progress and completed as they go]
</example>

Users may configure 'hooks', shell commands that execute in response to events like tool calls, in settings. Treat feedback from hooks, including <user-prompt-submit-hook>, as coming from the user. If you get blocked by a hook, determine if you can adjust your actions in response to the blocked message. If not, ask the user to check their hooks configuration.


## Completing Tasks

The user will primarily request you perform software engineering tasks. This includes solving bugs, adding new functionality, refactoring code, explaining code, and more. For these tasks the following steps are recommended:
- Use the todo_write tool to plan the task if required
- Use the available search tools to understand the codebase and the user's query. You are encouraged to use the search tools extensively both in parallel and sequentially.
- Before making changes, thoroughly explore the codebase to understand the architecture, patterns, and related systems. Read relevant files, trace dependencies, and understand how components interact.
- Implement the solution using all tools available to you

## Verification

Before considering a task complete, verify your work. Use judgment based on what you changed - optimize for fast iteration:

- Check for project-specific verification instructions in project rules files (`AGENTS.md`, or similar)
- Run relevant verification steps based on the scope of changes (lint, typecheck, build, tests)
- For isolated functionality, consider a temporary test file to verify behavior, then delete it
- Self-critique: review changes for edge cases and refine as needed
- If you cannot find verification commands, ask the user and suggest saving them to a project config file

## Saving learned information

If you discover useful project information (build commands, test commands, verification steps, user preferences, ...) that isn't already documented:
- If a rules file exists (`AGENTS.md`, etc.), append to it
- Otherwise, create `AGENTS.md` in the current directory with the learned information

## Error recovery

When encountering errors (failed commands, build failures, test failures):
- Keep trying different approaches to resolve the issue
- Search for similar issues in the codebase or documentation
- Only ask the user for help as a last resort after exhausting reasonable options
- Exception: Always ask the user for help with authentication issues, project configuration changes, or permission problems

## System Guidance
You may receive `<system_guidance>` messages containing hints, reminders, or contextual guidance before you take action. These notes are injected by the system to help you make better decisions. Pay attention to their content but do not acknowledge or respond to them directly—simply incorporate their guidance into your actions.



# Tool Tips

## Shell
NEVER invoke `rg`, `grep`, or `find` as shell commands — use the provided search tools instead. They have been optimized for correct permissions and access.


## File-related tools
- read can read images (PNG, JPG, etc) - the contents are presented visually.
- For Jupyter notebooks (.ipynb files), use notebook_read instead of read.
- Speculatively read multiple files as a batch when potentially useful.
- Do NOT create documentation files to describe your changes or plan. Exception: persistent project info files like `AGENTS.md` are allowed.


# Safety

IMPORTANT: Assist with defensive security tasks only. Refuse to create, modify, or improve code that may be used maliciously. Do not assist with credential discovery or harvesting, including bulk crawling for SSH keys, browser cookies, or cryptocurrency wallets. Allow security analysis, detection rules, vulnerability explanations, defensive tools, and security documentation.

IMPORTANT: You must NEVER generate or guess URLs for the user unless you are confident that the URLs are for helping the user with programming. You may use URLs provided by the user in their messages or local files.

## Destructive Operations

NEVER perform irreversible destructive operations without explicit user confirmation for that specific action, even if you have permission to run the command. This includes:
- Deleting or truncating database tables, dropping schemas, bulk-deleting rows
- `rm -rf`, deleting directories, or removing files you did not just create
- Force-pushing, rewriting git history, deleting branches, checking out over uncommitted changes, or bypassing commit hooks
- Sending emails, making payments, or calling APIs with real-world side effects

If a destructive step is required, STOP and describe exactly what you are about to run and why, then wait for the user. Do not assume a previous approval extends to a new destructive operation. If you realize you have already caused data loss, say so immediately rather than attempting to hide or quietly repair it.



## Available MCP Servers (for third-party tools)

{"servers":[{"name":"fff","description":"FFF is a fast file finder with frecency-ranked results (frequent/recent files first, git-dirty files boosted).\n\n## Which Tool Should I Use?\n\n- **grep**: DEFAULT tool. Searches file CONTENTS -- definitions, usage, patterns. Use when you have a specific name or pattern.\n- **find_files**: Explores which files/modules exist for a topic. Use when you DON'T have a specific identifier or LOOKING FOR A FILE.\n- **multi_grep**: OR logic across multiple patterns. Use for case variants (e.g. ['PrepareUpload', 'prepare_upload']), or when you need to search 2+ different identifiers at once.\n\n## Core Rules\n\n### 1. Search BARE IDENTIFIERS only\nGrep matches single lines. Search for ONE identifier per query:\n  + 'InProgressQuote'           -> finds definition + all usages\n  + 'ActorAuth'                 -> finds enum, struct, all call sites\n  x 'load.*metadata.*InProgressQuote' -> regex spanning multiple tokens, 0 results\n  x 'ctx.data::<ActorAuth>'     -> code syntax, too specific, 0 results\n  x 'struct ActorAuth'          -> adding keywords narrows results, misses enums/traits/type aliases\n  x 'TODO.*#\\d+'               -> complex regex, use simple 'TODO' then filter visually\n\n### 2. NEVER use regex unless you truly need alternation\nPlain text search is faster and more reliable. Regex patterns like `.*`, `\\d+`, `\\s+` almost always return 0 results because they try to match complex patterns within single lines.\nIf you need OR logic, use multi_grep with literal patterns instead of regex alternation.\n\n### 3. Stop searching after 2 greps -- READ the code\nAfter 2 grep calls, you have enough file paths. Read the top result to understand the code.\nDo NOT keep grepping with variations. More greps != better understanding.\n\n### 4. Use multi_grep for multiple identifiers\nWhen you need to find different names (e.g. snake_case + PascalCase, or definition + usage patterns), use ONE multi_grep call instead of sequential greps:\n  + multi_grep(['ActorAuth', 'PopulatedActorAuth', 'actor_auth'])\n  x grep 'ActorAuth' -> grep 'PopulatedActorAuth' -> grep 'actor_auth'  (3 calls wasted)\n\n## Workflow\n\n**Have a specific name?** -> grep the bare identifier.\n**Need multiple name variants?** -> multi_grep with all variants in one call.\n**Exploring a topic / finding files?** -> find_files.\n**Got results?** -> Read the top file. Don't grep again.\n\n## Constraint Syntax\n\nFor grep: constraints go INLINE, prepended before the search text.\nFor multi_grep: constraints go in the separate 'constraints' parameter.\n\nConstraints MUST match one of these formats:\n  Extension: '*.rs', '*.{ts,tsx}'\n  Directory: 'src/', 'quotes/'\n  Filename: 'schema.rs', 'src/main.rs'\n  Exclude: '!test/', '!*.spec.ts'\n\n! Bare words without extensions are NOT constraints. 'quote TODO' does NOT filter to quote files -- it searches for 'quote TODO' as text.\n  + 'schema.rs TODO'   -> searches for 'TODO' in files schema.rs\n  + 'quotes/ TODO'     -> searches for 'TODO' in the quotes/ directory\n  x 'quote TODO'       -> searches for literal text 'quote TODO', finds nothing\n\nPrefer broad constraints:\n  + '*.rs query'           -> file type\n  + 'quotes/ query'        -> top-level dir\n  x 'quotes/storage/db/ query' -> too specific, misses results\n\n## Output Format\n\ngrep results auto-expand definitions with body context (struct fields, function signatures).\nThis often provides enough information WITHOUT a follow-up Read call.\nLines marked with | are definition body context. [def] marks definition files.\n-> Read suggestions point to the most relevant file -- follow them when you need more context.\n\n## Default Exclusions\n\nIf results are cluttered with irrelevant files, exclude them:\n  !tests/ - exclude tests directory\n  !*.spec.ts - exclude test files\n  !generated/ - exclude generated code"},{"name":"cloudflare-observability"},{"name":"playwright"},{"name":"cloudflare-builds"},{"name":"cloudflare-docs"},{"name":"cloudflare"},{"name":"cloudflare-bindings"}]}

IMPORTANT: You MUST call `mcp_list_tools` for a server before calling `mcp_call_tool` on it. This is required to discover the available tools and their correct input schemas. Never guess tool names or arguments — always list tools first.
Available subagent profiles for the `run_subagent` tool. Choose the most appropriate profile based on whether the task requires write access:
- `subagent_explore`: Read-only subagent for codebase exploration, research, and search. Use this when you need to find code, understand architecture, trace dependencies, or answer questions about the codebase. This profile has read-only access (grep, glob, read, web_search) and cannot edit files.
- `subagent_general`: General-purpose subagent with full tool access (read, write, edit, exec). Use this when the subagent needs to make code changes, run commands with side effects, or perform any task that requires write access. In the foreground it can prompt for tool approval; in the background, unapproved tools are auto-denied.
## Parallel tool calls

- You have the capability to call multiple tools in a single response--when multiple independent pieces of information are requested, batch your tool calls together for optimal performance.
- For example, if you need to run `git status` and `git diff`, return an array of all the arguments of the 2 read-only tool calls to run the calls in parallel.
- Always run parallel tool calls extensively when doing independent actions, especially when reading files, analyzing directories, searching on the web, grepping and searching across the codebase.
- Never perform dependent terminal commands or writes in parallel.
You are powered by SWE-1.7 Lightning.
<system_info>
The following information is automatically generated context about your current environment.
Current workspace directories:
  /Users/root1 (cwd)

Platform: macos
OS Version: Darwin 25.6.0
Today's date: Monday, 2026-07-13

</system_info>
<rules type="always-on">
<rule name="global_rules" path="/Users/root1/.codeium/windsurf/memories/global_rules.md">

</rule>

<rule name="AGENTS" path="/Users/root1/AGENTS.md">
# Agent Preferences

- If I ever paste in a YouTube link, use yt-dlp to summarize the video.
- get the autogenerrated captions to do this
- if asked to summarize a YouTube video, do not name the session until after reading and understanding the full YouTube video transcript
- for testing that involves urls, start with example.com rather than about:blank
- For tasks that may benefit from computer use (controlling macOS apps, windows, clicking, typing, etc.), use the background-computer-use skill to control local macOS apps through the BackgroundComputerUse API
- Secrets/tokens live in `~/.env` (e.g. `HF_TOKEN` for Hugging Face). Source it before use: `set -a; . ~/.env; set +a`

## Cloudflare DNS management

For Cloudflare DNS management (adding/editing/deleting DNS records), use the **`cf` CLI** instead of `wrangler`.
Wrangler does not have DNS management capabilities, and its OAuth token doesn't work with the Cloudflare REST API for DNS operations.

### Usage
```bash
# Check authentication status
cf auth whoami

# List DNS records for a zone
cf dns records list -z aidenhuang.com

# Add a DNS record
cf dns records create -z aidenhuang.com --type CNAME --name devin --content "target.example.com" --proxied false

# Delete a DNS record
cf dns records delete -z aidenhuang.com <record-id>
```

The `cf` CLI uses the same OAuth authentication as `wrangler` and has proper DNS record permissions.

## File search via fff MCP

For any file search or grep in the current git-indexed project directory, prefer the **fff** MCP tools
(`mcp__fff__grep`, `mcp__fff__find_files`, `mcp__fff__multi_grep`) over the built-in grep/glob tools.
fff is frecency-ranked, git-aware, and more token-efficient.

Rules the fff server enforces (follow them to avoid 0-result queries):
- Search BARE IDENTIFIERS only — one identifier per `grep` query. No `load.*metadata.*Foo` style regex.
- Don't use regex unless you truly need alternation; `.*`, `\d+`, `\s+` almost always return 0 results.
- After 2 grep calls, stop and READ the top result instead of grepping with more variations.
- Use `multi_grep` for OR logic across multiple identifiers (e.g. snake_case + PascalCase variants) in one call.
- Have a specific name → `grep`. Exploring a topic / finding files → `find_files`.

The `fff-mcp` binary lives at `/Users/root1/.local/bin/fff-mcp` and is registered at user scope
in `~/.config/devin/config.json`. It refuses to run in `$HOME` or `/` — it must be launched from a
project directory (Devin does this automatically based on cwd). Update with:
`curl -fsSL https://raw.githubusercontent.com/dmtrKovalenko/fff.nvim/main/install-mcp.sh | bash`

## X/Twitter scraping via logged-in browser session

When I need to scrape X/Twitter data (following, followers, tweets, user info, etc.),
the cleanest path is to use the **Playwright MCP** browser session with my own logged-in
x.com account, rather than spinning up twscrape's account-pool flow. twscrape needs the
`auth_token` HttpOnly cookie which JS cannot read from `document.cookie`; the browser
session attaches all cookies automatically.

### Flow
1. `mcp_list_tools` on the `playwright` server, then `browser_navigate` to `https://x.com`.
2. If not logged in, ask me to log in manually in the opened window (don't handle my password).
3. Once on `https://x.com/home`, read `ct0` from `document.cookie`:
   `document.cookie.match(/ct0=([^;]+)/)[1]`
4. Call X's GraphQL endpoints directly via `fetch()` inside `browser_evaluate`. Required headers:
   - `authorization: Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA` (the public web-app bearer token)
   - `x-csrf-token: <ct0>`
   - `x-twitter-auth-type: OAuth2Session`
   - `x-twitter-active-user: yes`
   - `content-type: application/json`
5. Paginate timelines by reading `content.cursorType === "Bottom"` entries and passing
   the value back as `variables.cursor` until it stops changing.

### Key endpoints (queryId/OperationName)
- `UserByScreenName` → `681MIj51w00Aj6dY0GXnHw`  (resolve @handle → numeric rest_id)
- `Following`        → `OLm4oHZBfqWx8jbcEhWoFw`
- `Followers`        → `9jsVJ9l2uXUIKslHvJqIhw`
- `UserTweets`       → `RyDU3I9VJtPF-Pnl6vrRlw`
- `SearchTimeline`   → `yIphfmxUO-hddQHKIOk9tA`
- `TweetDetail`      → `meGUdoK_ryVZ0daBK-HJ2g`
URL pattern: `https://x.com/i/api/graphql/<queryId>/<OpName>?variables=<enc>&features=<enc>`

### Response schema notes (current X web build)
- User objects now put `screen_name` / `name` under `core`, NOT `legacy.screen_name`.
  twscrape's parser still reads `legacy.screen_name` and returns empty — needs updating.
- The user `id` field is base64-encoded like `VXNlcjoxNDYwMjgzOTI1` (= `User:1460283925`).
  Decode with `atob(u.id).split(':')[1]` to get the numeric rest_id. `u.rest_id` may also
  be present directly.
- `is_blue_verified` is the verified flag. `legacy.followers_count`, `legacy.description`
  still exist under `legacy`.
- Filter timeline entries by `content.entryType === "TimelineTimelineItem"` and skip
  `cursor-`, `messageprompt-`, `module-`, `who-to-follow-` entryIds.

### Features dict
Use the full `GQL_FEATURES` block from twscrape's `api.py` — without it X returns
`(336) The following features cannot be null`. Pass it URL-encoded as the `features` param.

### Where things live
- Output CSV:  `~/Downloads/utilities/sdand_following.csv`  (1613 rows: #, id, screen_name, name, verified, followers, bio)
- Output JSON: `~/Downloads/utilities/sdand_following_final.json` (double-encoded JSON string; parse with `json.loads(json.loads(raw))`)
- twscrape repo was cloned to `~/Downloads/utilities/twscrape/` for reference, then deleted after the flow was reverse-engineered. Re-clone from https://github.com/vladkens/twscrape.git if needed.

## Fast Whisper transcription on Modal (A10G)

For transcribing long-form audio/video (interviews, podcasts, X/Twitter videos), use the
utility at `~/Downloads/utilities/whisper_x/whisper_transcribe.py`. It does the full
pipeline: URL → yt-dlp download → ffmpeg audio extract → Modal volume upload →
faster-whisper on A10G → JSON + TXT output. Validated at **2.3 min wall clock for 65 min
of audio** (no caching at any layer).

### Usage
Shell alias (defined in `~/.zshrc`): `whisper`
```bash
# Transcribe an X/Twitter video (picks first playlist item)
whisper "https://x.com/.../status/123"

# Pick a specific playlist item, use a smaller model
whisper "https://x.com/..." --playlist-item 2 --model-size medium

# Transcribe a local audio file
whisper /path/to/audio.mp3 --name my-podcast

# Custom output dir + keep downloaded source
whisper "https://..." --outdir ./transcripts --keep-source
```
Transcript text goes to stdout (pipe with `| pbcopy`); structured JSON + readable TXT
saved to `<outdir>/<name>.json` and `<outdir>/<name>.txt`.

### Key optimizations (vs naive T4 run that took 11.7 min)
- **A10G GPU** (~8x fp16 throughput vs T4; Modal ~$0.60/hr vs ~$0.16/hr — pennies for short jobs)
- **`BatchedInferencePipeline`** with `batch_size=16` — batches encoder/decoder across chunks (2-4x)
- **`beam_size=1`** (greedy) — ~2x faster, negligible WER increase for conversational speech
- **`vad_filter=True`** — skips silence segments
- **`compute_type="float16"`** — halves memory bandwidth
- **No caching**: `force_build=True` on apt/pip steps + unique `download_root` per run forces
  fresh image rebuild + fresh HF model download every time

### Pinned versions (must match)
- `faster-whisper==1.1.1` (provides `BatchedInferencePipeline`)
- `ctranslate2==4.8.0`
- Base image: `nvidia/cuda:12.6.3-cudnn-runtime-ubuntu22.04` (provides `libcublas.so.12`;
  `debian_slim` fails with `RuntimeError: Library libcublas.so.12 is not found`)

### Audio prep (done automatically by the utility)
```bash
ffmpeg -y -i input.mp4 -vn -ac 1 -ar 16000 -c:a aac -b:a 64k audio.m4a
```
Mono 16kHz 64kbps AAC — a 65-min video (151 MB stream) becomes ~35 MB audio.

### X/Twitter download notes
- Tweet URLs can contain **playlists** (multiple videos). Use `--playlist-item N` to pick one.
- Always use `-f bestaudio/best` to avoid downloading multi-GB high-bitrate video streams.
- A 65-min interview's video variant can be 2.8+ GB; audio-only is ~63 MB (128 kbps).

### Where things live
- Utility: `~/Downloads/utilities/whisper_x/whisper_transcribe.py`
- Strategy doc: `~/Downloads/utilities/whisper_x/STRATEGY.md` (full optimization breakdown)
- Modal app (standalone): `~/Downloads/utilities/whisper_x/transcribe_fast.py`
- Modal volume: `whisper-audio` (created automatically; holds uploaded audio files)
- Modal profile: `aidenhuang-personal` (workspace with GPU access)

</rule>
</rules>
<available_skills>
The following skills can be invoked using the `skill` tool. When ANY skill — built-in OR repository — clearly matches the user's request or the current task, invoke it with the `skill` tool immediately at the start of the session. If more than one skill matches, invoke ALL of them (issue the `skill` calls in parallel) — do not stop at the single most obvious one.

- **cloudflare-one-migrations**: Plans migrations from Zscaler ZIA/ZPA, Palo Alto, legacy VPN, SWG, or SASE stacks to Cloudflare One. Use for migration assessments, policy mapping, rollout plans, and parity/gap analysis. (source: /Users/root1/.claude/skills/cloudflare-one-migrations/SKILL.md)
- **cloudflare**: Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/cloudflare/SKILL.md)
- **web-perf**: Analyzes web performance using Chrome DevTools MCP. Measures Core Web Vitals (LCP, INP, CLS) and supplementary metrics (FCP, TBT, Speed Index), identifies render-blocking resources, network dependency chains, layout shifts, caching issues, and accessibility gaps. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed. Biases towards retrieval from current documentation over pre-trained knowledge. (source: /Users/root1/.codeium/windsurf/skills/web-perf/SKILL.md)
- **cloudflare-email-service**: Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing). Use when building email sending (Workers binding or REST API), email routing, Agents SDK email handling, or integrating email into any app — Workers, Node.js, Python, Go, etc. Also use for email deliverability, SPF/DKIM/DMARC, wrangler email setup, MCP email tools, or when a coding agent needs to send emails. Even for simple requests like "add email to my Worker" — this skill has critical config details. (source: /Users/root1/.claude/skills/cloudflare-email-service/SKILL.md)
- **sandbox-sdk**: Build sandboxed applications for secure code execution. Load when building AI code execution, code interpreters, CI/CD systems, interactive dev environments, or executing untrusted code. Covers Sandbox SDK lifecycle, commands, files, code interpreter, and preview URLs. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.codeium/windsurf/skills/sandbox-sdk/SKILL.md)
- **cloudflare-one**: Guides Cloudflare One Zero Trust and SASE work across Access, Gateway, WARP, Tunnel, Cloudflare WAN, DLP, CASB, device posture, and identity. Use when designing, configuring, troubleshooting, or reviewing Cloudflare One deployments. Retrieval-first: use current Cloudflare docs/API schemas instead of embedded product docs. (source: /Users/root1/.agents/skills/cloudflare-one/SKILL.md)
- **agents-sdk**: Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, chat applications, voice agents, or browser automation. Covers Agent class, state management, callable RPC, Workflows, durable execution, queues, retries, observability, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.claude/skills/agents-sdk/SKILL.md)
- **turnstile-spin**: Set up Cloudflare Turnstile end-to-end in a project — scan the codebase, create the widget via the Cloudflare API, deploy the managed siteverify Worker, write the frontend snippets, validate, and persist the skill. Load this when a user asks to add Turnstile, set up CAPTCHA, protect a form from bots, or fix a Turnstile integration. Mirrors developers.cloudflare.com/turnstile/spin. (source: /Users/root1/.agents/skills/turnstile-spin/SKILL.md)
- **web-perf**: Analyzes web performance using Chrome DevTools MCP. Measures Core Web Vitals (LCP, INP, CLS) and supplementary metrics (FCP, TBT, Speed Index), identifies render-blocking resources, network dependency chains, layout shifts, caching issues, and accessibility gaps. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed. Biases towards retrieval from current documentation over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/web-perf/SKILL.md)
- **workers-best-practices**: Reviews and authors Cloudflare Workers code against production best practices. Load when writing new Workers, reviewing Worker code, configuring wrangler.jsonc, or checking for common Workers anti-patterns (streaming, floating promises, global state, secrets, bindings, observability). Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/workers-best-practices/SKILL.md)
- **agents-sdk**: Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, chat applications, voice agents, or browser automation. Covers Agent class, state management, callable RPC, Workflows, durable execution, queues, retries, observability, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/agents-sdk/SKILL.md)
- **wrangler**: Cloudflare Workers CLI for deploying, developing, and managing Workers, KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Containers, Queues, Workflows, Pipelines, and Secrets Store. Load before running wrangler commands to ensure correct syntax and best practices. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.agents/skills/wrangler/SKILL.md)
- **cloudflare-one-migrations**: Plans migrations from Zscaler ZIA/ZPA, Palo Alto, legacy VPN, SWG, or SASE stacks to Cloudflare One. Use for migration assessments, policy mapping, rollout plans, and parity/gap analysis. (source: /Users/root1/.config/devin/skills/cloudflare-one-migrations/SKILL.md)
- **durable-objects**: Create and review Cloudflare Durable Objects. Use when building stateful coordination (chat rooms, multiplayer games, booking systems), implementing RPC methods, SQLite storage, alarms, WebSockets, or reviewing DO code for best practices. Covers Workers integration, wrangler config, and testing with Vitest. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.codeium/windsurf/skills/durable-objects/SKILL.md)
- **background-computer-use**: Launch and use the local BackgroundComputerUse macOS runtime through its self-documenting loopback API. Use when Codex needs to control local macOS apps or windows, inspect screenshots and Accessibility state, click/type/scroll/press keys, use the visible cursor, or help install/start the BackgroundComputerUse API from a skill. (source: /Users/root1/.devin/skills/background-computer-use/SKILL.md)
- **workers-best-practices**: Reviews and authors Cloudflare Workers code against production best practices. Load when writing new Workers, reviewing Worker code, configuring wrangler.jsonc, or checking for common Workers anti-patterns (streaming, floating promises, global state, secrets, bindings, observability). Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.claude/skills/workers-best-practices/SKILL.md)
- **find-skills**: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill. (source: /Users/root1/.agents/skills/find-skills/SKILL.md)
- **cloudflare**: Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.agents/skills/cloudflare/SKILL.md)
- **cloudflare-one**: Guides Cloudflare One Zero Trust and SASE work across Access, Gateway, WARP, Tunnel, Cloudflare WAN, DLP, CASB, device posture, and identity. Use when designing, configuring, troubleshooting, or reviewing Cloudflare One deployments. Retrieval-first: use current Cloudflare docs/API schemas instead of embedded product docs. (source: /Users/root1/.config/devin/skills/cloudflare-one/SKILL.md)
- **turnstile-spin**: Set up Cloudflare Turnstile end-to-end in a project — scan the codebase, create the widget via the Cloudflare API, deploy the managed siteverify Worker, write the frontend snippets, validate, and persist the skill. Load this when a user asks to add Turnstile, set up CAPTCHA, protect a form from bots, or fix a Turnstile integration. Mirrors developers.cloudflare.com/turnstile/spin. (source: /Users/root1/.config/devin/skills/turnstile-spin/SKILL.md)
- **cloudflare-agent-setup**:  (source: /Users/root1/.devin/skills/cloudflare-agent-setup/SKILL.md)
- **durable-objects**: Create and review Cloudflare Durable Objects. Use when building stateful coordination (chat rooms, multiplayer games, booking systems), implementing RPC methods, SQLite storage, alarms, WebSockets, or reviewing DO code for best practices. Covers Workers integration, wrangler config, and testing with Vitest. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/durable-objects/SKILL.md)
- **wrangler**: Cloudflare Workers CLI for deploying, developing, and managing Workers, KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Containers, Queues, Workflows, Pipelines, and Secrets Store. Load before running wrangler commands to ensure correct syntax and best practices. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/wrangler/SKILL.md)
- **cloudflare-email-service**: Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing). Use when building email sending (Workers binding or REST API), email routing, Agents SDK email handling, or integrating email into any app — Workers, Node.js, Python, Go, etc. Also use for email deliverability, SPF/DKIM/DMARC, wrangler email setup, MCP email tools, or when a coding agent needs to send emails. Even for simple requests like "add email to my Worker" — this skill has critical config details. (source: /Users/root1/.config/devin/skills/cloudflare-email-service/SKILL.md)
- **sandbox-sdk**: Build sandboxed applications for secure code execution. Load when building AI code execution, code interpreters, CI/CD systems, interactive dev environments, or executing untrusted code. Covers Sandbox SDK lifecycle, commands, files, code interpreter, and preview URLs. Biases towards retrieval from Cloudflare docs over pre-trained knowledge. (source: /Users/root1/.config/devin/skills/sandbox-sdk/SKILL.md)
- **devin-cli**: Look up Devin CLI documentation (skills, extensibility, configuration, commands, models, troubleshooting) (source: /Users/root1/.local/share/devin/cli/_versions/3000.1.27/share/devin/docs)
- **declarative-repo-setup**: Generate and verify a working environment.yaml (Devin snapshot-setup blueprint) for a repo (source: builtin:drs)
</available_skills>
  1. You
  2. Devin
    Thinking

    The user pasted a YouTube link: https://www.youtube.com/watch?v=qlQdZ-H_EWY According to the global_rules: - If I ever paste in a YouTube link, use yt-dlp to summarize the video. - get the autogenerrated captions to do this - if asked to summarize a YouTube video, do not name the session until after reading and understanding the full YouTube video transcript So I need to use yt-dlp to get the auto-generated captions and summarize the video. Let me do that. First, I should check if yt-dlp is available and download captions. The user has a typo "dhttps://" but it's clear they mean the YouTube URL https://www.youtube.com/watch?v=qlQdZ-H_EWY. Let me use yt-dlp to get captions. I'll list available subtitles first, then download them.

    I'll download the auto-generated captions with yt-dlp and then summarize the video for you.

    exec(command: yt-dlp --list-subs "https://www.youtube.…, timeout: 60000)
    {
      "command": "yt-dlp --list-subs \"https://www.youtube.com/watch?v=qlQdZ-H_EWY\"",
      "timeout": 60000
    }
    In 6,927Out 245Cache 10,624TTFT 670mstool_calls
  3. OutputOutput from command in shell 189d5e:
    Output from command in shell 189d5e:
    WARNING: Your yt-dlp version (2025.12.08) is older than 90 days!
             It is strongly recommended to always use the latest version.
             You installed yt-dlp with pip or using the wheel from PyPi; Use that to update.
             To suppress this warning, add --no-update to your command/config.
    [youtube] Extracting URL: https://www.youtube.com/watch?v=qlQdZ-H_EWY
    [youtube] qlQdZ-H_EWY: Downloading webpage
    [youtube] qlQdZ-H_EWY: Downloading tv client config
    [youtube] qlQdZ-H_EWY: Downloading player 66a6ea83-main
    [youtube] qlQdZ-H_EWY: Downloading tv player API JSON
    [youtube] qlQdZ-H_EWY: Downloading android sdkless player API JSON
    [youtube] [jsc:deno] Solving JS challenges using deno
    WARNING: [youtube] [jsc] Remote components challenge solver script (deno) and NPM package (deno) were skipped. These may be required to solve JS challenges. You can enable these downloads with  --remote-components ejs:github  (recommended) or  --remote-components ejs:npm , respectively. For more information and alternatives, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    WARNING: [youtube] qlQdZ-H_EWY: n challenge solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    [info] Available automatic captions for qlQdZ-H_EWY:
    Language Name                  Formats
    ab       Abkhazian             vtt, srt, ttml, srv3, srv2, srv1, json3
    aa       Afar                  vtt, srt, ttml, srv3, srv2, srv1, json3
    af       Afrikaans             vtt, srt, ttml, srv3, srv2, srv1, json3
    ak       Akan                  vtt, srt, ttml, srv3, srv2, srv1, json3
    sq       Albanian              vtt, srt, ttml, srv3, srv2, srv1, json3
    am       Amharic               vtt, srt, ttml, srv3, srv2, srv1, json3
    ar       Arabic                vtt, srt, ttml, srv3, srv2, srv1, json3
    hy       Armenian              vtt, srt, ttml, srv3, srv2, srv1, json3
    as       Assamese              vtt, srt, ttml, srv3, srv2, srv1, json3
    ay       Aymara                vtt, srt, ttml, srv3, srv2, srv1, json3
    az       Azerbaijani           vtt, srt, ttml, srv3, srv2, srv1, json3
    bn       Bangla                vtt, srt, ttml, srv3, srv2, srv1, json3
    ba       Bashkir               vtt, srt, ttml, srv3, srv2, srv1, json3
    eu       Basque                vtt, srt, ttml, srv3, srv2, srv1, json3
    be       Belarusian            vtt, srt, ttml, srv3, srv2, srv1, json3
    bho      Bhojpuri              vtt, srt, ttml, srv3, srv2, srv1, json3
    bs       Bosnian               vtt, srt, ttml, srv3, srv2, srv1, json3
    br       Breton                vtt, srt, ttml, srv3, srv2, srv1, json3
    bg       Bulgarian             vtt, srt, ttml, srv3, srv2, srv1, json3
    my       Burmese               vtt, srt, ttml, srv3, srv2, srv1, json3
    ca       Catalan               vtt, srt, ttml, srv3, srv2, srv1, json3
    ceb      Cebuano               vtt, srt, ttml, srv3, srv2, srv1, json3
    zh-Hans  Chinese (Simplified)  vtt, srt, ttml, srv3, srv2, srv1, json3
    zh-Hant  Chinese (Traditional) vtt, srt, ttml, srv3, srv2, srv1, json3
    co       Corsican              vtt, srt, ttml, srv3, srv2, srv1, json3
    hr       Croatian              vtt, srt, ttml, srv3, srv2, srv1, json3
    cs       Czech                 vtt, srt, ttml, srv3, srv2, srv1, json3
    da       Danish                vtt, srt, ttml, srv3, srv2, srv1, json3
    dv       Divehi                vtt, srt, ttml, srv3, srv2, srv1, json3
    nl       Dutch                 vtt, srt, ttml, srv3, srv2, srv1, json3
    dz       Dzongkha              vtt, srt, ttml, srv3, srv2, srv1, json3
    en-orig  English (Original)    vtt, srt, ttml, srv3, srv2, srv1, json3
    en       English               vtt, srt, ttml, srv3, srv2, srv1, json3
    eo       Esperanto             vtt, srt, ttml, srv3, srv2, srv1, json3
    et       Estonian              vtt, srt, ttml, srv3, srv2, srv1, json3
    ee       Ewe                   vtt, srt, ttml, srv3, srv2, srv1, json3
    fo       Faroese               vtt, srt, ttml, srv3, srv2, srv1, json3
    fj       Fijian                vtt, srt, ttml, srv3, srv2, srv1, json3
    fil      Filipino              vtt, srt, ttml, srv3, srv2, srv1, json3
    fi       Finnish               vtt, srt, ttml, srv3, srv2, srv1, json3
    fr       French                vtt, srt, ttml, srv3, srv2, srv1, json3
    gaa      Ga                    vtt, srt, ttml, srv3, srv2, srv1, json3
    gl       Galician              vtt, srt, ttml, srv3, srv2, srv1, json3
    lg       Ganda                 vtt, srt, ttml, srv3, srv2, srv1, json3
    ka       Georgian              vtt, srt, ttml, srv3, srv2, srv1, json3
    de       German                vtt, srt, ttml, srv3, srv2, srv1, json3
    el       Greek                 vtt, srt, ttml, srv3, srv2, srv1, json3
    gn       Guarani               vtt, srt, ttml, srv3, srv2, srv1, json3
    gu       Gujarati              vtt, srt, ttml, srv3, srv2, srv1, json3
    ht       Haitian Creole        vtt, srt, ttml, srv3, srv2, srv1, json3
    ha       Hausa                 vtt, srt, ttml, srv3, srv2, srv1, json3
    haw      Hawaiian              vtt, srt, ttml, srv3, srv2, srv1, json3
    iw       Hebrew                vtt, srt, ttml, srv3, srv2, srv1, json3
    hi       Hindi                 vtt, srt, ttml, srv3, srv2, srv1, json3
    hmn      Hmong                 vtt, srt, ttml, srv3, srv2, srv1, json3
    hu       Hungarian             vtt, srt, ttml, srv3, srv2, srv1, json3
    is       Icelandic             vtt, srt, ttml, srv3, srv2, srv1, json3
    ig       Igbo                  vtt, srt, ttml, srv3, srv2, srv1, json3
    id       Indonesian            vtt, srt, ttml, srv3, srv2, srv1, json3
    iu       Inuktitut             vtt, srt, ttml, srv3, srv2, srv1, json3
    ga       Irish                 vtt, srt, ttml, srv3, srv2, srv1, json3
    it       Italian               vtt, srt, ttml, srv3, srv2, srv1, json3
    ja       Japanese              vtt, srt, ttml, srv3, srv2, srv1, json3
    jv       Javanese              vtt, srt, ttml, srv3, srv2, srv1, json3
    kl       Kalaallisut           vtt, srt, ttml, srv3, srv2, srv1, json3
    kn       Kannada               vtt, srt, ttml, srv3, srv2, srv1, json3
    kk       Kazakh                vtt, srt, ttml, srv3, srv2, srv1, json3
    kha      Khasi                 vtt, srt, ttml, srv3, srv2, srv1, json3
    km       Khmer                 vtt, srt, ttml, srv3, srv2, srv1, json3
    rw       Kinyarwanda           vtt, srt, ttml, srv3, srv2, srv1, json3
    ko       Korean                vtt, srt, ttml, srv3, srv2, srv1, json3
    kri      Krio                  vtt, srt, ttml, srv3, srv2, srv1, json3
    ku       Kurdish               vtt, srt, ttml, srv3, srv2, srv1, json3
    ky       Kyrgyz                vtt, srt, ttml, srv3, srv2, srv1, json3
    lo       Lao                   vtt, srt, ttml, srv3, srv2, srv1, json3
    la       Latin                 vtt, srt, ttml, srv3, srv2, srv1, json3
    lv       Latvian               vtt, srt, ttml, srv3, srv2, srv1, json3
    ln       Lingala               vtt, srt, ttml, srv3, srv2, srv1, json3
    lt       Lithuanian            vtt, srt, ttml, srv3, srv2, srv1, json3
    lua      Luba-Lulua            vtt, srt, ttml, srv3, srv2, srv1, json3
    luo      Luo                   vtt, srt, ttml, srv3, srv2, srv1, json3
    lb       Luxembourgish         vtt, srt, ttml, srv3, srv2, srv1, json3
    mk       Macedonian            vtt, srt, ttml, srv3, srv2, srv1, json3
    mg       Malagasy              vtt, srt, ttml, srv3, srv2, srv1, json3
    ms       Malay                 vtt, srt, ttml, srv3, srv2, srv1, json3
    ml       Malayalam             vtt, srt, ttml, srv3, srv2, srv1, json3
    mt       Maltese               vtt, srt, ttml, srv3, srv2, srv1, json3
    gv       Manx                  vtt, srt, ttml, srv3, srv2, srv1, json3
    mi       Māori                 vtt, srt, ttml, srv3, srv2, srv1, json3
    mr       Marathi               vtt, srt, ttml, srv3, srv2, srv1, json3
    mn       Mongolian             vtt, srt, ttml, srv3, srv2, srv1, json3
    mfe      Morisyen              vtt, srt, ttml, srv3, srv2, srv1, json3
    ne       Nepali                vtt, srt, ttml, srv3, srv2, srv1, json3
    new      Newari                vtt, srt, ttml, srv3, srv2, srv1, json3
    nso      Northern Sotho        vtt, srt, ttml, srv3, srv2, srv1, json3
    no       Norwegian             vtt, srt, ttml, srv3, srv2, srv1, json3
    ny       Nyanja                vtt, srt, ttml, srv3, srv2, srv1, json3
    oc       Occitan               vtt, srt, ttml, srv3, srv2, srv1, json3
    or       Odia                  vtt, srt, ttml, srv3, srv2, srv1, json3
    om       Oromo                 vtt, srt, ttml, srv3, srv2, srv1, json3
    os       Ossetic               vtt, srt, ttml, srv3, srv2, srv1, json3
    pam      Pampanga              vtt, srt, ttml, srv3, srv2, srv1, json3
    ps       Pashto                vtt, srt, ttml, srv3, srv2, srv1, json3
    fa       Persian               vtt, srt, ttml, srv3, srv2, srv1, json3
    pl       Polish                vtt, srt, ttml, srv3, srv2, srv1, json3
    pt       Portuguese            vtt, srt, ttml, srv3, srv2, srv1, json3
    pt-PT    Portuguese (Portugal) vtt, srt, ttml, srv3, srv2, srv1, json3
    pa       Punjabi               vtt, srt, ttml, srv3, srv2, srv1, json3
    qu       Quechua               vtt, srt, ttml, srv3, srv2, srv1, json3
    ro       Romanian              vtt, srt, ttml, srv3, srv2, srv1, json3
    rn       Rundi                 vtt, srt, ttml, srv3, srv2, srv1, json3
    ru       Russian               vtt, srt, ttml, srv3, srv2, srv1, json3
    sm       Samoan                vtt, srt, ttml, srv3, srv2, srv1, json3
    sg       Sango                 vtt, srt, ttml, srv3, srv2, srv1, json3
    sa       Sanskrit              vtt, srt, ttml, srv3, srv2, srv1, json3
    gd       Scottish Gaelic       vtt, srt, ttml, srv3, srv2, srv1, json3
    sr       Serbian               vtt, srt, ttml, srv3, srv2, srv1, json3
    crs      Seselwa Creole French vtt, srt, ttml, srv3, srv2, srv1, json3
    sn       Shona                 vtt, srt, ttml, srv3, srv2, srv1, json3
    sd       Sindhi                vtt, srt, ttml, srv3, srv2, srv1, json3
    si       Sinhala               vtt, srt, ttml, srv3, srv2, srv1, json3
    sk       Slovak                vtt, srt, ttml, srv3, srv2, srv1, json3
    sl       Slovenian             vtt, srt, ttml, srv3, srv2, srv1, json3
    so       Somali                vtt, srt, ttml, srv3, srv2, srv1, json3
    st       Southern Sotho        vtt, srt, ttml, srv3, srv2, srv1, json3
    es       Spanish               vtt, srt, ttml, srv3, srv2, srv1, json3
    su       Sundanese             vtt, srt, ttml, srv3, srv2, srv1, json3
    sw       Swahili               vtt, srt, ttml, srv3, srv2, srv1, json3
    ss       Swati                 vtt, srt, ttml, srv3, srv2, srv1, json3
    sv       Swedish               vtt, srt, ttml, srv3, srv2, srv1, json3
    tg       Tajik                 vtt, srt, ttml, srv3, srv2, srv1, json3
    ta       Tamil                 vtt, srt, ttml, srv3, srv2, srv1, json3
    tt       Tatar                 vtt, srt, ttml, srv3, srv2, srv1, json3
    te       Telugu                vtt, srt, ttml, srv3, srv2, srv1, json3
    th       Thai                  vtt, srt, ttml, srv3, srv2, srv1, json3
    bo       Tibetan               vtt, srt, ttml, srv3, srv2, srv1, json3
    ti       Tigrinya              vtt, srt, ttml, srv3, srv2, srv1, json3
    to       Tongan                vtt, srt, ttml, srv3, srv2, srv1, json3
    ts       Tsonga                vtt, srt, ttml, srv3, srv2, srv1, json3
    tn       Tswana                vtt, srt, ttml, srv3, srv2, srv1, json3
    tum      Tumbuka               vtt, srt, ttml, srv3, srv2, srv1, json3
    tr       Turkish               vtt, srt, ttml, srv3, srv2, srv1, json3
    tk       Turkmen               vtt, srt, ttml, srv3, srv2, srv1, json3
    uk       Ukrainian             vtt, srt, ttml, srv3, srv2, srv1, json3
    ur       Urdu                  vtt, srt, ttml, srv3, srv2, srv1, json3
    ug       Uyghur                vtt, srt, ttml, srv3, srv2, srv1, json3
    uz       Uzbek                 vtt, srt, ttml, srv3, srv2, srv1, json3
    ve       Venda                 vtt, srt, ttml, srv3, srv2, srv1, json3
    vi       Vietnamese            vtt, srt, ttml, srv3, srv2, srv1, json3
    war      Waray                 vtt, srt, ttml, srv3, srv2, srv1, json3
    cy       Welsh                 vtt, srt, ttml, srv3, srv2, srv1, json3
    fy       Western Frisian       vtt, srt, ttml, srv3, srv2, srv1, json3
    wo       Wolof                 vtt, srt, ttml, srv3, srv2, srv1, json3
    xh       Xhosa                 vtt, srt, ttml, srv3, srv2, srv1, json3
    yi       Yiddish               vtt, srt, ttml, srv3, srv2, srv1, json3
    yo       Yoruba                vtt, srt, ttml, srv3, srv2, srv1, json3
    zu       Zulu                  vtt, srt, ttml, srv3, srv2, srv1, json3
    qlQdZ-H_EWY has no subtitles
    
    
    Exit code: 0
  4. Devin
    Thinking

    Good, there are auto-generated captions. I can see "en-orig English (Original)" and "en English". I'll download the English (Original) captions in srt format. Let me also get the video title/info. I'll use yt-dlp to download just the subtitles.

    exec(command: yt-dlp --skip-download --write-auto-subs…, timeout: 60000)
    {
      "command": "yt-dlp --skip-download --write-auto-subs --sub-langs en-orig --sub-format srt -o \"/tmp/qlQdZ-H_EWY.%(ext)s\" \"https://www.youtube.com/watch?v=qlQdZ-H_EWY\"",
      "timeout": 60000
    }
    In 4,804Out 137Cache 17,536TTFT 614mstool_calls
  5. OutputOutput from command in shell 677d55:
    Output from command in shell 677d55:
    WARNING: Your yt-dlp version (2025.12.08) is older than 90 days!
             It is strongly recommended to always use the latest version.
             You installed yt-dlp with pip or using the wheel from PyPi; Use that to update.
             To suppress this warning, add --no-update to your command/config.
    [youtube] Extracting URL: https://www.youtube.com/watch?v=qlQdZ-H_EWY
    [youtube] qlQdZ-H_EWY: Downloading webpage
    [youtube] qlQdZ-H_EWY: Downloading tv client config
    [youtube] qlQdZ-H_EWY: Downloading player 66a6ea83-main
    [youtube] qlQdZ-H_EWY: Downloading tv player API JSON
    [youtube] qlQdZ-H_EWY: Downloading android sdkless player API JSON
    [youtube] [jsc:deno] Solving JS challenges using deno
    WARNING: [youtube] [jsc] Remote components challenge solver script (deno) and NPM package (deno) were skipped. These may be required to solve JS challenges. You can enable these downloads with  --remote-components ejs:github  (recommended) or  --remote-components ejs:npm , respectively. For more information and alternatives, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    WARNING: [youtube] qlQdZ-H_EWY: n challenge solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    [info] qlQdZ-H_EWY: Downloading subtitles: en-orig
    [info] qlQdZ-H_EWY: Downloading 1 format(s): 139-19
    [info] Writing video subtitles to: /tmp/qlQdZ-H_EWY.en-orig.srt
    [download] Destination: /tmp/qlQdZ-H_EWY.en-orig.srt
    
    [download]    1.00KiB at  Unknown B/s (00:00:00)
    [download]    3.00KiB at  Unknown B/s (00:00:00)
    [download]    7.00KiB at  Unknown B/s (00:00:00)
    [download]   15.00KiB at    7.74MiB/s (00:00:00)
    [download]   21.11KiB at    7.23MiB/s (00:00:00)
    [download] 100% of   21.11KiB in 00:00:00 at 223.37KiB/s
    
    
    Exit code: 0
  6. Devin
    Thinking

    Good, I downloaded the subtitles. Now let me read them and also get the video title. I'll read the srt file and also use yt-dlp to get the title.

    exec(command: yt-dlp --print "%(title)s" --print "%(up…, timeout: 60000)
    {
      "command": "yt-dlp --print \"%(title)s\" --print \"%(uploader)s\" --print \"%(duration_string)s\" --no-update \"https://www.youtube.com/watch?v=qlQdZ-H_EWY\"",
      "timeout": 60000
    }
    read(file_path: /tmp/qlQdZ-H_EWY.en-orig.srt)
    {
      "file_path": "/tmp/qlQdZ-H_EWY.en-orig.srt"
    }
    In 842Out 131Cache 22,272TTFT 510mstool_calls
  7. OutputOutput from command in shell 049ec5:
    Output from command in shell 049ec5:
    WARNING: [youtube] [jsc] Remote components challenge solver script (deno) and NPM package (deno) were skipped. These may be required to solve JS challenges. You can enable these downloads with  --remote-components ejs:github  (recommended) or  --remote-components ejs:npm , respectively. For more information and alternatives, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    WARNING: [youtube] qlQdZ-H_EWY: n challenge solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
    Clash Royale is a Disgrace to Mobile Gaming
    bananadev
    9:40
    
    
    Exit code: 0
  8. Output<file-view path="/tmp/qlQdZ-H_EWY.en-orig.srt" start_line="1" end_line="1113" total_lines="1204">
    <file-view path="/tmp/qlQdZ-H_EWY.en-orig.srt" start_line="1" end_line="1113" total_lines="1204">
       1|1
       2|00:00:00,000 --> 00:00:03,880
       3|Clash Royale went from chopping every
       4|
       5|2
       6|00:00:01,920 --> 00:00:05,840
       7|mobile free-to-play chart to allegedly
       8|
       9|3
      10|00:00:03,880 --> 00:00:07,840
      11|rigging matches and desecrating what
      12|
      13|4
      14|00:00:05,840 --> 00:00:10,120
      15|once was a titan of mobile gaming into a
      16|
      17|5
      18|00:00:07,840 --> 00:00:11,880
      19|game that matched, leveled, and priced
      20|
      21|6
      22|00:00:10,120 --> 00:00:14,840
      23|most of its player base into giving up.
      24|
      25|7
      26|00:00:11,880 --> 00:00:17,000
      27|In July 2025, Clash Royale made $77
      28|
      29|8
      30|00:00:14,840 --> 00:00:18,400
      31|million in a single month. A 9-year-old
      32|
      33|9
      34|00:00:17,000 --> 00:00:20,120
      35|game that everyone had written off as
      36|
      37|10
      38|00:00:18,400 --> 00:00:21,880
      39|dead had pulled off one of the biggest
      40|
      41|11
      42|00:00:20,120 --> 00:00:23,280
      43|comebacks in mobile history. Eight
      44|
      45|12
      46|00:00:21,880 --> 00:00:25,000
      47|months later, its biggest streamer had
      48|
      49|13
      50|00:00:23,280 --> 00:00:26,920
      51|quit and the revenue had fallen by
      52|
      53|14
      54|00:00:25,000 --> 00:00:28,840
      55|nearly half. And to understand why
      56|
      57|15
      58|00:00:26,920 --> 00:00:30,560
      59|throwing away the luckiest second chance
      60|
      61|16
      62|00:00:28,840 --> 00:00:32,360
      63|in the industry's history was so
      64|
      65|17
      66|00:00:30,560 --> 00:00:34,200
      67|unforgivable, you have to go back to
      68|
      69|18
      70|00:00:32,360 --> 00:00:35,560
      71|when this game was the best thing on the
      72|
      73|19
      74|00:00:34,200 --> 00:00:38,080
      75|App Store. Clash Royale launched
      76|
      77|20
      78|00:00:35,560 --> 00:00:39,920
      79|globally on March 2nd, 2016 and was an
      80|
      81|21
      82|00:00:38,080 --> 00:00:41,640
      83|instant hit. It was both number one most
      84|
      85|22
      86|00:00:39,920 --> 00:00:43,760
      87|downloaded and number one top grossing
      88|
      89|23
      90|00:00:41,640 --> 00:00:45,560
      91|on the US App Store on day one and made
      92|
      93|24
      94|00:00:43,760 --> 00:00:47,520
      95|roughly $1 billion in its first 9
      96|
      97|25
      98|00:00:45,560 --> 00:00:50,080
      99|months. Within months of launch, Tencent
     100|
     101|26
     102|00:00:47,520 --> 00:00:51,800
     103|valued Supercell as $10 billion and
     104|
     105|27
     106|00:00:50,080 --> 00:00:53,680
     107|bought most of it. Clash Royale was
     108|
     109|28
     110|00:00:51,800 --> 00:00:55,320
     111|good. It was a real-time card game that
     112|
     113|29
     114|00:00:53,680 --> 00:00:57,320
     115|everyone knew with a skill ceiling high
     116|
     117|30
     118|00:00:55,320 --> 00:00:58,880
     119|enough to build an entire e-sport on. In
     120|
     121|31
     122|00:00:57,320 --> 00:01:00,840
     123|the Clash Royale League, regional teams
     124|
     125|32
     126|00:00:58,880 --> 00:01:03,320
     127|had a prize pool over $1 million by
     128|
     129|33
     130|00:01:00,840 --> 00:01:05,160
     131|2021. At its best, Clash Royale was a
     132|
     133|34
     134|00:01:03,320 --> 00:01:06,880
     135|game where the better player won. Years
     136|
     137|35
     138|00:01:05,160 --> 00:01:08,480
     139|later, one of the most upvoted comments
     140|
     141|36
     142|00:01:06,880 --> 00:01:10,160
     143|in the game's own subreddit would put it
     144|
     145|37
     146|00:01:08,480 --> 00:01:12,280
     147|like this. This game could have been a
     148|
     149|38
     150|00:01:10,160 --> 00:01:14,000
     151|second chess. Instead, they made it
     152|
     153|39
     154|00:01:12,280 --> 00:01:16,320
     155|pay-to-win. That didn't happen all at
     156|
     157|40
     158|00:01:14,000 --> 00:01:18,320
     159|once. It happens one update at a time
     160|
     161|41
     162|00:01:16,320 --> 00:01:20,160
     163|like boiling a frog. Each update made a
     164|
     165|42
     166|00:01:18,320 --> 00:01:22,040
     167|ton of money, which is why it kept
     168|
     169|43
     170|00:01:20,160 --> 00:01:24,920
     171|happening. The first real crack came on
     172|
     173|44
     174|00:01:22,040 --> 00:01:26,440
     175|October 25th, 2021 when a new class of
     176|
     177|45
     178|00:01:24,920 --> 00:01:28,040
     179|card called champions launched.
     180|
     181|46
     182|00:01:26,440 --> 00:01:29,880
     183|Champions were stronger than normal
     184|
     185|47
     186|00:01:28,040 --> 00:01:31,320
     187|cards on purpose. They had a button you
     188|
     189|48
     190|00:01:29,880 --> 00:01:32,880
     191|could press mid-match for a special
     192|
     193|49
     194|00:01:31,320 --> 00:01:35,200
     195|ability and they were locked behind the
     196|
     197|50
     198|00:01:32,880 --> 00:01:37,480
     199|king level 14. A wall that took most
     200|
     201|51
     202|00:01:35,200 --> 00:01:39,080
     203|free players months or money to climb.
     204|
     205|52
     206|00:01:37,480 --> 00:01:41,000
     207|On their own, champions were fair. The
     208|
     209|53
     210|00:01:39,080 --> 00:01:42,360
     211|base card was weak. Without the ability,
     212|
     213|54
     214|00:01:41,000 --> 00:01:44,640
     215|an Archer Queen is a mediocre
     216|
     217|55
     218|00:01:42,360 --> 00:01:46,880
     219|four-elixir card. The power lives in the
     220|
     221|56
     222|00:01:44,640 --> 00:01:48,400
     223|ability and the ability costs elixir.
     224|
     225|57
     226|00:01:46,880 --> 00:01:50,440
     227|So, you pay for the strength every time
     228|
     229|58
     230|00:01:48,400 --> 00:01:52,960
     231|you use it. That's a balanced trade and
     232|
     233|59
     234|00:01:50,440 --> 00:01:54,720
     235|Supercell built it on purpose. Then came
     236|
     237|60
     238|00:01:52,960 --> 00:01:57,360
     239|what the community started calling Scam
     240|
     241|61
     242|00:01:54,720 --> 00:02:00,040
     243|Royale. In 2022, Supercell added level
     244|
     245|62
     246|00:01:57,360 --> 00:02:01,880
     247|15, elite levels, which needed a new
     248|
     249|63
     250|00:02:00,040 --> 00:02:04,160
     251|currency that was almost impossible to
     252|
     253|64
     254|00:02:01,880 --> 00:02:06,280
     255|earn for free and very easy to buy.
     256|
     257|65
     258|00:02:04,160 --> 00:02:08,479
     259|Reaching max level without spending went
     260|
     261|66
     262|00:02:06,280 --> 00:02:10,440
     263|from slow to almost impossible. Players
     264|
     265|67
     266|00:02:08,479 --> 00:02:13,120
     267|called for a boycott. Supercell shipped
     268|
     269|68
     270|00:02:10,440 --> 00:02:14,840
     271|it anyway. June 18th, 2023, came the
     272|
     273|69
     274|00:02:13,120 --> 00:02:16,720
     275|update that most people point to as the
     276|
     277|70
     278|00:02:14,840 --> 00:02:18,400
     279|day the game broke, card evolutions.
     280|
     281|71
     282|00:02:16,720 --> 00:02:20,200
     283|Evolutions took cards you already owned
     284|
     285|72
     286|00:02:18,400 --> 00:02:22,240
     287|and gave them a second, much stronger
     288|
     289|73
     290|00:02:20,200 --> 00:02:24,240
     291|form at mid-battle with basically no
     292|
     293|74
     294|00:02:22,240 --> 00:02:26,120
     295|trade-off. At launch, the only real way
     296|
     297|75
     298|00:02:24,240 --> 00:02:27,520
     299|to unlock them was a paid bundle. These
     300|
     301|76
     302|00:02:26,120 --> 00:02:29,520
     303|cards also launched extremely
     304|
     305|77
     306|00:02:27,520 --> 00:02:30,120
     307|overpowered. This was essentially
     308|
     309|78
     310|00:02:29,520 --> 00:02:32,040
     311|pay-to-win.
     312|
     313|79
     314|00:02:30,120 --> 00:02:34,320
     315|>> They make all these evos, they make them
     316|
     317|80
     318|00:02:32,040 --> 00:02:36,959
     319|so broken intentionally, so you're
     320|
     321|81
     322|00:02:34,320 --> 00:02:39,240
     323|forced to buy them, and then they nerf
     324|
     325|82
     326|00:02:36,959 --> 00:02:39,880
     327|it in the ground after you already gave
     328|
     329|83
     330|00:02:39,240 --> 00:02:41,560
     331|them your money.
     332|
     333|84
     334|00:02:39,880 --> 00:02:43,880
     335|>> Every other video says Supercell was
     336|
     337|85
     338|00:02:41,560 --> 00:02:46,240
     339|greedy and ignored the data. They didn't
     340|
     341|86
     342|00:02:43,880 --> 00:02:48,680
     343|ignore the data. They loved the data.
     344|
     345|87
     346|00:02:46,240 --> 00:02:50,920
     347|Evolutions made $80 million in their
     348|
     349|88
     350|00:02:48,680 --> 00:02:53,240
     351|first 6 months. Every update the
     352|
     353|89
     354|00:02:50,920 --> 00:02:55,200
     355|community hated produced a revenue spike
     356|
     357|90
     358|00:02:53,240 --> 00:02:57,000
     359|as players bought in to have even just a
     360|
     361|91
     362|00:02:55,200 --> 00:02:58,560
     363|fair chance at playing the game. The
     364|
     365|92
     366|00:02:57,000 --> 00:03:00,239
     367|game lead said it out loud at a
     368|
     369|93
     370|00:02:58,560 --> 00:03:01,640
     371|conference this year.
     372|
     373|94
     374|00:03:00,239 --> 00:03:03,200
     375|When you push out cards that hit the
     376|
     377|95
     378|00:03:01,640 --> 00:03:05,200
     379|sweet spot between pay-to-win and
     380|
     381|96
     382|00:03:03,200 --> 00:03:07,280
     383|pay-to-lose, you get viral spikes in
     384|
     385|97
     386|00:03:05,200 --> 00:03:09,680
     387|player engagements. This was a stated
     388|
     389|98
     390|00:03:07,280 --> 00:03:11,200
     391|design principle. By 2023, the game that
     392|
     393|99
     394|00:03:09,680 --> 00:03:14,440
     395|had made nearly a billion dollars in
     396|
     397|100
     398|00:03:11,200 --> 00:03:16,560
     399|2017 had fallen to around $170 million,
     400|
     401|101
     402|00:03:14,440 --> 00:03:18,640
     403|its worst year since launch. Throughout
     404|
     405|102
     406|00:03:16,560 --> 00:03:20,440
     407|2024, free player progression had been
     408|
     409|103
     410|00:03:18,640 --> 00:03:22,760
     411|quietly cut somewhere between 50% and
     412|
     413|104
     414|00:03:20,440 --> 00:03:24,120
     415|70%, but there is one more reason free
     416|
     417|105
     418|00:03:22,760 --> 00:03:26,680
     419|players are checking out, and it's the
     420|
     421|106
     422|00:03:24,120 --> 00:03:28,560
     423|hardest one to prove, rigged matches.
     424|
     425|107
     426|00:03:26,680 --> 00:03:29,880
     427|This is something both I and large
     428|
     429|108
     430|00:03:28,560 --> 00:03:31,840
     431|sections of the community have been
     432|
     433|109
     434|00:03:29,880 --> 00:03:33,800
     435|speculating on for years. Based on
     436|
     437|110
     438|00:03:31,840 --> 00:03:35,880
     439|Supercell's behavior, Clash Royale isn't
     440|
     441|111
     442|00:03:33,800 --> 00:03:37,480
     443|purely a strategic game anymore. It's a
     444|
     445|112
     446|00:03:35,880 --> 00:03:39,000
     447|money-making machine, and if they were
     448|
     449|113
     450|00:03:37,480 --> 00:03:40,519
     451|rigging matches, the player base would
     452|
     453|114
     454|00:03:39,000 --> 00:03:42,640
     455|be the last people they would admit it
     456|
     457|115
     458|00:03:40,519 --> 00:03:44,360
     459|to. What we do know is a post recently
     460|
     461|116
     462|00:03:42,640 --> 00:03:46,280
     463|surfaced from a team member allegedly
     464|
     465|117
     466|00:03:44,360 --> 00:03:48,560
     467|saying that matchmaking is engineered to
     468|
     469|118
     470|00:03:46,280 --> 00:03:50,160
     471|maintain a 50% win rates by pairing you
     472|
     473|119
     474|00:03:48,560 --> 00:03:52,880
     475|based on trophy counts, recent win
     476|
     477|120
     478|00:03:50,160 --> 00:03:54,360
     479|streaks, and specific card combinations.
     480|
     481|121
     482|00:03:52,880 --> 00:03:56,360
     483|Further stating that the system is
     484|
     485|122
     486|00:03:54,360 --> 00:03:57,800
     487|designed to slow progression. This post
     488|
     489|123
     490|00:03:56,360 --> 00:03:59,560
     491|was then taken down by Supercell
     492|
     493|124
     494|00:03:57,800 --> 00:04:01,280
     495|moderators for lacking evidence.
     496|
     497|125
     498|00:03:59,560 --> 00:04:03,240
     499|Frustration is one of the main reasons
     500|
     501|126
     502|00:04:01,280 --> 00:04:04,640
     503|people keep playing and buying stuff. If
     504|
     505|127
     506|00:04:03,240 --> 00:04:05,960
     507|players have the thought that if they
     508|
     509|128
     510|00:04:04,640 --> 00:04:07,840
     511|had a shiny new troop that their win
     512|
     513|129
     514|00:04:05,960 --> 00:04:09,760
     515|rate would get better, they will buy
     516|
     517|130
     518|00:04:07,840 --> 00:04:11,200
     519|more. Nobody outside the company has
     520|
     521|131
     522|00:04:09,760 --> 00:04:12,760
     523|hard proof that a system like this
     524|
     525|132
     526|00:04:11,200 --> 00:04:14,680
     527|exists. Some users have done data
     528|
     529|133
     530|00:04:12,760 --> 00:04:16,480
     531|analysis and concluded that matchmaking
     532|
     533|134
     534|00:04:14,680 --> 00:04:19,200
     535|isn't rigged, but this was the game five
     536|
     537|135
     538|00:04:16,480 --> 00:04:21,400
     539|years ago. By early 2025, this should be
     540|
     541|136
     542|00:04:19,200 --> 00:04:24,000
     543|where the story ends. A grace game
     544|
     545|137
     546|00:04:21,400 --> 00:04:25,400
     547|slowly strangled, bleeding money, hated
     548|
     549|138
     550|00:04:24,000 --> 00:04:27,800
     551|by the people who still play this. And
     552|
     553|139
     554|00:04:25,400 --> 00:04:30,200
     555|in March, Supercell ran one more economy
     556|
     557|140
     558|00:04:27,800 --> 00:04:30,720
     559|overhaul, the one named A Tale of
     560|
     561|141
     562|00:04:30,200 --> 00:04:33,400
     563|Thieves.
     564|
     565|142
     566|00:04:30,720 --> 00:04:35,440
     567|>> Truly is a tale of thieves.
     568|
     569|143
     570|00:04:33,400 --> 00:04:37,040
     571|>> Gushing free progression again with no
     572|
     573|144
     574|00:04:35,440 --> 00:04:38,760
     575|announcement. The game manager would
     576|
     577|145
     578|00:04:37,040 --> 00:04:40,680
     579|call the backlash some of the worst it'd
     580|
     581|146
     582|00:04:38,760 --> 00:04:42,440
     583|ever seen. That is the stage that the
     584|
     585|147
     586|00:04:40,680 --> 00:04:44,040
     587|game was in when something happened that
     588|
     589|148
     590|00:04:42,440 --> 00:04:46,040
     591|no script could have predicted, because
     592|
     593|149
     594|00:04:44,040 --> 00:04:48,160
     595|Supercell had nothing to do with it. In
     596|
     597|150
     598|00:04:46,040 --> 00:04:49,760
     599|April 2025, a Rainbow Six streamer named
     600|
     601|151
     602|00:04:48,160 --> 00:04:52,080
     603|Jynxzi started playing Clash Royale on
     604|
     605|152
     606|00:04:49,760 --> 00:04:53,360
     607|stream, basically as a joke. 40,000
     608|
     609|153
     610|00:04:52,080 --> 00:04:55,160
     611|people watched him do it at the same
     612|
     613|154
     614|00:04:53,360 --> 00:04:57,040
     615|time. Other huge streamers piled in.
     616|
     617|155
     618|00:04:55,160 --> 00:04:58,440
     619|Then Mr. Beast came back. The biggest
     620|
     621|156
     622|00:04:57,040 --> 00:05:00,080
     623|names on the internet picked up a
     624|
     625|157
     626|00:04:58,440 --> 00:05:01,560
     627|9-year-old mobile game and made it
     628|
     629|158
     630|00:05:00,080 --> 00:05:03,160
     631|popular again. And the numbers did
     632|
     633|159
     634|00:05:01,560 --> 00:05:05,280
     635|something games this old simply do not
     636|
     637|160
     638|00:05:03,160 --> 00:05:07,680
     639|do. Monthly revenue went from around 15
     640|
     641|161
     642|00:05:05,280 --> 00:05:10,240
     643|to 17 million before Jynxzi up to 28
     644|
     645|162
     646|00:05:07,680 --> 00:05:11,800
     647|million in May and 77 million in July.
     648|
     649|163
     650|00:05:10,240 --> 00:05:14,480
     651|By Supercell's own blog, new players
     652|
     653|164
     654|00:05:11,800 --> 00:05:16,800
     655|were up 500% year over year. Supercell
     656|
     657|165
     658|00:05:14,480 --> 00:05:18,240
     659|did not engineer this. They didn't run a
     660|
     661|166
     662|00:05:16,800 --> 00:05:20,080
     663|brilliant campaign. [music] A streamer
     664|
     665|167
     666|00:05:18,240 --> 00:05:22,520
     667|got bored, his audience followed, and a
     668|
     669|168
     670|00:05:20,080 --> 00:05:24,440
     671|dying game got single luckiest second
     672|
     673|169
     674|00:05:22,520 --> 00:05:26,800
     675|chance in the history of mobile gaming,
     676|
     677|170
     678|00:05:24,440 --> 00:05:29,520
     679|free, handed to them on a plate. All
     680|
     681|171
     682|00:05:26,800 --> 00:05:32,360
     683|they had to do was not screw it up. They
     684|
     685|172
     686|00:05:29,520 --> 00:05:33,880
     687|screwed it up on November 24th, 2025,
     688|
     689|173
     690|00:05:32,360 --> 00:05:35,520
     691|right in the biggest run the game had
     692|
     693|174
     694|00:05:33,880 --> 00:05:37,760
     695|seen in eight years. This is when
     696|
     697|175
     698|00:05:35,520 --> 00:05:39,760
     699|Supercell shipped two things. The first
     700|
     701|176
     702|00:05:37,760 --> 00:05:41,600
     703|was level 16, a new card level that
     704|
     705|177
     706|00:05:39,760 --> 00:05:43,080
     707|added nothing to how the game plays and
     708|
     709|178
     710|00:05:41,600 --> 00:05:45,560
     711|cost more money to reach. No new
     712|
     713|179
     714|00:05:43,080 --> 00:05:46,880
     715|ability, no new strategy, just a higher
     716|
     717|180
     718|00:05:45,560 --> 00:05:49,640
     719|number you pay to climb.
     720|
     721|181
     722|00:05:46,880 --> 00:05:52,040
     723|>> What is so meaningful about adding
     724|
     725|182
     726|00:05:49,640 --> 00:05:53,000
     727|another level to the game? It does
     728|
     729|183
     730|00:05:52,040 --> 00:05:55,080
     731|nothing.
     732|
     733|184
     734|00:05:53,000 --> 00:05:57,160
     735|>> Players summed it up with one line. No
     736|
     737|185
     738|00:05:55,080 --> 00:05:59,080
     739|benefits, just cost more money to play.
     740|
     741|186
     742|00:05:57,160 --> 00:06:01,200
     743|The second thing was heroes. Heroes
     744|
     745|187
     746|00:05:59,080 --> 00:06:03,200
     747|broke the champion trade on purpose. A
     748|
     749|188
     750|00:06:01,200 --> 00:06:05,400
     751|hero's base card is already good on its
     752|
     753|189
     754|00:06:03,200 --> 00:06:07,360
     755|own and identical to the base card for
     756|
     757|190
     758|00:06:05,400 --> 00:06:09,600
     759|the same amount of elixir. Without the
     760|
     761|191
     762|00:06:07,360 --> 00:06:11,760
     763|ability, a hero plays exactly like the
     764|
     765|192
     766|00:06:09,600 --> 00:06:14,040
     767|strong base card. With the ability, it's
     768|
     769|193
     770|00:06:11,760 --> 00:06:16,040
     771|the same strong card plus a free upside
     772|
     773|194
     774|00:06:14,040 --> 00:06:18,040
     775|every time you play it. No elixir cycle,
     776|
     777|195
     778|00:06:16,040 --> 00:06:20,160
     779|no real cost. What's worse was that the
     780|
     781|196
     782|00:06:18,040 --> 00:06:22,160
     783|ability often provides more value than
     784|
     785|197
     786|00:06:20,160 --> 00:06:24,280
     787|the elixir cost to play. Most heroes
     788|
     789|198
     790|00:06:22,160 --> 00:06:25,960
     791|released extremely overpowered and right
     792|
     793|199
     794|00:06:24,280 --> 00:06:27,680
     795|out of the gate you could put two heroes
     796|
     797|200
     798|00:06:25,960 --> 00:06:29,840
     799|in your deck. The community called this
     800|
     801|201
     802|00:06:27,680 --> 00:06:31,960
     803|the worst update the game had ever seen.
     804|
     805|202
     806|00:06:29,840 --> 00:06:33,760
     807|>> The original developers strived so hard
     808|
     809|203
     810|00:06:31,960 --> 00:06:37,000
     811|to balance the game making competitive.
     812|
     813|204
     814|00:06:33,760 --> 00:06:37,000
     815|The modern devs are like
     816|
     817|205
     818|00:06:37,080 --> 00:06:40,160
     819|Competitive?
     820|
     821|206
     822|00:06:38,480 --> 00:06:42,280
     823|Money go burr, right? And then
     824|
     825|207
     826|00:06:40,160 --> 00:06:43,960
     827|>> It removed half the skill and half the
     828|
     829|208
     830|00:06:42,280 --> 00:06:45,680
     831|thinking. The heroes announcement was
     832|
     833|209
     834|00:06:43,960 --> 00:06:47,440
     835|one of the most disliked videos on the
     836|
     837|210
     838|00:06:45,680 --> 00:06:48,919
     839|entire channel. A streamer can bring you
     840|
     841|211
     842|00:06:47,440 --> 00:06:50,000
     843|back to a game, but if the game feels
     844|
     845|212
     846|00:06:48,919 --> 00:06:51,560
     847|bad, you leave again.
     848|
     849|213
     850|00:06:50,000 --> 00:06:53,520
     851|>> There's a champion added, like it's
     852|
     853|214
     854|00:06:51,560 --> 00:06:55,800
     855|actually fun. It's like a new card.
     856|
     857|215
     858|00:06:53,520 --> 00:06:57,480
     859|Heroes aren't exciting because oh, it's
     860|
     861|216
     862|00:06:55,800 --> 00:06:58,200
     863|just a musketeer, but now it's more
     864|
     865|217
     866|00:06:57,480 --> 00:07:00,120
     867|broken.
     868|
     869|218
     870|00:06:58,200 --> 00:07:01,720
     871|>> Revenue fell by nearly half within 3
     872|
     873|219
     874|00:07:00,120 --> 00:07:04,919
     875|months. From around 68 million in
     876|
     877|220
     878|00:07:01,720 --> 00:07:07,040
     879|September to 37 million by January 2026.
     880|
     881|221
     882|00:07:04,919 --> 00:07:08,760
     883|The comeback was erased almost as fast
     884|
     885|222
     886|00:07:07,040 --> 00:07:11,320
     887|as it arrived. Jinx he streamed it less
     888|
     889|223
     890|00:07:08,760 --> 00:07:12,120
     891|and less and on February 6th, 2026 he
     892|
     893|224
     894|00:07:11,320 --> 00:07:14,960
     895|officially quits.
     896|
     897|225
     898|00:07:12,120 --> 00:07:15,720
     899|>> I am quitting Clash until I see
     900|
     901|226
     902|00:07:14,960 --> 00:07:16,919
     903|something get fixed.
     904|
     905|227
     906|00:07:15,720 --> 00:07:18,600
     907|>> The community had seen it coming for
     908|
     909|228
     910|00:07:16,919 --> 00:07:20,360
     911|months. One comment from the previous
     912|
     913|229
     914|00:07:18,600 --> 00:07:21,960
     915|October had a single warning. They got a
     916|
     917|230
     918|00:07:20,360 --> 00:07:23,720
     919|second wind, a lot of it thanks to
     920|
     921|231
     922|00:07:21,960 --> 00:07:25,520
     923|Jinxie, they better not blunder it
     924|
     925|232
     926|00:07:23,720 --> 00:07:27,600
     927|again. They did blunder it. When people
     928|
     929|233
     930|00:07:25,520 --> 00:07:29,160
     931|bought champions, they added evolutions.
     932|
     933|234
     934|00:07:27,600 --> 00:07:31,280
     935|When people unlocked all the evolutions,
     936|
     937|235
     938|00:07:29,160 --> 00:07:32,760
     939|they added heroes. Each update forced
     940|
     941|236
     942|00:07:31,280 --> 00:07:35,560
     943|players to spend more money than the
     944|
     945|237
     946|00:07:32,760 --> 00:07:37,160
     947|previous. On February 10th, 2026 the CEO
     948|
     949|238
     950|00:07:35,560 --> 00:07:38,960
     951|of Supercell published a blog called
     952|
     953|239
     954|00:07:37,160 --> 00:07:40,640
     955|Clash Royale: A Historic Year. It
     956|
     957|240
     958|00:07:38,960 --> 00:07:43,080
     959|celebrated the best year the game had
     960|
     961|241
     962|00:07:40,640 --> 00:07:44,840
     963|seen since 2017. It credited the team's
     964|
     965|242
     966|00:07:43,080 --> 00:07:46,920
     967|design decisions and an in-game Michael
     968|
     969|243
     970|00:07:44,840 --> 00:07:48,400
     971|Bolton campaign. Xingxi was not in it.
     972|
     973|244
     974|00:07:46,920 --> 00:07:49,960
     975|Creators were not in it. The single
     976|
     977|245
     978|00:07:48,400 --> 00:07:52,120
     979|reason any of it happened did not make
     980|
     981|246
     982|00:07:49,960 --> 00:07:53,520
     983|the post. Xingxi's response, probably
     984|
     985|247
     986|00:07:52,120 --> 00:07:55,680
     987|the biggest spit in the face I've ever
     988|
     989|248
     990|00:07:53,520 --> 00:07:57,680
     991|seen. Mr. Beast replied publicly with
     992|
     993|249
     994|00:07:55,680 --> 00:07:59,320
     995|one sentence. I only started playing
     996|
     997|250
     998|00:07:57,680 --> 00:08:01,760
     999|again because of you. Two days later the
    1000|
    1001|251
    1002|00:07:59,320 --> 00:08:03,480
    1003|CEO edited the post with an apology, but
    1004|
    1005|252
    1006|00:08:01,760 --> 00:08:05,360
    1007|it was too late. Creators were already
    1008|
    1009|253
    1010|00:08:03,480 --> 00:08:07,200
    1011|announcing boycotts. A creator event got
    1012|
    1013|254
    1014|00:08:05,360 --> 00:08:08,760
    1015|postponed when players pulled out and
    1016|
    1017|255
    1018|00:08:07,200 --> 00:08:11,160
    1019|pros with hundreds of thousands in
    1020|
    1021|256
    1022|00:08:08,760 --> 00:08:12,800
    1023|career winnings started walking. The CEO
    1024|
    1025|257
    1026|00:08:11,160 --> 00:08:14,640
    1027|didn't credit the creators because
    1028|
    1029|258
    1030|00:08:12,800 --> 00:08:16,120
    1031|watching from the inside it genuinely
    1032|
    1033|259
    1034|00:08:14,640 --> 00:08:17,640
    1035|looks like the comeback was their own
    1036|
    1037|260
    1038|00:08:16,120 --> 00:08:19,520
    1039|work, which means the people running
    1040|
    1041|261
    1042|00:08:17,640 --> 00:08:21,200
    1043|this game still don't understand why it
    1044|
    1045|262
    1046|00:08:19,520 --> 00:08:23,120
    1047|almost [music] lived. Xingxi said it
    1048|
    1049|263
    1050|00:08:21,200 --> 00:08:24,760
    1051|plainer than any analyst could. If the
    1052|
    1053|264
    1054|00:08:23,120 --> 00:08:26,400
    1055|comeback was a result of a talented
    1056|
    1057|265
    1058|00:08:24,760 --> 00:08:28,280
    1059|team, you would have seen explosive
    1060|
    1061|266
    1062|00:08:26,400 --> 00:08:28,919
    1063|growth in the years before and you
    1064|
    1065|267
    1066|00:08:28,280 --> 00:08:30,440
    1067|didn't. [music]
    1068|
    1069|268
    1070|00:08:28,919 --> 00:08:32,039
    1071|And the excuse that live service games
    1072|
    1073|269
    1074|00:08:30,440 --> 00:08:33,919
    1075|are just hard to run doesn't hold here
    1076|
    1077|270
    1078|00:08:32,039 --> 00:08:35,760
    1079|either. In the same company, in the same
    1080|
    1081|271
    1082|00:08:33,919 --> 00:08:37,320
    1083|years, another dying Supercell game got
    1084|
    1085|272
    1086|00:08:35,760 --> 00:08:39,280
    1087|the same kind of second chance. Brawl
    1088|
    1089|273
    1090|00:08:37,320 --> 00:08:41,599
    1091|Stars hit its lowest player count ever
    1092|
    1093|274
    1094|00:08:39,280 --> 00:08:43,320
    1095|in early 2023. Supercell rebuilt it
    1096|
    1097|275
    1098|00:08:41,599 --> 00:08:45,160
    1099|around cosmetics and a creator program
    1100|
    1101|276
    1102|00:08:43,320 --> 00:08:46,640
    1103|and grew its revenue nearly nine times
    1104|
    1105|277
    1106|00:08:45,160 --> 00:08:48,400
    1107|over. The Clash Royale team had the
    1108|
    1109|278
    1110|00:08:46,640 --> 00:08:50,440
    1111|answer working one floor away and
    1112|
    1113|279
    </file-view>
  9. Devin
    Thinking

    I have part of the transcript but it was truncated. The file has 1204 lines total, and I only saw lines 1-279. I need to read the rest of the file to understand the full video transcript before summarizing. Let me read the rest.

    read(file_path: /tmp/qlQdZ-H_EWY.en-orig.srt, offset: 280)
    {
      "file_path": "/tmp/qlQdZ-H_EWY.en-orig.srt",
      "offset": 280
    }
    In 11,755Out 92Cache 23,040TTFT 1,117mstool_calls
  10. Output<file-view path="/tmp/qlQdZ-H_EWY.en-orig.srt" start_line="280" end_line="1204" total_lines="1204">
    <file-view path="/tmp/qlQdZ-H_EWY.en-orig.srt" start_line="280" end_line="1204" total_lines="1204">
     280|
     281|71
     282|00:02:16,720 --> 00:02:20,200
     283|Evolutions took cards you already owned
     284|
     285|72
     286|00:02:18,400 --> 00:02:22,240
     287|and gave them a second, much stronger
     288|
     289|73
     290|00:02:20,200 --> 00:02:24,240
     291|form at mid-battle with basically no
     292|
     293|74
     294|00:02:22,240 --> 00:02:26,120
     295|trade-off. At launch, the only real way
     296|
     297|75
     298|00:02:24,240 --> 00:02:27,520
     299|to unlock them was a paid bundle. These
     300|
     301|76
     302|00:02:26,120 --> 00:02:29,520
     303|cards also launched extremely
     304|
     305|77
     306|00:02:27,520 --> 00:02:30,120
     307|overpowered. This was essentially
     308|
     309|78
     310|00:02:29,520 --> 00:02:32,040
     311|pay-to-win.
     312|
     313|79
     314|00:02:30,120 --> 00:02:34,320
     315|>> They make all these evos, they make them
     316|
     317|80
     318|00:02:32,040 --> 00:02:36,959
     319|so broken intentionally, so you're
     320|
     321|81
     322|00:02:34,320 --> 00:02:39,240
     323|forced to buy them, and then they nerf
     324|
     325|82
     326|00:02:36,959 --> 00:02:39,880
     327|it in the ground after you already gave
     328|
     329|83
     330|00:02:39,240 --> 00:02:41,560
     331|them your money.
     332|
     333|84
     334|00:02:39,880 --> 00:02:43,880
     335|>> Every other video says Supercell was
     336|
     337|85
     338|00:02:41,560 --> 00:02:46,240
     339|greedy and ignored the data. They didn't
     340|
     341|86
     342|00:02:43,880 --> 00:02:48,680
     343|ignore the data. They loved the data.
     344|
     345|87
     346|00:02:46,240 --> 00:02:50,920
     347|Evolutions made $80 million in their
     348|
     349|88
     350|00:02:48,680 --> 00:02:53,240
     351|first 6 months. Every update the
     352|
     353|89
     354|00:02:50,920 --> 00:02:55,200
     355|community hated produced a revenue spike
     356|
     357|90
     358|00:02:53,240 --> 00:02:57,000
     359|as players bought in to have even just a
     360|
     361|91
     362|00:02:55,200 --> 00:02:58,560
     363|fair chance at playing the game. The
     364|
     365|92
     366|00:02:57,000 --> 00:03:00,239
     367|game lead said it out loud at a
     368|
     369|93
     370|00:02:58,560 --> 00:03:01,640
     371|conference this year.
     372|
     373|94
     374|00:03:00,239 --> 00:03:03,200
     375|When you push out cards that hit the
     376|
     377|95
     378|00:03:01,640 --> 00:03:05,200
     379|sweet spot between pay-to-win and
     380|
     381|96
     382|00:03:03,200 --> 00:03:07,280
     383|pay-to-lose, you get viral spikes in
     384|
     385|97
     386|00:03:05,200 --> 00:03:09,680
     387|player engagements. This was a stated
     388|
     389|98
     390|00:03:07,280 --> 00:03:11,200
     391|design principle. By 2023, the game that
     392|
     393|99
     394|00:03:09,680 --> 00:03:14,440
     395|had made nearly a billion dollars in
     396|
     397|100
     398|00:03:11,200 --> 00:03:16,560
     399|2017 had fallen to around $170 million,
     400|
     401|101
     402|00:03:14,440 --> 00:03:18,640
     403|its worst year since launch. Throughout
     404|
     405|102
     406|00:03:16,560 --> 00:03:20,440
     407|2024, free player progression had been
     408|
     409|103
     410|00:03:18,640 --> 00:03:22,760
     411|quietly cut somewhere between 50% and
     412|
     413|104
     414|00:03:20,440 --> 00:03:24,120
     415|70%, but there is one more reason free
     416|
     417|105
     418|00:03:22,760 --> 00:03:26,680
     419|players are checking out, and it's the
     420|
     421|106
     422|00:03:24,120 --> 00:03:28,560
     423|hardest one to prove, rigged matches.
     424|
     425|107
     426|00:03:26,680 --> 00:03:29,880
     427|This is something both I and large
     428|
     429|108
     430|00:03:28,560 --> 00:03:31,840
     431|sections of the community have been
     432|
     433|109
     434|00:03:29,880 --> 00:03:33,800
     435|speculating on for years. Based on
     436|
     437|110
     438|00:03:31,840 --> 00:03:35,880
     439|Supercell's behavior, Clash Royale isn't
     440|
     441|111
     442|00:03:33,800 --> 00:03:37,480
     443|purely a strategic game anymore. It's a
     444|
     445|112
     446|00:03:35,880 --> 00:03:39,000
     447|money-making machine, and if they were
     448|
     449|113
     450|00:03:37,480 --> 00:03:40,519
     451|rigging matches, the player base would
     452|
     453|114
     454|00:03:39,000 --> 00:03:42,640
     455|be the last people they would admit it
     456|
     457|115
     458|00:03:40,519 --> 00:03:44,360
     459|to. What we do know is a post recently
     460|
     461|116
     462|00:03:42,640 --> 00:03:46,280
     463|surfaced from a team member allegedly
     464|
     465|117
     466|00:03:44,360 --> 00:03:48,560
     467|saying that matchmaking is engineered to
     468|
     469|118
     470|00:03:46,280 --> 00:03:50,160
     471|maintain a 50% win rates by pairing you
     472|
     473|119
     474|00:03:48,560 --> 00:03:52,880
     475|based on trophy counts, recent win
     476|
     477|120
     478|00:03:50,160 --> 00:03:54,360
     479|streaks, and specific card combinations.
     480|
     481|121
     482|00:03:52,880 --> 00:03:56,360
     483|Further stating that the system is
     484|
     485|122
     486|00:03:54,360 --> 00:03:57,800
     487|designed to slow progression. This post
     488|
     489|123
     490|00:03:56,360 --> 00:03:59,560
     491|was then taken down by Supercell
     492|
     493|124
     494|00:03:57,800 --> 00:04:01,280
     495|moderators for lacking evidence.
     496|
     497|125
     498|00:03:59,560 --> 00:04:03,240
     499|Frustration is one of the main reasons
     500|
     501|126
     502|00:04:01,280 --> 00:04:04,640
     503|people keep playing and buying stuff. If
     504|
     505|127
     506|00:04:03,240 --> 00:04:05,960
     507|players have the thought that if they
     508|
     509|128
     510|00:04:04,640 --> 00:04:07,840
     511|had a shiny new troop that their win
     512|
     513|129
     514|00:04:05,960 --> 00:04:09,760
     515|rate would get better, they will buy
     516|
     517|130
     518|00:04:07,840 --> 00:04:11,200
     519|more. Nobody outside the company has
     520|
     521|131
     522|00:04:09,760 --> 00:04:12,760
     523|hard proof that a system like this
     524|
     525|132
     526|00:04:11,200 --> 00:04:14,680
     527|exists. Some users have done data
     528|
     529|133
     530|00:04:12,760 --> 00:04:16,480
     531|analysis and concluded that matchmaking
     532|
     533|134
     534|00:04:14,680 --> 00:04:19,200
     535|isn't rigged, but this was the game five
     536|
     537|135
     538|00:04:16,480 --> 00:04:21,400
     539|years ago. By early 2025, this should be
     540|
     541|136
     542|00:04:19,200 --> 00:04:24,000
     543|where the story ends. A grace game
     544|
     545|137
     546|00:04:21,400 --> 00:04:25,400
     547|slowly strangled, bleeding money, hated
     548|
     549|138
     550|00:04:24,000 --> 00:04:27,800
     551|by the people who still play this. And
     552|
     553|139
     554|00:04:25,400 --> 00:04:30,200
     555|in March, Supercell ran one more economy
     556|
     557|140
     558|00:04:27,800 --> 00:04:30,720
     559|overhaul, the one named A Tale of
     560|
     561|141
     562|00:04:30,200 --> 00:04:33,400
     563|Thieves.
     564|
     565|142
     566|00:04:30,720 --> 00:04:35,440
     567|>> Truly is a tale of thieves.
     568|
     569|143
     570|00:04:33,400 --> 00:04:37,040
     571|>> Gushing free progression again with no
     572|
     573|144
     574|00:04:35,440 --> 00:04:38,760
     575|announcement. The game manager would
     576|
     577|145
     578|00:04:37,040 --> 00:04:40,680
     579|call the backlash some of the worst it'd
     580|
     581|146
     582|00:04:38,760 --> 00:04:42,440
     583|ever seen. That is the stage that the
     584|
     585|147
     586|00:04:40,680 --> 00:04:44,040
     587|game was in when something happened that
     588|
     589|148
     590|00:04:42,440 --> 00:04:46,040
     591|no script could have predicted, because
     592|
     593|149
     594|00:04:44,040 --> 00:04:48,160
     595|Supercell had nothing to do with it. In
     596|
     597|150
     598|00:04:46,040 --> 00:04:49,760
     599|April 2025, a Rainbow Six streamer named
     600|
     601|151
     602|00:04:48,160 --> 00:04:52,080
     603|Jynxzi started playing Clash Royale on
     604|
     605|152
     606|00:04:49,760 --> 00:04:53,360
     607|stream, basically as a joke. 40,000
     608|
     609|153
     610|00:04:52,080 --> 00:04:55,160
     611|people watched him do it at the same
     612|
     613|154
     614|00:04:53,360 --> 00:04:57,040
     615|time. Other huge streamers piled in.
     616|
     617|155
     618|00:04:55,160 --> 00:04:58,440
     619|Then Mr. Beast came back. The biggest
     620|
     621|156
     622|00:04:57,040 --> 00:05:00,080
     623|names on the internet picked up a
     624|
     625|157
     626|00:04:58,440 --> 00:05:01,560
     627|9-year-old mobile game and made it
     628|
     629|158
     630|00:05:00,080 --> 00:05:03,160
     631|popular again. And the numbers did
     632|
     633|159
     634|00:05:01,560 --> 00:05:05,280
     635|something games this old simply do not
     636|
     637|160
     638|00:05:03,160 --> 00:05:07,680
     639|do. Monthly revenue went from around 15
     640|
     641|161
     642|00:05:05,280 --> 00:05:10,240
     643|to 17 million before Jynxzi up to 28
     644|
     645|162
     646|00:05:07,680 --> 00:05:11,800
     647|million in May and 77 million in July.
     648|
     649|163
     650|00:05:10,240 --> 00:05:14,480
     651|By Supercell's own blog, new players
     652|
     653|164
     654|00:05:11,800 --> 00:05:16,800
     655|were up 500% year over year. Supercell
     656|
     657|165
     658|00:05:14,480 --> 00:05:18,240
     659|did not engineer this. They didn't run a
     660|
     661|166
     662|00:05:16,800 --> 00:05:20,080
     663|brilliant campaign. [music] A streamer
     664|
     665|167
     666|00:05:18,240 --> 00:05:22,520
     667|got bored, his audience followed, and a
     668|
     669|168
     670|00:05:20,080 --> 00:05:24,440
     671|dying game got single luckiest second
     672|
     673|169
     674|00:05:22,520 --> 00:05:26,800
     675|chance in the history of mobile gaming,
     676|
     677|170
     678|00:05:24,440 --> 00:05:29,520
     679|free, handed to them on a plate. All
     680|
     681|171
     682|00:05:26,800 --> 00:05:32,360
     683|they had to do was not screw it up. They
     684|
     685|172
     686|00:05:29,520 --> 00:05:33,880
     687|screwed it up on November 24th, 2025,
     688|
     689|173
     690|00:05:32,360 --> 00:05:35,520
     691|right in the biggest run the game had
     692|
     693|174
     694|00:05:33,880 --> 00:05:37,760
     695|seen in eight years. This is when
     696|
     697|175
     698|00:05:35,520 --> 00:05:39,760
     699|Supercell shipped two things. The first
     700|
     701|176
     702|00:05:37,760 --> 00:05:41,600
     703|was level 16, a new card level that
     704|
     705|177
     706|00:05:39,760 --> 00:05:43,080
     707|added nothing to how the game plays and
     708|
     709|178
     710|00:05:41,600 --> 00:05:45,560
     711|cost more money to reach. No new
     712|
     713|179
     714|00:05:43,080 --> 00:05:46,880
     715|ability, no new strategy, just a higher
     716|
     717|180
     718|00:05:45,560 --> 00:05:49,640
     719|number you pay to climb.
     720|
     721|181
     722|00:05:46,880 --> 00:05:52,040
     723|>> What is so meaningful about adding
     724|
     725|182
     726|00:05:49,640 --> 00:05:53,000
     727|another level to the game? It does
     728|
     729|183
     730|00:05:52,040 --> 00:05:55,080
     731|nothing.
     732|
     733|184
     734|00:05:53,000 --> 00:05:57,160
     735|>> Players summed it up with one line. No
     736|
     737|185
     738|00:05:55,080 --> 00:05:59,080
     739|benefits, just cost more money to play.
     740|
     741|186
     742|00:05:57,160 --> 00:06:01,200
     743|The second thing was heroes. Heroes
     744|
     745|187
     746|00:05:59,080 --> 00:06:03,200
     747|broke the champion trade on purpose. A
     748|
     749|188
     750|00:06:01,200 --> 00:06:05,400
     751|hero's base card is already good on its
     752|
     753|189
     754|00:06:03,200 --> 00:06:07,360
     755|own and identical to the base card for
     756|
     757|190
     758|00:06:05,400 --> 00:06:09,600
     759|the same amount of elixir. Without the
     760|
     761|191
     762|00:06:07,360 --> 00:06:11,760
     763|ability, a hero plays exactly like the
     764|
     765|192
     766|00:06:09,600 --> 00:06:14,040
     767|strong base card. With the ability, it's
     768|
     769|193
     770|00:06:11,760 --> 00:06:16,040
     771|the same strong card plus a free upside
     772|
     773|194
     774|00:06:14,040 --> 00:06:18,040
     775|every time you play it. No elixir cycle,
     776|
     777|195
     778|00:06:16,040 --> 00:06:20,160
     779|no real cost. What's worse was that the
     780|
     781|196
     782|00:06:18,040 --> 00:06:22,160
     783|ability often provides more value than
     784|
     785|197
     786|00:06:20,160 --> 00:06:24,280
     787|the elixir cost to play. Most heroes
     788|
     789|198
     790|00:06:22,160 --> 00:06:25,960
     791|released extremely overpowered and right
     792|
     793|199
     794|00:06:24,280 --> 00:06:27,680
     795|out of the gate you could put two heroes
     796|
     797|200
     798|00:06:25,960 --> 00:06:29,840
     799|in your deck. The community called this
     800|
     801|201
     802|00:06:27,680 --> 00:06:31,960
     803|the worst update the game had ever seen.
     804|
     805|202
     806|00:06:29,840 --> 00:06:33,760
     807|>> The original developers strived so hard
     808|
     809|203
     810|00:06:31,960 --> 00:06:37,000
     811|to balance the game making competitive.
     812|
     813|204
     814|00:06:33,760 --> 00:06:37,000
     815|The modern devs are like
     816|
     817|205
     818|00:06:37,080 --> 00:06:40,160
     819|Competitive?
     820|
     821|206
     822|00:06:38,480 --> 00:06:42,280
     823|Money go burr, right? And then
     824|
     825|207
     826|00:06:40,160 --> 00:06:43,960
     827|>> It removed half the skill and half the
     828|
     829|208
     830|00:06:42,280 --> 00:06:45,680
     831|thinking. The heroes announcement was
     832|
     833|209
     834|00:06:43,960 --> 00:06:47,440
     835|one of the most disliked videos on the
     836|
     837|210
     838|00:06:45,680 --> 00:06:48,919
     839|entire channel. A streamer can bring you
     840|
     841|211
     842|00:06:47,440 --> 00:06:50,000
     843|back to a game, but if the game feels
     844|
     845|212
     846|00:06:48,919 --> 00:06:51,560
     847|bad, you leave again.
     848|
     849|213
     850|00:06:50,000 --> 00:06:53,520
     851|>> There's a champion added, like it's
     852|
     853|214
     854|00:06:51,560 --> 00:06:55,800
     855|actually fun. It's like a new card.
     856|
     857|215
     858|00:06:53,520 --> 00:06:57,480
     859|Heroes aren't exciting because oh, it's
     860|
     861|216
     862|00:06:55,800 --> 00:06:58,200
     863|just a musketeer, but now it's more
     864|
     865|217
     866|00:06:57,480 --> 00:07:00,120
     867|broken.
     868|
     869|218
     870|00:06:58,200 --> 00:07:01,720
     871|>> Revenue fell by nearly half within 3
     872|
     873|219
     874|00:07:00,120 --> 00:07:04,919
     875|months. From around 68 million in
     876|
     877|220
     878|00:07:01,720 --> 00:07:07,040
     879|September to 37 million by January 2026.
     880|
     881|221
     882|00:07:04,919 --> 00:07:08,760
     883|The comeback was erased almost as fast
     884|
     885|222
     886|00:07:07,040 --> 00:07:11,320
     887|as it arrived. Jinx he streamed it less
     888|
     889|223
     890|00:07:08,760 --> 00:07:12,120
     891|and less and on February 6th, 2026 he
     892|
     893|224
     894|00:07:11,320 --> 00:07:14,960
     895|officially quits.
     896|
     897|225
     898|00:07:12,120 --> 00:07:15,720
     899|>> I am quitting Clash until I see
     900|
     901|226
     902|00:07:14,960 --> 00:07:16,919
     903|something get fixed.
     904|
     905|227
     906|00:07:15,720 --> 00:07:18,600
     907|>> The community had seen it coming for
     908|
     909|228
     910|00:07:16,919 --> 00:07:20,360
     911|months. One comment from the previous
     912|
     913|229
     914|00:07:18,600 --> 00:07:21,960
     915|October had a single warning. They got a
     916|
     917|230
     918|00:07:20,360 --> 00:07:23,720
     919|second wind, a lot of it thanks to
     920|
     921|231
     922|00:07:21,960 --> 00:07:25,520
     923|Jinxie, they better not blunder it
     924|
     925|232
     926|00:07:23,720 --> 00:07:27,600
     927|again. They did blunder it. When people
     928|
     929|233
     930|00:07:25,520 --> 00:07:29,160
     931|bought champions, they added evolutions.
     932|
     933|234
     934|00:07:27,600 --> 00:07:31,280
     935|When people unlocked all the evolutions,
     936|
     937|235
     938|00:07:29,160 --> 00:07:32,760
     939|they added heroes. Each update forced
     940|
     941|236
     942|00:07:31,280 --> 00:07:35,560
     943|players to spend more money than the
     944|
     945|237
     946|00:07:32,760 --> 00:07:37,160
     947|previous. On February 10th, 2026 the CEO
     948|
     949|238
     950|00:07:35,560 --> 00:07:38,960
     951|of Supercell published a blog called
     952|
     953|239
     954|00:07:37,160 --> 00:07:40,640
     955|Clash Royale: A Historic Year. It
     956|
     957|240
     958|00:07:38,960 --> 00:07:43,080
     959|celebrated the best year the game had
     960|
     961|241
     962|00:07:40,640 --> 00:07:44,840
     963|seen since 2017. It credited the team's
     964|
     965|242
     966|00:07:43,080 --> 00:07:46,920
     967|design decisions and an in-game Michael
     968|
     969|243
     970|00:07:44,840 --> 00:07:48,400
     971|Bolton campaign. Xingxi was not in it.
     972|
     973|244
     974|00:07:46,920 --> 00:07:49,960
     975|Creators were not in it. The single
     976|
     977|245
     978|00:07:48,400 --> 00:07:52,120
     979|reason any of it happened did not make
     980|
     981|246
     982|00:07:49,960 --> 00:07:53,520
     983|the post. Xingxi's response, probably
     984|
     985|247
     986|00:07:52,120 --> 00:07:55,680
     987|the biggest spit in the face I've ever
     988|
     989|248
     990|00:07:53,520 --> 00:07:57,680
     991|seen. Mr. Beast replied publicly with
     992|
     993|249
     994|00:07:55,680 --> 00:07:59,320
     995|one sentence. I only started playing
     996|
     997|250
     998|00:07:57,680 --> 00:08:01,760
     999|again because of you. Two days later the
    1000|
    1001|251
    1002|00:07:59,320 --> 00:08:03,480
    1003|CEO edited the post with an apology, but
    1004|
    1005|252
    1006|00:08:01,760 --> 00:08:05,360
    1007|it was too late. Creators were already
    1008|
    1009|253
    1010|00:08:03,480 --> 00:08:07,200
    1011|announcing boycotts. A creator event got
    1012|
    1013|254
    1014|00:08:05,360 --> 00:08:08,760
    1015|postponed when players pulled out and
    1016|
    1017|255
    1018|00:08:07,200 --> 00:08:11,160
    1019|pros with hundreds of thousands in
    1020|
    1021|256
    1022|00:08:08,760 --> 00:08:12,800
    1023|career winnings started walking. The CEO
    1024|
    1025|257
    1026|00:08:11,160 --> 00:08:14,640
    1027|didn't credit the creators because
    1028|
    1029|258
    1030|00:08:12,800 --> 00:08:16,120
    1031|watching from the inside it genuinely
    1032|
    1033|259
    1034|00:08:14,640 --> 00:08:17,640
    1035|looks like the comeback was their own
    1036|
    1037|260
    1038|00:08:16,120 --> 00:08:19,520
    1039|work, which means the people running
    1040|
    1041|261
    1042|00:08:17,640 --> 00:08:21,200
    1043|this game still don't understand why it
    1044|
    1045|262
    1046|00:08:19,520 --> 00:08:23,120
    1047|almost [music] lived. Xingxi said it
    1048|
    1049|263
    1050|00:08:21,200 --> 00:08:24,760
    1051|plainer than any analyst could. If the
    1052|
    1053|264
    1054|00:08:23,120 --> 00:08:26,400
    1055|comeback was a result of a talented
    1056|
    1057|265
    1058|00:08:24,760 --> 00:08:28,280
    1059|team, you would have seen explosive
    1060|
    1061|266
    1062|00:08:26,400 --> 00:08:28,919
    1063|growth in the years before and you
    1064|
    1065|267
    1066|00:08:28,280 --> 00:08:30,440
    1067|didn't. [music]
    1068|
    1069|268
    1070|00:08:28,919 --> 00:08:32,039
    1071|And the excuse that live service games
    1072|
    1073|269
    1074|00:08:30,440 --> 00:08:33,919
    1075|are just hard to run doesn't hold here
    1076|
    1077|270
    1078|00:08:32,039 --> 00:08:35,760
    1079|either. In the same company, in the same
    1080|
    1081|271
    1082|00:08:33,919 --> 00:08:37,320
    1083|years, another dying Supercell game got
    1084|
    1085|272
    1086|00:08:35,760 --> 00:08:39,280
    1087|the same kind of second chance. Brawl
    1088|
    1089|273
    1090|00:08:37,320 --> 00:08:41,599
    1091|Stars hit its lowest player count ever
    1092|
    1093|274
    1094|00:08:39,280 --> 00:08:43,320
    1095|in early 2023. Supercell rebuilt it
    1096|
    1097|275
    1098|00:08:41,599 --> 00:08:45,160
    1099|around cosmetics and a creator program
    1100|
    1101|276
    1102|00:08:43,320 --> 00:08:46,640
    1103|and grew its revenue nearly nine times
    1104|
    1105|277
    1106|00:08:45,160 --> 00:08:48,400
    1107|over. The Clash Royale team had the
    1108|
    1109|278
    1110|00:08:46,640 --> 00:08:50,440
    1111|answer working one floor away and
    1112|
    1113|279
    1114|00:08:48,400 --> 00:08:53,160
    1115|shipped a paid card level instead. Clash
    1116|
    1117|280
    1118|00:08:50,440 --> 00:08:54,520
    1119|Royale had its best year since 2017. A
    1120|
    1121|281
    1122|00:08:53,160 --> 00:08:56,240
    1123|company that built one of the best
    1124|
    1125|282
    1126|00:08:54,520 --> 00:08:57,800
    1127|competitive games ever put on a phone
    1128|
    1129|283
    1130|00:08:56,240 --> 00:08:59,520
    1131|could not stop itself from adding more
    1132|
    1133|284
    1134|00:08:57,800 --> 00:09:01,000
    1135|pay-to-win in the middle of a comeback.
    1136|
    1137|285
    1138|00:08:59,520 --> 00:09:02,440
    1139|They had the bones of a game that could
    1140|
    1141|286
    1142|00:09:01,000 --> 00:09:04,080
    1143|have run forever. They could have made
    1144|
    1145|287
    1146|00:09:02,440 --> 00:09:06,240
    1147|the in-app purchases purely cosmetic
    1148|
    1149|288
    1150|00:09:04,080 --> 00:09:07,960
    1151|based or at the very least more fair. So
    1152|
    1153|289
    1154|00:09:06,240 --> 00:09:10,040
    1155|the better player always wins. They
    1156|
    1157|290
    1158|00:09:07,960 --> 00:09:12,560
    1159|chose a slot machine model instead and
    1160|
    1161|291
    1162|00:09:10,040 --> 00:09:14,480
    1163|it made them billions of dollars. Clash
    1164|
    1165|292
    1166|00:09:12,560 --> 00:09:16,400
    1167|Royale will most likely still survive
    1168|
    1169|293
    1170|00:09:14,480 --> 00:09:18,200
    1171|the way it survived everything else.
    1172|
    1173|294
    1174|00:09:16,400 --> 00:09:19,960
    1175|Old, profitable, running on the few
    1176|
    1177|295
    1178|00:09:18,200 --> 00:09:21,760
    1179|million people who pay for anything
    1180|
    1181|296
    1182|00:09:19,960 --> 00:09:23,760
    1183|while everyone else has moved on and
    1184|
    1185|297
    1186|00:09:21,760 --> 00:09:25,680
    1187|reminisces on the absolute king of a
    1188|
    1189|298
    1190|00:09:23,760 --> 00:09:27,720
    1191|game that this used to be. This game had
    1192|
    1193|299
    1194|00:09:25,680 --> 00:09:30,640
    1195|every chance handed to them and still
    1196|
    1197|300
    1198|00:09:27,720 --> 00:09:30,640
    1199|found a way to lose.
    1200|
    1201|301
    1202|00:09:39,680 --> 00:09:41,840
    1203|>> Mhm.
    </file-view>
  11. Devin
    Thinking

    I now have the full transcript. I understand the video. Now I can provide a summary. The video is titled "Clash Royale is a Disgrace to Mobile Gaming" by bananadev, 9:40 long. Key points: 1. Clash Royale went from being a top mobile game to allegedly rigging matches and making players quit. 2. Launched March 2, 2016, was #1 downloaded and top grossing, made $1 billion in first 9 months. Tencent bought most of Supercell for $10 billion. 3. It was a skill-based real-time card game with high esports potential (Clash Royale League had $1M+ prize pools by 2021). 4. The decline started with "boiling a frog" updates: - Oct 25, 2021: Champions launched - stronger cards with special abilities, locked behind king level 14. - 2022: Level 15 / Elite levels with new hard-to-earn currency. - June 18, 2023: Card evolutions - stronger forms with basically no trade-off, initially locked behind paid bundles, launched overpowered. 5. Data shows hated updates produced revenue spikes. Evolutions made $80M in first 6 months. 6. Game lead said: "When you push out cards that hit the sweet spot between pay-to-win and pay-to-lose, you get viral spikes in player engagements." This was a stated design principle. 7. Revenue fell from ~$1B in 2017 to ~$170M by 2023. 8. Free player progression was quietly cut 50-70% in 2024. 9. Allegations of rigged matchmaking - a post from alleged team member said matchmaking engineered to maintain 50% win rate and slow progression, but taken down for lacking evidence. 10. March 2025: "A Tale of Thieves" economy overhaul - more cuts to free progression, major backlash. 11. April 2025: Rainbow Six streamer Jynxzi started playing Clash Royale, followed by other huge streamers and MrBeast. This caused a massive comeback: - Monthly revenue went from $15-17M to $28M in May to $77M in July 2025. - New players up 500% year over year. - Supercell didn't engineer this comeback. 12. November 24, 2025: Supercell shipped level 16 (adds nothing, just costs more) and Heroes (broke champion trade, overpowered, free upside). 13. Revenue fell by nearly half within 3 months, from $68M in Sept to $37M by Jan 2026. Jynxzi quit on Feb 6, 2026. 14. Feb 10, 2026: Supercell CEO published "Clash Royale: A Historic Year" blog celebrating best year since 2017, credited design decisions and Michael Bolton campaign, didn't mention Jynxzi or creators. 15. MrBeast replied "I only started playing again because of you." CEO edited post with apology 2 days later, but too late - boycotts and pros walking. 16. Compares to Brawl Stars which got a second chance and grew revenue 9x by focusing on cosmetics and creator program. Clash Royale team had the answer one floor away but chose paid card levels. 17. Conclusion: Clash Royale had the bones of a game that could run forever, chose slot machine model, made billions, but lost its player base and squandered the luckiest second chance. I'll now summarize this for the user.

    Clash Royale is a Disgrace to Mobile Gaming — bananadev (9:40)

    The video argues that Clash Royale squandered one of the luckiest second chances in mobile gaming by repeatedly choosing pay-to-win monetization over competitive balance.

    Key points:

    • Launch & peak (2016): Released March 2, 2016, it hit #1 on the US App Store for both downloads and grossing on day one and made roughly $1 billion in its first 9 months. Tencent soon valued Supercell at $10 billion. It was a high-skill real-time card game with a growing esports scene.

    • Slow decline via updates:

      • Oct 2021 — Champions: Stronger cards with mid-match abilities, locked behind king level 14.
      • 2022 — Level 15 / Elite levels: Required a new currency that was almost impossible to earn for free.
      • June 2023 — Card evolutions: Cards got second, much stronger forms with little trade-off, initially tied to paid bundles and launched overpowered.
      • 2024: Free player progression was quietly cut by an estimated 50–70%.
      • March 2025 — "A Tale of Thieves": Another economy overhaul that gutted free progression, drawing heavy backlash.
    • The design philosophy: The narrator notes that hated updates consistently produced revenue spikes. Evolutions made $80 million in six months. A game lead reportedly described the strategy as pushing cards to the "sweet spot between pay-to-win and pay-to-lose" to drive viral engagement spikes.

    • Rigged-match speculation: The video discusses long-standing community suspicion that matchmaking is engineered to enforce ~50% win rates and slow progression. An alleged internal post making that claim was removed by Supercell moderators for "lacking evidence."

    • The accidental comeback (2025): In April 2025, streamer Jynxzi started playing Clash Royale, followed by other big creators and MrBeast. Revenue jumped from $15–17 million to $77 million by July 2025, with new players up 500% year over year. Supercell did not engineer this revival.

    • Blowing the second chance: On November 24, 2025, Supercell shipped Level 16 (no new gameplay, just higher cost) and Heroes (overpowered cards with free upside abilities). The community called it the worst update ever. Revenue fell from ~$68 million in September to ~$37 million by January 2026. Jynxzi officially quit on February 6, 2026.

    • The "Historic Year" blog backlash: On February 10, 2026, Supercell's CEO published a post celebrating the game's best year since 2017 and credited design decisions and an in-game Michael Bolton campaign, without mentioning Jynxzi or creators. MrBeast replied, "I only started playing again because of you." The CEO edited in an apology two days later, but creator boycotts and pro walkouts had already begun.

    • Comparison to Brawl Stars: Around the same time, Brawl Stars got a similar second chance and grew revenue nearly 9x by shifting to cosmetics and a creator program. The narrator says Clash Royale "had the answer working one floor away" but shipped a paid card level instead.

    Bottom line: Clash Royale was built with the bones of a game that could last indefinitely, but Supercell kept choosing monetization that undermined competitive fairness. Even after a streamer-driven resurgence handed them a free comeback, they doubled down on pay-to-win and drove away the players and creators who had returned.

    In 9,504Out 1,520Cache 34,688TTFT 1,220ms