@steipete/summarize 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +21 -0
  3. package/README.md +185 -0
  4. package/dist/cli.cjs +74333 -0
  5. package/dist/cli.cjs.map +7 -0
  6. package/dist/esm/cli-main.js +80 -0
  7. package/dist/esm/cli-main.js.map +1 -0
  8. package/dist/esm/cli.js +18 -0
  9. package/dist/esm/cli.js.map +1 -0
  10. package/dist/esm/config.js +33 -0
  11. package/dist/esm/config.js.map +1 -0
  12. package/dist/esm/content/asset.js +167 -0
  13. package/dist/esm/content/asset.js.map +1 -0
  14. package/dist/esm/content/index.js +4 -0
  15. package/dist/esm/content/index.js.map +1 -0
  16. package/dist/esm/content/link-preview/client.js +20 -0
  17. package/dist/esm/content/link-preview/client.js.map +1 -0
  18. package/dist/esm/content/link-preview/content/article.js +150 -0
  19. package/dist/esm/content/link-preview/content/article.js.map +1 -0
  20. package/dist/esm/content/link-preview/content/cleaner.js +55 -0
  21. package/dist/esm/content/link-preview/content/cleaner.js.map +1 -0
  22. package/dist/esm/content/link-preview/content/fetcher.js +120 -0
  23. package/dist/esm/content/link-preview/content/fetcher.js.map +1 -0
  24. package/dist/esm/content/link-preview/content/index.js +275 -0
  25. package/dist/esm/content/link-preview/content/index.js.map +1 -0
  26. package/dist/esm/content/link-preview/content/parsers.js +77 -0
  27. package/dist/esm/content/link-preview/content/parsers.js.map +1 -0
  28. package/dist/esm/content/link-preview/content/types.js +4 -0
  29. package/dist/esm/content/link-preview/content/types.js.map +1 -0
  30. package/dist/esm/content/link-preview/content/utils.js +127 -0
  31. package/dist/esm/content/link-preview/content/utils.js.map +1 -0
  32. package/dist/esm/content/link-preview/content/youtube.js +82 -0
  33. package/dist/esm/content/link-preview/content/youtube.js.map +1 -0
  34. package/dist/esm/content/link-preview/deps.js +2 -0
  35. package/dist/esm/content/link-preview/deps.js.map +1 -0
  36. package/dist/esm/content/link-preview/fetch-with-timeout.js +35 -0
  37. package/dist/esm/content/link-preview/fetch-with-timeout.js.map +1 -0
  38. package/dist/esm/content/link-preview/transcript/cache.js +73 -0
  39. package/dist/esm/content/link-preview/transcript/cache.js.map +1 -0
  40. package/dist/esm/content/link-preview/transcript/index.js +95 -0
  41. package/dist/esm/content/link-preview/transcript/index.js.map +1 -0
  42. package/dist/esm/content/link-preview/transcript/normalize.js +43 -0
  43. package/dist/esm/content/link-preview/transcript/normalize.js.map +1 -0
  44. package/dist/esm/content/link-preview/transcript/providers/generic.js +11 -0
  45. package/dist/esm/content/link-preview/transcript/providers/generic.js.map +1 -0
  46. package/dist/esm/content/link-preview/transcript/providers/podcast.js +12 -0
  47. package/dist/esm/content/link-preview/transcript/providers/podcast.js.map +1 -0
  48. package/dist/esm/content/link-preview/transcript/providers/twitter.js +12 -0
  49. package/dist/esm/content/link-preview/transcript/providers/twitter.js.map +1 -0
  50. package/dist/esm/content/link-preview/transcript/providers/youtube/api.js +257 -0
  51. package/dist/esm/content/link-preview/transcript/providers/youtube/api.js.map +1 -0
  52. package/dist/esm/content/link-preview/transcript/providers/youtube/apify.js +55 -0
  53. package/dist/esm/content/link-preview/transcript/providers/youtube/apify.js.map +1 -0
  54. package/dist/esm/content/link-preview/transcript/providers/youtube/captions.js +409 -0
  55. package/dist/esm/content/link-preview/transcript/providers/youtube/captions.js.map +1 -0
  56. package/dist/esm/content/link-preview/transcript/providers/youtube/ytdlp.js +114 -0
  57. package/dist/esm/content/link-preview/transcript/providers/youtube/ytdlp.js.map +1 -0
  58. package/dist/esm/content/link-preview/transcript/providers/youtube.js +74 -0
  59. package/dist/esm/content/link-preview/transcript/providers/youtube.js.map +1 -0
  60. package/dist/esm/content/link-preview/transcript/types.js +2 -0
  61. package/dist/esm/content/link-preview/transcript/types.js.map +1 -0
  62. package/dist/esm/content/link-preview/transcript/utils.js +193 -0
  63. package/dist/esm/content/link-preview/transcript/utils.js.map +1 -0
  64. package/dist/esm/content/link-preview/types.js +2 -0
  65. package/dist/esm/content/link-preview/types.js.map +1 -0
  66. package/dist/esm/costs.js +57 -0
  67. package/dist/esm/costs.js.map +1 -0
  68. package/dist/esm/firecrawl.js +54 -0
  69. package/dist/esm/firecrawl.js.map +1 -0
  70. package/dist/esm/flags.js +97 -0
  71. package/dist/esm/flags.js.map +1 -0
  72. package/dist/esm/index.js +4 -0
  73. package/dist/esm/index.js.map +1 -0
  74. package/dist/esm/llm/generate-text.js +296 -0
  75. package/dist/esm/llm/generate-text.js.map +1 -0
  76. package/dist/esm/llm/google-models.js +112 -0
  77. package/dist/esm/llm/google-models.js.map +1 -0
  78. package/dist/esm/llm/html-to-markdown.js +44 -0
  79. package/dist/esm/llm/html-to-markdown.js.map +1 -0
  80. package/dist/esm/llm/model-id.js +45 -0
  81. package/dist/esm/llm/model-id.js.map +1 -0
  82. package/dist/esm/pricing/litellm.js +25 -0
  83. package/dist/esm/pricing/litellm.js.map +1 -0
  84. package/dist/esm/prompts/file.js +14 -0
  85. package/dist/esm/prompts/file.js.map +1 -0
  86. package/dist/esm/prompts/index.js +3 -0
  87. package/dist/esm/prompts/index.js.map +1 -0
  88. package/dist/esm/prompts/link-summary.js +105 -0
  89. package/dist/esm/prompts/link-summary.js.map +1 -0
  90. package/dist/esm/run.js +1674 -0
  91. package/dist/esm/run.js.map +1 -0
  92. package/dist/esm/shared/contracts.js +2 -0
  93. package/dist/esm/shared/contracts.js.map +1 -0
  94. package/dist/esm/summarizeHome.js +20 -0
  95. package/dist/esm/summarizeHome.js.map +1 -0
  96. package/dist/esm/tty/live-markdown.js +52 -0
  97. package/dist/esm/tty/live-markdown.js.map +1 -0
  98. package/dist/esm/tty/osc-progress.js +8 -0
  99. package/dist/esm/tty/osc-progress.js.map +1 -0
  100. package/dist/esm/tty/spinner.js +33 -0
  101. package/dist/esm/tty/spinner.js.map +1 -0
  102. package/dist/esm/version.js +44 -0
  103. package/dist/esm/version.js.map +1 -0
  104. package/dist/types/cli-main.d.ts +11 -0
  105. package/dist/types/cli.d.ts +1 -0
  106. package/dist/types/config.d.ts +15 -0
  107. package/dist/types/content/asset.d.ts +44 -0
  108. package/dist/types/content/index.d.ts +4 -0
  109. package/dist/types/content/link-preview/client.d.ts +14 -0
  110. package/dist/types/content/link-preview/content/article.d.ts +4 -0
  111. package/dist/types/content/link-preview/content/cleaner.d.ts +12 -0
  112. package/dist/types/content/link-preview/content/fetcher.d.ts +16 -0
  113. package/dist/types/content/link-preview/content/index.d.ts +4 -0
  114. package/dist/types/content/link-preview/content/parsers.d.ts +7 -0
  115. package/dist/types/content/link-preview/content/types.d.ts +44 -0
  116. package/dist/types/content/link-preview/content/utils.d.ts +16 -0
  117. package/dist/types/content/link-preview/content/youtube.d.ts +1 -0
  118. package/dist/types/content/link-preview/deps.d.ts +70 -0
  119. package/dist/types/content/link-preview/fetch-with-timeout.d.ts +4 -0
  120. package/dist/types/content/link-preview/transcript/cache.d.ts +29 -0
  121. package/dist/types/content/link-preview/transcript/index.d.ts +9 -0
  122. package/dist/types/content/link-preview/transcript/normalize.d.ts +3 -0
  123. package/dist/types/content/link-preview/transcript/providers/generic.d.ts +3 -0
  124. package/dist/types/content/link-preview/transcript/providers/podcast.d.ts +3 -0
  125. package/dist/types/content/link-preview/transcript/providers/twitter.d.ts +3 -0
  126. package/dist/types/content/link-preview/transcript/providers/youtube/api.d.ts +26 -0
  127. package/dist/types/content/link-preview/transcript/providers/youtube/apify.d.ts +1 -0
  128. package/dist/types/content/link-preview/transcript/providers/youtube/captions.d.ts +7 -0
  129. package/dist/types/content/link-preview/transcript/providers/youtube/ytdlp.d.ts +3 -0
  130. package/dist/types/content/link-preview/transcript/providers/youtube.d.ts +3 -0
  131. package/dist/types/content/link-preview/transcript/types.d.ts +23 -0
  132. package/dist/types/content/link-preview/transcript/utils.d.ts +7 -0
  133. package/dist/types/content/link-preview/types.d.ts +36 -0
  134. package/dist/types/costs.d.ts +31 -0
  135. package/dist/types/firecrawl.d.ts +5 -0
  136. package/dist/types/flags.d.ts +23 -0
  137. package/dist/types/index.d.ts +4 -0
  138. package/dist/types/llm/generate-text.d.ts +43 -0
  139. package/dist/types/llm/google-models.d.ts +10 -0
  140. package/dist/types/llm/html-to-markdown.d.ts +15 -0
  141. package/dist/types/llm/model-id.d.ts +14 -0
  142. package/dist/types/pricing/litellm.d.ts +13 -0
  143. package/dist/types/prompts/file.d.ts +6 -0
  144. package/dist/types/prompts/index.d.ts +3 -0
  145. package/dist/types/prompts/link-summary.d.ts +27 -0
  146. package/dist/types/run.d.ts +8 -0
  147. package/dist/types/shared/contracts.d.ts +2 -0
  148. package/dist/types/summarizeHome.d.ts +6 -0
  149. package/dist/types/tty/live-markdown.d.ts +10 -0
  150. package/dist/types/tty/osc-progress.d.ts +3 -0
  151. package/dist/types/tty/spinner.d.ts +10 -0
  152. package/dist/types/version.d.ts +2 -0
  153. package/docs/README.md +11 -0
  154. package/docs/config.md +28 -0
  155. package/docs/extract-only.md +13 -0
  156. package/docs/firecrawl.md +17 -0
  157. package/docs/llm.md +33 -0
  158. package/docs/openai.md +18 -0
  159. package/docs/site/.nojekyll +1 -0
  160. package/docs/site/404.html +37 -0
  161. package/docs/site/assets/site.css +577 -0
  162. package/docs/site/assets/site.js +69 -0
  163. package/docs/site/docs/config.html +73 -0
  164. package/docs/site/docs/extract-only.html +79 -0
  165. package/docs/site/docs/firecrawl.html +72 -0
  166. package/docs/site/docs/index.html +89 -0
  167. package/docs/site/docs/llm.html +70 -0
  168. package/docs/site/docs/openai.html +66 -0
  169. package/docs/site/docs/website.html +70 -0
  170. package/docs/site/docs/youtube.html +62 -0
  171. package/docs/site/index.html +125 -0
  172. package/docs/website.md +27 -0
  173. package/docs/youtube.md +32 -0
  174. package/package.json +76 -0
@@ -0,0 +1,79 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>Extract-only — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/extract-only" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">mode</p>
43
+ <h1>Extract-only</h1>
44
+ <p>Print the extracted content and stop. No summary call.</p>
45
+
46
+ <h2>Usage</h2>
47
+ <div class="terminal">
48
+ <div class="terminal__bar" aria-hidden="true">
49
+ <span class="terminal__dot terminal__dot--a"></span>
50
+ <span class="terminal__dot terminal__dot--b"></span>
51
+ <span class="terminal__dot terminal__dot--c"></span>
52
+ </div>
53
+ <pre><code id="ex-only">summarize --extract-only "https://example.com/article"</code></pre>
54
+ </div>
55
+ <div class="copyRow">
56
+ <span class="hint">Good for piping into your own tooling.</span>
57
+ <button class="btn" data-copy="#ex-only">Copy</button>
58
+ </div>
59
+
60
+ <h2>Helpful flags</h2>
61
+ <ul>
62
+ <li><code>--json</code> — emit a single JSON object.</li>
63
+ <li><code>--verbose</code> — show which extractor ran and why.</li>
64
+ <li><code>--timeout</code> — tune crawling budget (<code>2m</code> default).</li>
65
+ <li><code>--firecrawl off|auto|always</code> — choose the fallback strategy.</li>
66
+ <li><code>--markdown off|auto|llm</code> — for non-YouTube URLs, control HTML→Markdown conversion.</li>
67
+ </ul>
68
+ </article>
69
+ </section>
70
+
71
+ <footer class="footer">
72
+ <span>summarize — Link → clean text → summary.</span>
73
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
74
+ </footer>
75
+ </main>
76
+
77
+ <script type="module" src="../assets/site.js"></script>
78
+ </body>
79
+ </html>
@@ -0,0 +1,72 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>Firecrawl — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/firecrawl" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">extractor</p>
43
+ <h1>Firecrawl</h1>
44
+ <p>Used as a fallback when HTML extraction looks blocked or too thin — and as a preferred Markdown source in extract-only mode (when configured).</p>
45
+
46
+ <h2>Key</h2>
47
+ <ul>
48
+ <li>Set <code>FIRECRAWL_API_KEY</code>.</li>
49
+ <li>Control behavior with <code>--firecrawl off|auto|always</code>.</li>
50
+ </ul>
51
+
52
+ <h2>Extract-only + Markdown</h2>
53
+ <ul>
54
+ <li><code>--extract-only</code> prints the extracted content.</li>
55
+ <li><code>--markdown auto|llm</code> can output Markdown for non-YouTube URLs.</li>
56
+ </ul>
57
+
58
+ <div class="note">
59
+ If you only want plain text: use <code>--firecrawl off --markdown off</code>.
60
+ </div>
61
+ </article>
62
+ </section>
63
+
64
+ <footer class="footer">
65
+ <span>summarize — Link → clean text → summary.</span>
66
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
67
+ </footer>
68
+ </main>
69
+
70
+ <script type="module" src="../assets/site.js"></script>
71
+ </body>
72
+ </html>
@@ -0,0 +1,89 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>Docs — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="hero">
29
+ <div class="hero__card reveal">
30
+ <div class="hero__inner">
31
+ <p class="kicker">Docs</p>
32
+ <h1 class="title">Modes & knobs.</h1>
33
+ <p class="lede">Small surface area. Powerful extraction. Sensible fallbacks.</p>
34
+ <div class="pillRow">
35
+ <span class="pill"><span class="pill__dot" aria-hidden="true"></span> Website</span>
36
+ <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent2)"></span> YouTube</span>
37
+ <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> Extract-only</span>
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </section>
42
+
43
+ <section class="grid">
44
+ <a class="card reveal" href="./website.html">
45
+ <h2>Website mode</h2>
46
+ <p>HTML extraction + normalization + Firecrawl fallback.</p>
47
+ <div class="small">docs/website.md</div>
48
+ </a>
49
+ <a class="card reveal" href="./youtube.html">
50
+ <h2>YouTube mode</h2>
51
+ <p>Transcripts via multiple strategies (youtubei, caption tracks, fallback).</p>
52
+ <div class="small">docs/youtube.md</div>
53
+ </a>
54
+ <a class="card reveal" href="./extract-only.html">
55
+ <h2>Extract-only</h2>
56
+ <p>Get the cleaned content and stop; perfect for piping.</p>
57
+ <div class="small">docs/extract-only.md</div>
58
+ </a>
59
+ <a class="card reveal" href="./llm.html">
60
+ <h2>LLM</h2>
61
+ <p>Models, providers, and summarization behavior.</p>
62
+ <div class="small">docs/llm.md</div>
63
+ </a>
64
+ <a class="card reveal" href="./openai.html">
65
+ <h2>OpenAI</h2>
66
+ <p>OpenAI-specific notes + environment keys.</p>
67
+ <div class="small">docs/openai.md</div>
68
+ </a>
69
+ <a class="card reveal" href="./firecrawl.html">
70
+ <h2>Firecrawl</h2>
71
+ <p>Fallback extraction + Markdown output.</p>
72
+ <div class="small">docs/firecrawl.md</div>
73
+ </a>
74
+ <a class="card reveal" href="./config.html">
75
+ <h2>Config</h2>
76
+ <p>Env vars and practical defaults.</p>
77
+ <div class="small">docs/config.md</div>
78
+ </a>
79
+ </section>
80
+
81
+ <footer class="footer">
82
+ <span>summarize — Link → clean text → summary.</span>
83
+ <span><a href="../index.html">Home</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
84
+ </footer>
85
+ </main>
86
+
87
+ <script type="module" src="../assets/site.js"></script>
88
+ </body>
89
+ </html>
@@ -0,0 +1,70 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>LLM — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/llm" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">summarizer</p>
43
+ <h1>LLM</h1>
44
+ <p>summarize can use multiple providers. Pick one model, one provider, then make it boring and reliable.</p>
45
+
46
+ <h2>Keys</h2>
47
+ <ul>
48
+ <li><code>OPENAI_API_KEY</code></li>
49
+ <li><code>XAI_API_KEY</code></li>
50
+ <li><code>GEMINI_API_KEY</code> (also accepts <code>GOOGLE_GENERATIVE_AI_API_KEY</code> / <code>GOOGLE_API_KEY</code>)</li>
51
+ </ul>
52
+
53
+ <h2>Practical advice</h2>
54
+ <ul>
55
+ <li>Pin <code>--model</code> for stable output.</li>
56
+ <li>When using <code>--markdown llm</code>, provider fallback is disabled by design.</li>
57
+ <li>For audits / tooling, prefer <code>--json</code> + fixed model.</li>
58
+ </ul>
59
+ </article>
60
+ </section>
61
+
62
+ <footer class="footer">
63
+ <span>summarize — Link → clean text → summary.</span>
64
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
65
+ </footer>
66
+ </main>
67
+
68
+ <script type="module" src="../assets/site.js"></script>
69
+ </body>
70
+ </html>
@@ -0,0 +1,66 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>OpenAI — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/openai" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">provider</p>
43
+ <h1>OpenAI</h1>
44
+ <p>Use OpenAI by setting <code>OPENAI_API_KEY</code> and picking a model via <code>--model</code>.</p>
45
+
46
+ <h2>Notes</h2>
47
+ <ul>
48
+ <li>Some modes (like <code>--extract-only</code>) don’t need an LLM at all.</li>
49
+ <li>When output is used downstream, prefer <code>--json</code> and pin <code>--model</code>.</li>
50
+ </ul>
51
+
52
+ <div class="note">
53
+ If your extraction is flaky, flip on <code>--verbose</code> and inspect which path was taken (HTML vs Firecrawl vs LLM Markdown).
54
+ </div>
55
+ </article>
56
+ </section>
57
+
58
+ <footer class="footer">
59
+ <span>summarize — Link → clean text → summary.</span>
60
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
61
+ </footer>
62
+ </main>
63
+
64
+ <script type="module" src="../assets/site.js"></script>
65
+ </body>
66
+ </html>
@@ -0,0 +1,70 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>Website mode — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/website" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">mode</p>
43
+ <h1>Website mode</h1>
44
+ <p>Fetch HTML → extract “article-ish” content → normalize to clean text. If extraction looks blocked or too thin, retry via Firecrawl Markdown (optional).</p>
45
+
46
+ <h2>Flags</h2>
47
+ <ul>
48
+ <li><code>--firecrawl off|auto|always</code></li>
49
+ <li><code>--timeout 30s|2m|5000ms</code> (default <code>2m</code>)</li>
50
+ <li><code>--extract-only</code> (print extracted content; no summary call)</li>
51
+ <li><code>--json</code> (emit a single JSON object)</li>
52
+ <li><code>--verbose</code> (progress + which extractor was used)</li>
53
+ <li><code>--metrics off|on|detailed</code></li>
54
+ </ul>
55
+
56
+ <div class="note">
57
+ Plain-text mode: <code>--firecrawl off --markdown off</code>.
58
+ </div>
59
+ </article>
60
+ </section>
61
+
62
+ <footer class="footer">
63
+ <span>summarize — Link → clean text → summary.</span>
64
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
65
+ </footer>
66
+ </main>
67
+
68
+ <script type="module" src="../assets/site.js"></script>
69
+ </body>
70
+ </html>
@@ -0,0 +1,62 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>YouTube mode — summarize</title>
8
+ <link rel="canonical" href="https://summarize.sh/docs/youtube" />
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
+ <link rel="stylesheet" href="../assets/site.css" />
13
+ </head>
14
+ <body>
15
+ <main class="shell">
16
+ <header class="top">
17
+ <a class="brand" href="../index.html" aria-label="summarize home">
18
+ <span class="brand__mark" aria-hidden="true">s</span>
19
+ <span class="brand__word">summarize</span>
20
+ </a>
21
+ <nav class="nav" aria-label="Primary">
22
+ <a data-nav="home" href="../index.html">Home</a>
23
+ <a data-nav="docs" href="./index.html">Docs</a>
24
+ <a href="https://github.com/steipete/summarize">GitHub</a>
25
+ </nav>
26
+ </header>
27
+
28
+ <section class="docShell">
29
+ <aside class="side" aria-label="Docs navigation">
30
+ <h2>Docs</h2>
31
+ <a href="./index.html">Overview</a>
32
+ <a href="./website.html">Website mode</a>
33
+ <a href="./youtube.html">YouTube mode</a>
34
+ <a href="./extract-only.html">Extract-only</a>
35
+ <a href="./llm.html">LLM</a>
36
+ <a href="./openai.html">OpenAI</a>
37
+ <a href="./firecrawl.html">Firecrawl</a>
38
+ <a href="./config.html">Config</a>
39
+ </aside>
40
+
41
+ <article class="doc reveal">
42
+ <p class="kicker">mode</p>
43
+ <h1>YouTube mode</h1>
44
+ <p>Extracts transcripts via multiple strategies. The goal: reliable text, even when YouTube is being “difficult”.</p>
45
+
46
+ <h2>Tip</h2>
47
+ <ul>
48
+ <li>If you only want the transcript: use <code>--extract-only</code>.</li>
49
+ <li>For pipelines: add <code>--json</code>.</li>
50
+ </ul>
51
+ </article>
52
+ </section>
53
+
54
+ <footer class="footer">
55
+ <span>summarize — Link → clean text → summary.</span>
56
+ <span><a href="./index.html">Docs</a> · <a href="https://github.com/steipete/summarize">Repo</a></span>
57
+ </footer>
58
+ </main>
59
+
60
+ <script type="module" src="../assets/site.js"></script>
61
+ </body>
62
+ </html>
@@ -0,0 +1,125 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>summarize — Link → clean text → summary.</title>
8
+ <meta name="description" content="Link → clean text → summary. A CLI that turns URLs into clean text and fast summaries." />
9
+ <link rel="canonical" href="https://summarize.sh/" />
10
+ <meta property="og:title" content="summarize" />
11
+ <meta property="og:description" content="Link → clean text → summary." />
12
+ <meta property="og:type" content="website" />
13
+ <meta property="og:url" content="https://summarize.sh/" />
14
+ <meta name="theme-color" content="#0b1018" />
15
+
16
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
17
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
18
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
19
+ <link rel="stylesheet" href="./assets/site.css" />
20
+ </head>
21
+ <body>
22
+ <main class="shell">
23
+ <header class="top">
24
+ <a class="brand" href="./index.html" aria-label="summarize home">
25
+ <span class="brand__mark" aria-hidden="true">s</span>
26
+ <span class="brand__word">summarize</span>
27
+ </a>
28
+ <nav class="nav" aria-label="Primary">
29
+ <a data-nav="home" href="./index.html">Home</a>
30
+ <a data-nav="docs" href="./docs/index.html">Docs</a>
31
+ <a href="https://github.com/steipete/summarize">GitHub</a>
32
+ </nav>
33
+ </header>
34
+
35
+ <section class="hero">
36
+ <div class="hero__card reveal">
37
+ <div class="hero__grid">
38
+ <div class="hero__inner">
39
+ <p class="kicker">CLI</p>
40
+ <h1 class="title">Link → clean text → summary.</h1>
41
+ <p class="lede">
42
+ A pragmatic pipeline for the web: <strong>extract</strong> the good stuff, <strong>sanitize</strong> it,
43
+ then <strong>summarize</strong> with your model of choice.
44
+ </p>
45
+
46
+ <div class="pillRow">
47
+ <span class="pill"><span class="pill__dot" aria-hidden="true"></span> Website extraction</span>
48
+ <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent2)"></span> YouTube transcripts</span>
49
+ <span class="pill"><span class="pill__dot" aria-hidden="true" style="background: var(--accent3)"></span> JSON + metrics</span>
50
+ </div>
51
+
52
+ <div class="ctaRow">
53
+ <a class="btn btn--primary" href="./docs/index.html" aria-label="Read docs">
54
+ <svg class="btn__icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
55
+ <path d="M6 4h9l3 3v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Z" stroke="currentColor" stroke-width="1.5"/>
56
+ <path d="M15 4v4h4" stroke="currentColor" stroke-width="1.5"/>
57
+ </svg>
58
+ Docs
59
+ </a>
60
+ <a class="btn" href="https://github.com/steipete/summarize">
61
+ <svg class="btn__icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
62
+ <path d="M12 2a10 10 0 0 0-3.16 19.49c.5.09.68-.22.68-.48v-1.7c-2.77.6-3.35-1.18-3.35-1.18-.45-1.14-1.1-1.45-1.1-1.45-.9-.62.07-.6.07-.6 1 .07 1.52 1.02 1.52 1.02.9 1.52 2.36 1.08 2.94.82.09-.64.35-1.08.63-1.33-2.2-.25-4.52-1.1-4.52-4.88 0-1.08.39-1.96 1.02-2.65-.1-.25-.44-1.27.1-2.65 0 0 .84-.27 2.75 1.02a9.46 9.46 0 0 1 5 0c1.9-1.29 2.75-1.02 2.75-1.02.54 1.38.2 2.4.1 2.65.64.69 1.02 1.57 1.02 2.65 0 3.79-2.33 4.63-4.55 4.88.36.31.68.92.68 1.86v2.76c0 .26.18.58.69.48A10 10 0 0 0 12 2Z" fill="currentColor" opacity=".9"/>
63
+ </svg>
64
+ Repo
65
+ </a>
66
+ </div>
67
+ </div>
68
+
69
+ <aside class="codeCard">
70
+ <p class="kicker">Quickstart</p>
71
+
72
+ <div class="terminal">
73
+ <div class="terminal__bar" aria-hidden="true">
74
+ <span class="terminal__dot terminal__dot--a"></span>
75
+ <span class="terminal__dot terminal__dot--b"></span>
76
+ <span class="terminal__dot terminal__dot--c"></span>
77
+ </div>
78
+ <pre><code id="install">npm i -g @steipete/summarize</code>
79
+ <code id="run">summarize "https://example.com/article"</code></pre>
80
+ </div>
81
+
82
+ <div class="copyRow">
83
+ <span class="hint">Install, then summarize a URL.</span>
84
+ <div class="ctaRow" style="margin-top:0">
85
+ <button class="btn" data-copy="#install">Copy install</button>
86
+ <button class="btn" data-copy="#run">Copy run</button>
87
+ </div>
88
+ </div>
89
+ </aside>
90
+ </div>
91
+ </div>
92
+ </section>
93
+
94
+ <section class="grid" aria-label="Features">
95
+ <div class="card reveal">
96
+ <h2>Extraction that’s not naive</h2>
97
+ <p>HTML → normalized text, with fallbacks when a site fights back.</p>
98
+ <div class="small">Cheerio + sanitization + optional Firecrawl</div>
99
+ </div>
100
+ <div class="card reveal">
101
+ <h2>YouTube transcripts, without drama</h2>
102
+ <p>Pull captions via multiple paths so “missing transcript” becomes rare.</p>
103
+ <div class="small">Website vs YouTube modes</div>
104
+ </div>
105
+ <div class="card reveal">
106
+ <h2>Built for pipelines</h2>
107
+ <p><code>--extract-only</code>, <code>--json</code>, and <code>--metrics</code> make it scriptable.</p>
108
+ <div class="small">Compose it with your own tools</div>
109
+ </div>
110
+ <div class="card reveal">
111
+ <h2>Provider-agnostic LLMs</h2>
112
+ <p>OpenAI, xAI, Gemini — use what you’ve got, pin what you need.</p>
113
+ <div class="small">Control via <code>--model</code> + env vars</div>
114
+ </div>
115
+ </section>
116
+
117
+ <footer class="footer">
118
+ <span>Canonical: <a href="https://summarize.sh">summarize.sh</a></span>
119
+ <span><a href="./docs/index.html">Docs</a> · <a href="https://github.com/steipete/summarize">GitHub</a></span>
120
+ </footer>
121
+ </main>
122
+
123
+ <script type="module" src="./assets/site.js"></script>
124
+ </body>
125
+ </html>