How to convert Markdown files to LinkedIn carousel slides

A Markdown file is a text file. Headings, lists, fences, and links are characters in that file. A LinkedIn carousel is a PDF. LinkedIn paginates the PDF, and each page is a slide someone swipes. Converting the file means keeping one lesson that is safe to say in public, then designing a new PDF of 2 to 8 pages. Dropping README.md into the LinkedIn composer does not produce those pages. LinkedIn does not paginate Markdown.

Boykli reads the file on Create posts, in Document mode. The upload has to be one .md. The server stores the bytes as UTF-8 text and writes one LinkedIn post from a single lesson in that text. The carousel page does not take the file. You paste an outline of the lesson into the topic box, up to 2,000 characters, and it designs a new PDF: square or portrait, with a document title and a caption. You download that PDF or publish it on the personal profile you connect. The same two-pass path for a text PDF is PDF to LinkedIn carousel. Pitch decks and whitepapers fail for different reasons, which is convert a document to LinkedIn slides. A Notion page that you exported as Markdown is Notion to a LinkedIn PDF carousel. This page is the file that was already Markdown: a repo doc, an Obsidian note, a static-site source, a changelog, or an RFC.

What the file still is after you upload it

Document mode does not render Markdown. There is no step that turns a heading into a slide, a fence into a code card, or a pipe table into a graphic. The parser checks the filename, reads the bytes, and hands the string to the writer.

The checks are strict:

  • The name, lowercased, has to end in .md. Guide.md and notes.MD pass. post.mdx, essay.markdown, notes.txt, and a .zip of several notes fail with "Unsupported file type. Use PDF, DOCX, or MD."
  • The file must be 7 MB or smaller.
  • The string must be 80,000 characters or fewer. Headings, fences, front matter, and blank lines all count. Over that, the API returns "max 80k characters in document allowed."
  • After whitespace is removed, at least 80 characters have to remain. A stub file, or a file that is only a title, is refused as unreadable.

What the writer receives is that string, syntax included. A line that starts with a hash stays a line that starts with a hash. A fenced block stays a fenced block. YAML at the top of the file, between the dashed lines, stays in the string. An image is the alt text and the path, written out as Markdown. The image file next to the note is not uploaded, and the server does not fetch it. A wikilink stays the two brackets and the note name. Obsidian does not expand it. A transclusion stays the embed syntax. The other note's body is absent unless you pasted it into this file.

Angle brackets stay too. A generic in a code sample, an HTML comment, and a raw HTML block are characters in the extract. That is different from Article mode. Article mode fetches a public URL, keeps HTML and plain text, and strips anything that looks like a tag before it writes. A raw Markdown URL can lose a comparison or a generic because the stripper treats the brackets as markup. For a file you already have, upload the .md. A public blog that is already HTML is a different workflow, covered in article to LinkedIn carousel.

The writer is told to amplify one idea. An optional brief picks the section. "Only the retry change. Keep 22 minutes and 4 minutes. Ignore the customer list and the code sample." is a brief. An empty brief asks for the single strongest lesson in the whole string. On a README, that lesson is often the first paragraph under the title, which is an install blurb. On a changelog, it is often whichever release has the most words. The post is 700 to 1,400 characters. It does not say "the document." It does not add hashtags, emoji, or a number that was not in the file. Tones are Teach and Explain, Analytical, Step-by-Step, and Thought Leader. You can refine that draft twice. A third pass is a new write.

That post is a filter. The slides still need an outline you paste. The map of topic, idea, and file starts is LinkedIn carousel generator.

Five ways people turn a Markdown file into slides

MethodWhat you hand overWhat LinkedIn receivesWhere it breaks
Paste the .md into the composer, or attach the fileThe raw note, or a file LinkedIn does not treat as a documentA wall of hashes, fences, and links, or a failed attachmentNobody swipes a README. The syntax is the post
Run Pandoc, or the static-site print stylesheet, and upload that PDFA paper-size PDF of the whole note: front matter, every heading, the licenseThose pages, paginatedBody type is small on a phone. There is no cover written for a stranger. A 20-page doc becomes a 20-page swipe
Build the deck in Marp, Slidev, or another Markdown slide tool, then export PDFA slide file you already authored, often 16:9Those exported pages, if you upload the PDF to LinkedInYou already did the design. Boykli will not import that PDF as editable slides. A chart that was drawn as an image has no text layer for a later rewrite
Ask a chat to "make 8 slides from this README"The whole file, including install steps and the code sampleWhatever you then paste into a design toolThe chat fills gaps so the cards look finished. You still design and upload
Boykli Document mode, then the carousel pageOne .md, then an outline of one lessonA new PDF, 2–8 slides, plus a captionThe headings are not the slides. .mdx, .markdown, and a zip are refused. The outline you paste is the only brief the slides see

The last row is the workflow below. The second row is what happens when "it is already written in Markdown" is treated as "LinkedIn already has slides."

Turn the Markdown file into a deck

Upload the .md. Document mode pulls one lesson. The carousel page designs the PDF. BYOK is $29/month. Managed is $88/month.

boykli.com →

What to delete before the upload

The 80,000-character ceiling and the "one idea" rule punish a file that was fine in a repo.

Front matter. A block of title, date, draft, tags, and aliases is part of the string. If a secret, an internal URL, or a customer slug is in that block, delete it in the file you upload. The writer can see it. "Ignore the front matter" in the brief is weaker than the line not being there.

Fenced code. A 400-line sample can be most of the characters. An empty brief then treats the sample as the lesson, or the post quotes an identifier you would not put on a slide. Keep a short excerpt if the lesson is the rule the code implements. Delete the rest.

Generated docs. An API reference dumped from comments is thousands of signatures and almost no argument. Pick the one section a stranger needs, save that section as its own .md, and upload that. The full reference stays in the repo.

A vault or a book. Document mode takes one file. A folder of chapters, an Obsidian export zip, and a Git bundle are the wrong object. One note, one lesson, one create.

Customer names and unreleased dates living in a list at the bottom. They ride along in the UTF-8. Cut the list. A LinkedIn slide is a file anyone can download.

Images and Mermaid. The alt text can survive. The picture and the rendered diagram do not. If the claim is only in the figure, write the claim in a sentence in the file, in words, before you upload. Slides later are HTML and CSS: type, shapes, gradients, and SVG. They do not place the PNG that sat next to the note.

The cut stays with the person whose name is on the post. The longer version of that choice is building Boykli.

A worked teardown

Source: docs/retry-budget.md in a private repo. The front matter has title: Retry budget and a Slack URL for the on-call channel. The first heading is "We stopped retrying the whole job." The paragraph under it says the median wasted compute on a retry went from 22 minutes to 4 minutes, because a failure now retries the failed step instead of the whole job. Three short sections follow: checkpoint id, reading that id on retry, and a poison step that stops after 3 attempts. A fenced block pastes the worker function, about 180 lines. A final list names three customers still on the old worker.

A Pandoc PDF of that file, uploaded to LinkedIn, swipes the Slack URL, the function, and the customer names. The lesson is in there. So is everything else.

Pass 1, prepare the file:

  1. Copy the note to a new file you will upload. Leave the repo copy alone.
  2. Delete the front matter, the fence, and the customer list. Leave the opening paragraph and the three sections. Search the copy for "22 minutes" so you know the numbers survived.
  3. Confirm the copy is named with a .md ending and is far under 7 MB. This note is a few kilobytes. The failures at this step are a .mdx component file, a .markdown extension, or a zip of the docs/ folder.

Pass 2, on Create posts:

  1. Document mode. Upload the trimmed .md. Leave the call-to-action switch off. The close of this post is the lesson, not a request to book a call.
  2. Brief: "Only the change from retrying the whole job to retrying the failed step. Keep 22 minutes, 4 minutes, and the stop after 3 attempts. Skip any channel link and any customer name."
  3. Tone: Step-by-Step. The useful shape is the order of the three sections. Analytical fits if the point is the two times and nothing else. Teach and Explain fits if the point is what a checkpoint is. Thought Leader fits the implication, still using only the file.
  4. Write. The post is 700 to 1,400 characters. If 22 minutes becomes "much faster," or a customer name appears, the brief was too loose or the trim missed a line. Fix the brief and refine, or write again. Two refinements are the limit on that draft.
  5. The accepted lesson is one paragraph you would say in a meeting: what changed, the two times, the stop at 3 attempts. That paragraph is the only material the slides are allowed to know.

Pass 3, on the carousel page:

  1. Paste an outline, not the Markdown file and not the whole post. A topic that works: "Cover: a retry used to waste 22 minutes, now 4. Slide 2: each step writes a checkpoint id. Slide 3: the retry reads that id. Slide 4: a poison step stops after 3 attempts. Close: retry the step, not the job. Do not add customer names or other numbers."
  2. Tone: Normal. Humor would treat an outage note as a joke.
  3. Slide count: 5, matching the outline. Default is 5. The form allows 2 through 8.
  4. Shape: Portrait, 1080 by 1350, because each step is two short lines plus a label. Square is 1080 by 1080 when the line is a card. A Pandoc page size is irrelevant here. The new PDF is the LinkedIn file. Dimensions and the 220px safe zone are in LinkedIn carousel dimensions.
  5. Design: Infographic / Data Guide for a sequence of steps. Neo-Brutalist is the default when the deck should look less like a rendered README. If brand-kit colors are on, the only design available is Normal. The other seven stay disabled until brand colors are off. The kit is canvas, accent, logo, photo, and handle, saved on the carousel page. That setup is LinkedIn brand kit.
  6. Model: Grok 4.6 is the default. The picker also offers Gemini 3.5 Flash, Claude Sonnet 5, and GPT-5.6 Terra. Document mode writes with the post model. The deck uses the carousel model.
  7. Create. The page stops the attempt at about eight minutes.
  8. Read every slide against the trimmed file. A third time, or a customer name, is a failed deck. Change the topic and create again. That is a new carousel generation. There is no per-box editor.
  9. Set the document title, up to 120 characters. LinkedIn shows it as the name of the PDF. The caption is separate, up to 3,000 characters, and it is the commentary in the feed. The title is required when you add the PDF to the queue.
  10. Download the PDF, post it now, or queue it. Publishing uses the personal profile from LinkedIn OAuth. Company pages are outside the product. How the queue takes the next open slot for a document is in How to schedule a PDF on LinkedIn.

The file you publish as the carousel is the new PDF. The .md stays in the repo. The text post, if you saved it, stays in the library as its own record. They do not merge.

How many slides a Markdown file can support

What is in the file after you trim itSlide count that fitsTopic you pasteDesign that usually holds it
One heading and two numbers, no sections2–3The contrast and both numbers, labeled as cover and closeBold and Edgy, or Neo-Brutalist
Three or four short sections that are actually steps5–6Cover, one action per slide, closeInfographic / Data Guide
A named framework, one heading per part5–7The name of each part, in order, plus what each part is forBauhaus or Split-Screen
A list of mistakes, each with a fix, written as prose7–8One mistake per slide. The close is the rule, not a new mistakeNeo-Brutalist
A changelog, a README, or an RFC with several argumentsDo not pick 8 and hopeSave one section as its own .md. Each accepted lesson is its own topicWhichever fits that lesson
A Marp or Slidev export you already like0 in this toolPublish that PDF from LinkedIn if those exact pages are public. This form designs a new deck from an outline—

Eight is a ceiling, not a goal. Density on a slide is also capped in the prompt: about five bullets or four cards, body type at 21px or larger on the square canvas. A topic that says "put the whole heading list on slide 3" produces a cramped slide or a dropped line. Split the list across slides in the outline.

Series mode on Create posts writes several text posts from source text you paste. It does not emit several carousel PDFs, and it does not read the .md upload. One deck is one create.

The order of operations

  1. Pick one Markdown file. If the lesson is a section of a long doc, copy that section into its own .md.
  2. Delete front matter, secrets, customer lists, and fences you do not want a stranger to read. Confirm the filename ends in .md.
  3. Search the copy for the sentence and the numbers you intend to publish.
  4. On Create posts, choose Document. Upload the file. A PDF or a Word file is the other accepted type when the source was never Markdown.
  5. Write the brief as a cut. Name the section, the claim, and the numbers to keep. Name what must not appear.
  6. Pick the document tone. Step-by-Step for a procedure. Analytical when the point is the comparison in the file. Teach and Explain for a framework. Thought Leader when the point is the implication, still using only what the file supports.
  7. Read the post. Refine at most twice. If the lesson is wrong, the slides will be a polished version of the wrong lesson.
  8. Rewrite the lesson as a slide outline in the carousel topic. Name the cover and the close. Stay inside 2,000 characters. Do not paste the README.
  9. Set Normal or Humor, ratio, design, model, and slide count. Save the brand kit first if you changed canvas, accent, logo, photo, or handle. An unsaved kit blocks create. Author strip and logo are toggles. The generator does not invent a handle.
  10. Create, then read the slides against the trimmed file. Download or publish only after that read.
  11. Title, caption, then the personal profile: post now or add to the queue. If you also want the text post live, publish that separately. The caption can point at a public write-up. The slides still have to stand alone, because many people swipe and never open the link.

Managed includes 210 posts and 150 carousels in the month, plus 150 images, 25 Voice Agent sessions, and 130 post refinements. The document post counts as a post. The carousel create counts as a carousel. Downloading the same PDF again does not. BYOK is the same screens with your OpenRouter key for chat and images and your Google AI Studio key for Voice Agent, and Boykli does not add a generation cap on that seat. You still pay those providers. Both seats are $29 and $88 a month on boykli.com. A paid seat is required before the app will write, create a carousel, publish, or schedule. Browsing Radar and Algorithm is open without one.

FAQ

Can I drop a Markdown file on the carousel page, or paste a GitHub link there?

The carousel page takes a topic of up to 2,000 characters. It does not take a file, and it does not take a URL. Upload the .md on Create posts, Document mode, accept one lesson, and paste an outline. The PDF you download afterward is a new slide deck. That deck is what LinkedIn publishes as the document post.

Why did the upload fail before any post existed?

The usual causes are a name that does not end in .md (.mdx, .markdown, .txt), a zip of a vault or a docs folder, a file over 7 MB, a string over 80,000 characters, or fewer than 80 non-whitespace characters. Trim the file and upload the single .md again.

Will my headings become the slides?

No. Headings stay lines in the extract. You decide the slide count, from 2 to 8, and you name each slide in the topic. A file with twelve headings is twelve possible lessons, not a twelve-page carousel. This form stops at 8, and one PDF is still one lesson.

The note is full of code. Will the slides show the function?

Only if the function's text is still in the file and you ask for it in the topic. A long fence crowds the 80,000-character budget and pulls an empty brief toward the sample. Delete the fence, keep the rule the code implements, and put that rule in the outline. Slides do not render a syntax-highlighted editor.

I already have a Marp or Pandoc PDF. Why start over?

Pandoc gives you the note, paginated at paper size. Marp or Slidev gives you slides you already designed. Upload either PDF to LinkedIn when those exact pages are what you want in the feed. Use this path when you want a new 2–8 page deck, phone-sized, from one lesson in the source text. A scanned or image-only export has no text layer. Document mode will not OCR it. Paste the words into a .md if the words exist somewhere you can copy.

How do I change a sentence on slide 4?

Edit the document title and the caption in place. Slide copy is part of the generated design. Change the topic and create again. That new create counts toward the Managed carousel cap, or toward your provider usage on BYOK.

What do I pay to run this?

The seat is $29 a month on BYOK or $88 a month on Managed. Managed includes 150 carousel generations and 210 posts in the month. BYOK has no Boykli monthly cap. The document write and the carousel create are both gated by the seat.

Can I queue the new PDF?

Yes, on the personal profile you connect. The queue asks for a document title. You set the days, the time of day, and the timezone. The next item takes the next open slot. It does not post as a company page, and it does not commit the Markdown file back to the repo.

Start from the Markdown file

One lesson from the .md, then a 2–8 slide document post on your personal LinkedIn profile. BYOK $29/month. Managed $88/month.

boykli.com →
FREE UTILITYClient-Side · No Signup
1080 × 1350 PORTRAIT

Create Your Free LinkedIn Carousel

Turn your notes into high-converting 4:5 carousel PDFs directly in your browser.

GROWTH AUDIT

Stop Putting Outbound Links in Post Body

LinkedIn penalizes posts with external links by ~48% reach suppression. Move links to the 1st comment instead.

Formatted for LinkedIn feedSlide 1 of 5

Related Comparisons & Guides

All 50+ guides →