Make ChatGPT denser, calmer and easier to scan — both visually and linguistically.
English · 简体中文
ChatGPT wastes two kinds of space. The page is airy — oversized heading gaps, loose lists, a reading column narrower than the window. And the answers are padded — preamble, closing summaries, one-sentence paragraphs, Markdown used as decoration.
DenseGPT fixes both, from opposite ends.
| Layer | File | Fixes |
|---|---|---|
| Visual density | densegpt.user.css |
One UserCSS file. Tightens the reading layout and gives real control over content width. |
| Response density | STYLE.md + presets/ |
Paste-ready instructions that make the model itself answer densely. |
Use either on its own. Together they compound.
- Install
- Content width
- Response density
- What it changes, exactly
- Documentation
- Troubleshooting
- Contributing
- Install Stylus — Chrome, Edge or Firefox.
- Open densegpt.user.css. Stylus offers to install it.
- Reload
chatgpt.com.
Important
To update, use Stylus → Manage → Check for updates.
Do not re-import. Write new style → Import creates a second copy of the
style; two copies both injecting !important rules make settings look like they
do nothing, and a fresh copy resets every saved value.
Nothing beyond Stylus: no injected JavaScript, no network requests, no telemetry. One CSS file you can read in five minutes.
Replaces the Widescreen extension. Stylus → DenseGPT → Configure.
| Width preset | Width | For |
|---|---|---|
| Reading | 44rem / 704px |
long prose, narrowest column |
| Balanced (default) | 54rem / 864px |
everyday reading |
| Wide | 66rem / 1056px |
code blocks and tables |
| Ultra | 78rem / 1248px |
large screens, reference material |
| Custom | slider, 36–90rem | anything in between |
The slider is read only when the preset is Custom; the four presets ignore it.
Every value is wrapped in min(…, calc(100cqi - 3rem)), so a narrow column shrinks
instead of pinning text to the edges. It feeds ChatGPT's own
--thread-content-max-width, so assistant messages, your messages and the composer
stay on one centre axis.
100cqi is the width of the thread container, not the window. Up to 2.5.0 this
was 100vw, which includes the sidebar — at Ultra on a mid-sized window that let
the column ask for more room than main actually had. See
2.5.1 if the sidebar ever looks squeezed.
docs/width-preview.html is a standalone page — open it
directly, no server — for picking a Custom value without touching ChatGPT.
The CSS makes the page denser. This makes the answers denser.
STYLE.md is the spec; presets/ are compiled for each tool:
| Preset | Where it goes |
|---|---|
presets/chatgpt-custom-instructions.md |
ChatGPT → Settings → Personalization → Custom instructions |
presets/codex.md |
AGENTS.md |
presets/claude-code.md |
CLAUDE.md |
Settings → Personalization → Custom instructions → "What traits should ChatGPT have?". 1395 characters, fits the 1500-character field.
Answer first: conclusion, then only the reasoning that changes what I do next. Never restate my question or the context I pasted.
Density over packaging. Cut filler, not content. No opening pleasantries, no closing summary, no "let me know if" — end on the last useful line.
Markdown is structure, not decoration. Headings only when the answer has 2+ real parts. Lists only for parallel enumerable items. Tables only for 2+ dimensions over 3+ rows. Bold only for the term being defined or the value being decided. Code formatting for identifiers, paths, flags, commands. Never write consecutive one-sentence paragraphs — join them. Keep visual whitespace under ~40% of the answer.
Length follows the question: a one-line question gets a one-line answer. Don't widen scope for completeness, don't append related-but-unasked knowledge, don't produce a report unless I ask for one.
Don't explain things I didn't ask about. Take a position: recommend one option and say why in a clause. State uncertainty in a few words ("probably X, unverified") instead of hedging across a paragraph.
Voice: direct, plain, technical. No metaphors, no marketing verbs, no self-assessment, no enthusiasm padding. Active voice, shorter word.
No images or diagrams unless I ask.
On request these override the default: "explain in detail" = full depth; "write a report" = long form; "just the answer" = one line.
This block is style only. It tells the model how to write and claims nothing about who you are, so it is safe to paste as-is whoever you are.
If you also want it to stop explaining things you already know, that is a separate setting and it is yours to write. Put one honest line in "What do you do?" - your field, and what you don't need re-explained. That does more than any assumption a shared preset could make on your behalf.
A 582-character short version, and notes on Projects and per-project instructions,
are in presets/chatgpt-custom-instructions.md.
Two rules do most of the work: no closing summary and no consecutive one-sentence paragraphs. The style layer is designed to pair with the CSS — tight paragraph rhythm only reads well when the model stops padding, and dense prose only scans well when the page gives it a hierarchy.
Nine rules on assistant markdown, plus two for width. That is the whole stylesheet.
| Element | Value |
|---|---|
p |
margin: 0.45em 0 · line-height: 1.65 |
h2 |
margin: 1.15em 0 0.45em · font-size: 1.15em |
h3 |
margin: 0.9em 0 0.35em · font-size: 1.05em |
ul, ol |
margin: 0.35em 0 0.45em |
li |
margin: 0.12em 0 |
| inline code | 5% currentColor fill · 4px radius · no border, no shadow |
blockquote |
one 3px left rule · faint slate fill · 6px radius · normal text colour |
em, i |
font-weight: 500 — bold-italic still bold |
hr |
1px hairline at 18% |
Not touched: body and heading colours, links, tables, bold, fenced code blocks (background, syntax highlighting and font size stay ChatGPT's), the sidebar, the top bar and every message control.
No theme detection. No html.dark, no prefers-color-scheme, and no rule for
html, body or :root. Light and dark are inherited from ChatGPT exactly as
shipped. Four colour values exist in the entire file.
Increase information density without reducing semantic clarity.
Heading, paragraph, list, inline code, code block and quote must stay distinguishable at a glance. Anything that fails that is a regression, however much it tightens the page.
| Document | What is in it |
|---|---|
docs/design-principles.md |
Every value, why it is that value, and what may never be compressed |
docs/content-width.md |
The width setting end to end: how preset and slider combine, install traps, a console self-test |
docs/selectors.md |
Every DOM hook, its stability, and how to repair it when ChatGPT changes |
CHANGELOG.md |
Version history, including what failed and why |
| Symptom | Cause |
|---|---|
| Settings do nothing | More than one copy installed. Stylus → Manage → delete the extras. |
| No Configure gear | The metadata block failed to parse. Reinstall from the raw URL. |
| Nothing is styled at all | ChatGPT renamed its scope attribute. See docs/selectors.md — a one-line repair. |
| Width does nothing | ChatGPT added a new declaration site for its width variable. The ancestor-chain probe in docs/selectors.md finds it. |
| Sidebar squeezed at a wide preset | Fixed in 2.5.1 — the clamp used to measure the window, sidebar included. Update in Stylus. If it survives the update, run the layout-pressure probe in docs/selectors.md while it is on screen. |
docs/content-width.md carries a console self-test that
reports all of the above from computed styles rather than guesswork.
Chrome, Edge and Firefox with Stylus. Requires color-mix() and :has() —
Chrome 111+, Firefox 113+, Safari 16.4+. Scoped to chatgpt.com only.
ChatGPT's DOM moves. If a selector breaks, the most useful bug report is the output
of the probe in docs/selectors.md — computed styles and
bounding rects beat a description of what it looks like.
Spacing values are deliberate and were verified by eye on real output. Changing them needs a reason beyond preference.
- openstyles/stylus — UserCSS metadata and variable spec
- catppuccin/userstyles — semantic selector discipline, light/dark structure
- tobimori/awesome-userstyles — ecosystem survey
MIT © yunmin311