Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Specter-FlipperZero — 👻 Specter — Flipper Zero 用パッシブ 13.56 MHz NFC リーダー/スキマー盗聴器スイープ。オンボード NFC チップを使用したカウンターサーベイランス EMF メーター。追加ハードウェア不要。 | Kitploit
ツール/GitHubGitHub/at0m-b0mb/specter-flipperzero
防御ツール組み込みシステムセキュリティIoTセキュリティRFID/NFCツールペネトレーションテストハードウェアセキュリティレッドチーミング
GitHubat0m-b0mb/specter-flipperzero

Specter-FlipperZero

👻 Specter — Flipper Zero 用パッシブ 13.56 MHz NFC リーダー/スキマー盗聴器スイープ。オンボード NFC チップを使用したカウンターサーベイランス EMF メーター。追加ハードウェア不要。

リポジトリを見る
884287日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Specter — NFCリーダー&スキマー検出用バグスイープ(Flipper Zero向け)

Specter 👻

見えないリーダーを探り当てる。

Latest release Downloads Stars Build

Flipper Zero Onboard NFC No extra hardware Listen-only MIT

Specterは、あなたのFlipper Zeroを、アクティブな13.56 MHz NFCリーダーを探すためのポケットサイズの対盗聴バグスイープに変えます。電源が入ったリーダーが常時放射しているRFフィールドをパッシブに傍受します — 決済端末に忍ばせられた隠しカードスキマー、ドアパネルの裏に隠された秘密のリーダー、机の下にテープで貼られた不正ロガー — そして、それがどこにあるか、どんな種類のものか、部屋がクリーンかどうか、さらに見張りを続ければ — あなたが離れている間に現れた瞬間を教えてくれます。送信は一切行いません。

リーダーは見えない。Specterがそれを見えるようにする。

掲載メディア
Help Net Security  ·  Cyber Security News


📟 Flipper上での動作

Specterの使用例: 静かな部屋のスイープ、リーダーへの接近、MAXでのロックオン、ポーリング周期のフィンガープリント、そしてサイトサーベイの判定

スイープの開始から終了まで: 静かな部屋 → 接近 → ロックオン → 何かの特定 → 部屋の判定。

Specterのスクリーン

Sweep(静か)  ·  Sweep(リーダーロック)  ·  Fingerprint  ·  Survey(実行中)  ·  Survey(判定)
Watch(クリア)  ·  Watch(リーダー検出!)  ·  Logbook  ·  Calibrate  ·  Settings


✨ 5つのモード

Specterは、1つのセンサーを中心にした5つのツールです。それぞれが異なる問いに答えるため、実際に何を調べたいかによって適切なモードが変わります:


🔍 Sweep — どこにあるか?

Sweep — リーダー発見、メーターが最大値に

機能。 ライブEMFメーター。Flipperを平らに持ち、調べたいもの — カード端末、ドアリーダー、ATMの縁の下側、小包、机 — の上をゆっくり動かします。針がリアルタイムでフィールド強度を追います。

表示されるもの。

  • ダイヤル — 針 = ライブの読み値、小さなドット = ピークホールド(触れた中で最も強い位置。位置の比較が可能)。
  • FIELD % — 同じ読み値を数値で表示。▲ / ▼ トレンド矢印が、直近の0.5秒で状況が強くなったか弱くなったかを示します。探しているときは、この矢印が数値よりも重要です。
  • PK / C — ピーク読み値と、接触した回数。
  • 下部ストリップ — ライブ波形と現在の感度(静かなとき)。キャリアが検出されると、近接度を示す黒い**● ACTIVE READER**アラームバーに切り替わります。
  • 近接度 — FAINT → NEAR → CLOSE → STRONG → MAX。MAXはメーターが最大値に達した状態: この測定で解像できる限界まで近づいています。

サウンド。 任意のガイガーカウンター風クリック音で、近づくほど速くなります。Flipperをポケットに入れたまま、音だけで探すこともできます。

キーアクション
OKピークホールドと接触回数をリセット
OK長押しこの読み値をログブックに保存
LEFT部屋のノイズフロアにキャリブレーション(3秒)

🔬 Fingerprint — どんな種類のものか?

Fingerprint — ポーリングリーダーを特定

機能。 Sweepで何かを見つけたら、Flipperをそれに静止させて当てます。Fingerprintは近接度の測定をやめ、キャリアのオン/オフエッジのタイミングを計測します。これこそが、発信源の種類を区別する決め手です。

表示されるもの。 判定、信頼度バー、そしてその根拠となる証拠:

クラス実際の意味
CONTINUOUSキャリアが常時オン
POLLING固定されたクリスタルタイミングのポーリング周期 — 周期はmsで表示
INTERMITTENTバースト的だが不規則 — 多くの場合、使用中のスマホやリーダー

その下にはPER(ポーリング周期)、BST(バースト幅)、JIT(ジッター)、DUTY(実デューティサイクル)に加え、生のキャリアのロジックアナライザー風パルス列が表示されます — 判定を鵜呑みにする必要はありません。本物のポーリングリーダーは、紛れもない方形波として現れます。

タイミングの前の~は、2msのサンプリング下限に近いことを意味し、信頼度もそれに合わせて割り引かれます。

キーアクション
OK発見をログブックに保存
OK長押し測定を再開

🗺️ Site Survey — この部屋はクリーンか?

Site Survey — 判定

機能。 空間全体の時間制限付きスイープ。開始して部屋を普通に歩き回ると、最後に1つの判定が得られます — 針を注視する必要はありません。

表示されるもの。 実行中はカウントダウンとプログレスバー、その後は判定カード:

  • CLEAN — ノイズフロアを超えるものなし
  • TRACE — 短い、または微弱なヒット。ゆっくり2回目のパスを推奨
  • ACTIVE READER — 実際に何かが起動して放射していた

…さらにMAX / AVGフィールド、接触回数、FIELD % — サーベイ中にキャリアが実際に上がっていた割合。これは4つの数値の中で最も示唆に富むことが多いです。30秒、60秒、または2分間実行され、結果は自動的にログされます。

キーアクション
OKサーベイを再実行

🛰️ Watch Mode — 離れている間に現れたか?

Watch Mode — リーダー検出

機能。 無期限に見張ります。セットしてFlipperを置き、離れます。Sweepが自分で探すモード、Surveyが固定時間のテストであるのに対し、Watchはただ待ち続けます — 数分でも数時間でも。

表示されるもの。 何もない間は大きな経過時計とALL CLEARが表示されます。リーダーが現れた瞬間、バンドが**READER PRESENT**に反転し、画面が点灯し、アラームが鳴ります。バンドは点滅ではなく安定表示で — 代わりに小さなマーカーがパルスするため、ストロボのようにチカチカせずにライブ状態として読み取れます。通過後も画面には証拠が残ります: HITS(接触回数)、PEAK、LAST(最後の検出からどれだけ経過したか)、SEEN(キャリアが実際に上がっていた合計時間)。

Watchは意図的にステルスモードを無視します — 何かを見たのに知らせない暗く静かな見張りは、役に立たないどころか有害です。

キーアクション
OK再セット — 時計とカウンターをクリア

📖 Logbook — 何を、いつ見つけたか?

発見は1つのアクションで2箇所に保存されるため、デバイス上で読めるだけでなく、すでにスプレッドシート形式になっています — エクスポート手順を覚える必要はありません:

logbook.txt — グループ化、デバイス上のビューア用logbook.csv — 各エントリを1フラット行に
``` 2026-07-18 14:35:11 SURVEY 60s ACTIVE max74… 2026-07-18 14:32:07 READER POLLING 204ms… ``` ``` timestamp,type,detail 2026-07-18 14:35:11,SURVEY,60s ACTIVE … 2026-07-18 14:32:07,READER,POLLING 204ms … ```

エントリには SWEEP、READER、SURVEY、WATCH のタグが付けられ、Flipperの時計からタイムスタンプが押されます。両ファイルはSDカードの apps_data/specter/ に保存されます。デバイスからデータが外部に出ることは一切ありません。Settings → Clear logbook から消去できます(最初に確認が求められます——アプリが実行できる唯一の取り消し不能な操作です)。


⚙️ 補助機能

🎯 自動キャリブレーション

Sweep画面でLEFTを押すと、Specterは周囲のノイズフロアを3秒間聞き取り、測定した値のすぐ上に検出しきい値を設定します——それがCustom感度として保存されます。部屋ごとにRFフロアは異なります。これはビルド時に組み込まれた数値ではなく、あなたが立っている場所に合わせて調整されます。実行するときは静かな場所に立ってください。

🕶️ ステルスモード

スイープ全体を通して画面とLEDを暗く保つため、あなたが探っている間もFlipperが光ることはありません。サウンドとバイブレーションは動作し続けます——目的は、スイープ中に頼りにするフィードバックを無効にすることではありません。ステルス画面を終了するとディスプレイが再点灯するため、BACKを押せば常に照明付きのメニューに戻れます。

📏 メーターの読み方

触れているリーダーが100%の時間で放射しない理由。 検出器は1つの物理的な事柄を測定します:13.56 MHzキャリアが立ち上がっている時間の割合です。しかしリーダーはポーリングします——短いバースト、スリープ、また別のバースト。一般的な端末は20〜35%の時間しか放射していないため、生のデューティサイクルはどれだけ近づいても約30%で飽和します。

その生の数値をゲージに表示すると、完全な検出が3分の1のように見えてしまいます。メーターは代わりにその実際のポーリング帯域に合わせてスケーリングされています:

生のデューティは失われません:ノイズフロア、自動キャリブレーション、Fingerprint画面のDUTYはすべて真のデューティサイクルで動作し続けます。なぜなら、これらは信号を表しており、あなたの距離ではないからです。文字通りの数値が欲しいですか? Settings → Meter → Raw を参照してください。

💾 すべてが永続化される

感度、スイープ時間、サウンド、バイブ、LED、ステルス、ロギング、メーターモードは、変更した瞬間にSDカードへ保存されます。設定を忘れるスイープキットは、永続化がないのと同じくらい役に立ちません。


🧠 仕組み

電源が入っているすべてのNFCリーダーは、カードが起動するのを待ちながら13.56 MHzキャリアで継続的に空気中に信号を送信しています。あなたには見えませんが、FlipperのNFCチップには見えます:ST25R3916にはハードウェアの外部フィールド検出器(Flipperがカードをエミュレートし、リーダーが通信していることを認識できるようにする回路と同じもの)があります。Specterはチップを検出専用モードに置き、その「フィールド存在?」ビットを毎秒約500回サンプリングします——自らのキャリアをオンにすることは一切ありません。

その単一のビットを十分な速さでサンプリングすると、2つの独立した信号が得られます:```mermaid flowchart LR R["🔍 Hidden 13.56 MHz reader / skimmer
(constantly polling its field)"] -- "RF carrier" --> A

root@kitploit:~
subgraph FLIP["Flipper Zero — Specter.fap"]
  A["ST25R3916 NFC chip<br/>external-field detector"] --> S["Sampler thread<br/>~500 samples/s"]
  S --> M["<b>How much?</b><br/>carrier duty-cycle<br/>peak · average · contacts"]
  S --> C["<b>What rhythm?</b><br/>burst / gap edge timing<br/>period · jitter"]
  M --> G["EMF gauge · waveform<br/>geiger clicks · LED · vibe"]
  M --> V["Survey verdict<br/>CLEAN / TRACE / ACTIVE"]
  C --> K["Emitter class<br/>CONTINUOUS / POLLING /<br/>INTERMITTENT + pulse train"]
  V --> L["📖 SD logbook"]
  K --> L
end
root@kitploit:~
**量 → 強度。** 短い時間枠の中で、Specter はキャリアが存在する*時間の割合*を測定し、それを **FIELD %** に平滑化します。Flipper の真上に置かれたリーダーはメーターを最大に振らせます。弱い、または遠いリーダーはそれをわずかに動かすだけです。それが針、近接度の単語、クリック率を駆動します。

**リズム → 同一性。** 別途、そのビットのすべての遷移が計時されます。200 ms ごとに 20 ms だけ起動するリーダーは、ほぼジッターのないバースト/ギャップパターンを生成します。これは、そのポーリングループが水晶発振器で計時されたステートマシンによって駆動されるためです。手の動きや RF ノイズはそれほど安定していません。その違いこそが **POLLING** と **INTERMITTENT** を区別するものです。

### 決定レイヤーは実機でテストされる

Specter が数値を*主張*(「これはポーリングリーダーだ」「この部屋はクリーンだ」「針はこう読まれるべきだ」)に変換する箇所は、ハードウェア依存性のない純粋な C であり、デバイス上で発見されるのではなく、ホストテストによって固定されています。```bash
make -C test     # 300 checks: classifier, verdict, meter scaling, presence

🚀 インストール

開発ボードもファームウェアの書き込みも不要 — 単一の .fap ファイルです。

オプション A — ビルド済み .fap(最も簡単)

  1. Releases ページから適切な .fap を入手します:

    お使いのファームウェアファイル
    公式 / 標準specter.fap
    Unleashed、RogueMaster、Momentum またはそれ以降のものspecter-fw-dev.fap

    Flipper に APP:87 < FW:88 — This app might not work と表示された場合、 間違ったファイルです — もう一方のファイルを使用してください。アプリの API バージョンは コンパイル時に固定されるため、単一のビルドで両方のファームウェア系統に対応することはできません。 Continue を押せば通常は動作しますが、対応するビルドではその確認は求められません。

オプション B — ufbt を使って自分でビルドする```bash

one-time

python3 -m pip install --upgrade ufbt

from the repo root, with your Flipper plugged in over USB:

ufbt # build specter.fap into ./dist ufbt launch # build, upload to the Flipper and open it make -C test # run the host tests for the pure logic

root@kitploit:~
`.fap` は `dist/specter.fap` に出力されます。`ufbt launch` はそれを `apps/NFC/` にコピーして起動します。

> `icons/` 内のアイコン、`images/` 内のスクリーンショットとバナーは生成されたものです。再生成するには
> `python3 tools_gen_icons.py`、`python3 tools_gen_mockups.py`、`python3 tools_gen_banner.py` を実行してください(`pillow` が必要です)。

---

## 🎮 使い方

**スイープの一連の流れ:**

1. **Specter** を起動します。**Sweep** 画面で **LEFT** を押し、3秒間そのままにして部屋のノイズフロアにキャリブレーションします。
2. Flipper を平らに保ち、確認対象(カード端末、ドアリーダー、ATMの下側の縁、小包、机など)の上を**ゆっくり**動かします。
   - **波形が静か / 平坦** → 範囲内にアクティブなリーダーはありません。
   - **針が上がり、クリック音が速くなる** → エミッターに近づいています。ピークに向かって進み続けてください。
   - **`● ACTIVE READER` + アラーム枠** → アクティブなリーダーがすぐそこにあります。
3. 何か見つかりましたか? 戻って **Fingerprint** を開きます。Flipper をそのまま当てて、リズムが落ち着くのを待ちます — 通常は数秒で十分です。**OK** を押して発見を保存します。
4. 代わりに部屋全体を確認しますか? **Site Survey** を開き、バーが満杯になるまで空間を歩き回り、判定結果を読み取ります。
5. その場を離れますか? Flipper を **Watch Mode** にすると、見張りをしてくれます。離れている間にリーダーが現れたら、起きてアラームを鳴らします。
6. **Logbook** で保存したすべての項目をタイムスタンプ付きで確認できます — または、カードから `logbook.csv` を取り出してスプレッドシートに読み込めます。

> 💡 まず既知の正常なリーダー(自分のスマホのNFC、または信頼できる非接触端末)をスイープして、メーター上で強い正当なフィールドがどのように見えるか、またそのフィンガープリントがどのように読み取られるかを確認してください。その後で探索に出かけましょう。

### コントロール

| 画面 | キー | 動作 |
|---|---|---|
| **Sweep** | `OK` | ピーク / コンタクトをリセット |
| | `OK長押し` | 現在の読み取り値をログに記録 |
| | `LEFT` | ノイズフロアをキャリブレーション(3秒) |
| **Fingerprint** | `OK` | 発見をログブックに保存 |
| | `OK長押し` | 測定を再開 |
| **Site Survey** | `OK` | サーベイを再度実行 |
| **Watch Mode** | `OK` | 再アーム(カウントと時計をクリア) |
| *どこでも* | `BACK` | 1つ上のレベルへ |

---

## 🔬 正直な制限事項

- **13.56 MHz(HF)のみ。** Specter は **NFC 帯域**を感知します — これは非接触決済スキマー、ほとんどの最新のアクセスリーダー、交通機関やホテルのリーダーが使用する帯域です。**125 kHz(LF)** のリーダー(旧型の HID Prox / EM4100 ドアパネル)は**見えません**。Flipper の LF 経路には同等のフィールド検出ビットがありません。
- **リーダーが読み取るものではなく、リーダーの*キャリア*を感知します。** Specter は *アクティブなリーダーがここにあり、おおよそどのくらい近くにあり、どのようなリズムでポーリングしているか* を伝えます — リーダーが行うことをデコード、識別、またはキャプチャすることはありません。
- **強度は相対的であり、キャリブレーションされていません。** `FIELD %` と近接度を示す言葉は、スイープのための比較的な「近い / 遠い」ガイドであり、cm 単位の測定距離ではありません。これは、典型的なポーリング帯域に対するキャリアのデューティサイクルの*スケーリングされた*読み取り値です([メーターの読み方](#-reading-the-meter--fixed-in-23) を参照)。異常にまばらにポーリングするリーダーは、同じ距離でも低く読み取られ、連続波モードのものはより遠くからピークに達します。
- **メーターには上限があります。** `MAX` は、キャリアがこのリーダーが維持できる最大限まで上がっていることを意味します — その先では、近づいても実際にはより大きな数値を生成できません。代わりに `PK` ピークホールドを使用して位置を比較してください。
- **リズムの分解能は約 2 ms です。** これはサンプリング周期です。それに近いタイミングは **`~`** 付きで表示され、信頼度はそれに応じて割り引かれます — Specter は、裏付けできない正確に見える数値を引用するよりも、自身の分解能の限界を明示することを選びます。
- **`CLEAN` は、選択した感度でのクリーンを意味します。** 実際のタップでのみ起動する休眠中のスキマーや、シールドされたものは、*どの*しきい値でも見えません。読み取りがないことは、存在しないことの保証ではありません。
- **一度に1つの無線のみ。** Specter はスイープ中に NFC チップを占有するため、他の NFC アプリを先に閉じてください(他の何かが無線を保持している場合、*NFC unavailable* と表示されます)。

---

## ⚖️ 法的・倫理的な注意

Specter は**防御的で、受信専用**のツールです — **送信は一切行わず**、フィールドに電力を供給せず、リーダーに触れることもありません。**自分自身の** POS エリア、ドア、机、持ち物、または**明示的に許可された**ハードウェアの評価に使用してください。使用方法の責任はあなたにあります。お住まいの地域の法律を確認してください。

---

## 🗺️ ロードマップ

- [x] 再起動後も感度 / サウンド / バイブ / LED を保持
- [x] SD カードへのタイムスタンプ付き検出の「ログブック」
- [x] 画面オフでのバックグラウンドスイープ — *ステルスモード*
- [x] より細かい範囲制御のための調整可能なしきい値 — *自動キャリブレーション + カスタム感度*
- [x] ポーリングリズムによるエミッターのフィンガープリント
- [x] 部屋の判定付きタイマー式サイトサーベイ
- [x] レポート用にログブックを CSV としてエクスポート — *.txt と並行してライブ書き込み*
- [x] 検出時に起動するアラーム付きの長時間無人監視モード
- [x] 実際のポーリングリーダーに対してメーターが全範囲を使用するようにする
- [x] 探索中の「近い / 遠い」トレンド矢印
- [ ] LF(125 kHz)コイルベースのリーダー感知を別モードとして調査
- [ ] デバイス上のログブックのタイプ別フィルタリング

---

## 🗂️ プロジェクト構成```
Specter-FlipperZero/
├── application.fam               # Flipper app manifest (category: NFC)
├── specter.c / specter_i.h       # app entry, wiring, alert feedback, stealth
├── helpers/
│   ├── field_detector.{c,h}      # worker thread: samples the field-present bit,
│   │                             #   duty-cycle + edge timing + calibration
│   ├── emitter_classify.{c,h}    # pure: cadence -> CONTINUOUS/POLLING/INTERMITTENT
│   ├── survey_verdict.{c,h}      # pure: survey stats -> CLEAN/TRACE/ACTIVE
│   ├── field_scale.{c,h}         # pure: raw carrier duty -> full-scale meter
│   ├── present_hold.h            # pure: debounce presence across poll gaps
│   ├── specter_settings.{c,h}    # persisted settings (saved_struct)
│   └── specter_log.{c,h}         # SD logbook, RTC-stamped .txt + live .csv
├── views/
│   ├── sweep_view.{c,h}          # the EMF gauge / waveform / alarm screen
│   ├── fingerprint_view.{c,h}    # classification card + pulse-train trace
│   ├── survey_view.{c,h}         # progress + verdict card
│   └── watch_view.{c,h}          # unattended guard: clock + count + alarm
├── scenes/                       # scene-manager navigation
├── test/                         # host tests for the pure decision layers
├── icons/                        # 1-bit Flipper icons (generated)
├── images/                       # banner + screen mockups (generated)
└── tools_gen_*.py                # regenerate icons / mockups / banner

🎨 ブランディング

すべてのアートワークは生成されるため、アプリから乖離することはありません:

root@kitploit:~
> ソーシャルプレビューは、GitHubがリポジトリから取得できない唯一のアセットです。**Settings → Social preview** で手動で一度アップロードする必要があります。これは、リポジトリがSlack、X、LinkedIn、Discordで共有されたときに表示されるものです。

---

## 🙏 クレジット

- **[at0m-b0mb](https://github.com/at0m-b0mb)** によって構築されました。
- Flipperセキュリティツールファミリーの一部: **[Argus](https://github.com/at0m-b0mb/Argus-FlipperZero)** (Wi-Fi deauth / evil-twin ウォッチドッグ)、**[GhostTag](https://github.com/at0m-b0mb/GhostTag-FlipperZero)** (BLE アンチストーキングハンター)、**[Cerberus](https://github.com/at0m-b0mb/flipper-cerberus)** (Sub-GHz RF ウォッチドッグ)。
- [Flipper Zero ファームウェア](https://github.com/flipperdevices/flipperzero-firmware) NFC HAL (`furi_hal_nfc` フィールド検出) + [ufbt](https://github.com/flipperdevices/flipperzero-ufbt) を搭載。

## 📄 ライセンス

[MIT](https://github.com/at0m-b0mb/specter-flipperzero/blob/main/LICENSE) © 2026 at0m-b0mb
ツールをダウンロード
モード答える問い使用する場面
🔍 Sweepどこにあるか?デバイスの存在を疑い、動き回って位置を特定したいとき
🔬 Fingerprintどんな種類のものか?発信源を見つけ、その挙動を知りたいとき
🗺️ Site Surveyこの部屋はクリーンか?空間全体について、ハンズフリーで1つの判定が欲しいとき
🛰️ Watch Mode離れている間に現れたか?Flipperを置いて見張りをさせたいとき
📖 Logbook何を、いつ見つけたか?記録をまとめるとき、または今日と先週を比較するとき — 発見タイプでフィルタ可能
生のキャリアデューティメーター近接度
3%(部屋のノイズ)10%FAINT
12%40%NEAR
20%67%CLOSE
28%93%STRONG
≥30% (リーダーに置いた状態)100%MAX
  • qFlipper を開き、ファイルを SD Card / apps / NFC / にドラッグします。

  • Flipper 上で: Apps → NFC → Specter。

  • アセットサイズ配置先
    images/banner.png2560×800README ヘッダー(Retina で鮮明に保つため 2 倍)
    images/social-preview.png1280×640設定 → ソーシャルプレビュー — GitHub 推奨サイズ(最小 640×320、1 MB 上限)
    images/mark.png512×512正方形のロゴマーク: アバター、ファビコン、スライド
    images/demo.gif768×384上記のアニメーション、約 9 秒、実際のビュー定数から構築
    python3 tools_gen_banner.py # banner, social preview, logo mark
    python3 tools_gen_gif.py # the demo animation
    python3 tools_gen_mockups.py # screen stills
    python3 tools_gen_icons.py # 1-bit Flipper icons