## earmark feed

    earmark feed [--remove [EPISODE ...]] [--yes] [--rebuild] [--check]
                 [--prune] [--keep N] [--max-size SIZE] [--orphans]

With no flags, lists what is published: one numbered line per episode, the total size, and the feed URL to paste into a podcast app.

    1  2026-08-23   0:22:14    10.4 MB  Attention Is All You Need
    2  2026-08-19   0:11:02     5.2 MB  A Mathematical Theory of Communication

    2 episode(s), 16 MB total
    remove one with:  earmark feed --remove
    feed      https://filedn.com/XXXX/earmark/feed.xml

The number is a line of that list, and it is what `--remove` accepts.


## Options

| Flag | Default | Means |
|----|----|----|
| `--remove [EPISODE ...]` | off | delete episodes by title or list number, audio and text with them; bare `--remove` asks |
| `--yes`, `-y` | off | do not ask before removing |
| `--rebuild` | off | rewrite `feed.xml` and the cover from the current settings |
| `--check` | off | prove the published URLs actually serve |
| `--prune` | off | remove episodes; needs `--keep` or `--max-size` |
| `--keep N` | none | keep this many newest |
| `--max-size SIZE` | none | keep newest episodes under this total, e.g. `800MB` |
| `--orphans` | off | with `--prune`, also delete library files the feed no longer lists |
| `--library PATH` |  | the library to act on |


## `--remove`

Deletes named episodes outright: the feed entry, `audio/<slug>.mp3` and `text/<slug>.md`. This is the flag for "not that one"; `--prune` is for "keep the newest twenty", and prune keeps the Markdown.

With no argument it prints the numbered list and asks which to remove:

    $ earmark feed --remove
    1  2026-08-23   0:22:14    10.4 MB  Attention Is All You Need
    2  2026-08-19   0:11:02     5.2 MB  A Mathematical Theory of Communication

    remove which? (numbers, ranges or titles; blank to cancel) 2

    removing:
      A Mathematical Theory of Communication
        audio/a-mathematical-theory-of-communication.mp3
        text/a-mathematical-theory-of-communication.md
    delete 1 episode(s) and those files? [y/N] y
    removed 1 episode(s)
    feed      https://filedn.com/XXXX/earmark/feed.xml

Every file that goes is named before the question, because the Markdown is the half you may have hand-edited.

An answer may mix numbers, ranges and titles: `1, 3-5, attention`.

Given arguments it removes without printing the list, but still shows the titles it matched and asks to confirm:

``` bash
earmark feed --remove "Attention Is All You Need"
earmark feed --remove 2 5
earmark feed --remove attention shannon --yes
```

An argument matches an episode by list number, then by exact title, then by any title containing it, case-insensitively - so `--remove attention` is enough when only one episode has that word in its title. Text that matches nothing is an error and nothing is removed. `--yes` skips the confirmation, which is what a script wants; with no TTY to ask, bare `--remove` is an error rather than a guess.

Nothing is recoverable from the library afterwards; re-publishing means running `earmark publish` on the original source again.


## `--rebuild`

Rewrites `feed.xml` and re-normalizes the cover from the current `[feed]` settings. Touches no audio. Run it after changing a title, author, description, or cover image.


## `--check`

HEADs the feed, the cover and the newest episodes and reports which of them actually serve. This is the fastest diagnosis for "the app shows nothing", which is almost always a wrong `base_url`, a failure that otherwise produces no error anywhere.


## `--prune`

Needs one of `--keep` or `--max-size`; it will not guess.

`--max-size` accepts a human size string such as `800MB` or `2GB`, and keeps the newest episodes that fit under it.

> **Warning: `--orphans` deletes files**
>
> `--prune` alone removes episodes from the feed. Adding `--orphans` also deletes library files the feed no longer lists: the leftover MP3s from episodes already dropped. It only runs alongside `--prune`, and `cover.jpg` is never treated as an orphan.


## Examples

``` bash
earmark feed
earmark feed --remove
earmark feed --remove "Attention Is All You Need"
earmark feed --check
earmark feed --rebuild
earmark feed --prune --keep 20
earmark feed --prune --max-size 800MB
earmark feed --prune --keep 20 --orphans
```
