Skip to content

Latest commit

 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

unscroll 📜✨

Because swiping through a 10-slide Instagram carousel just to get a basic pancake recipe is peak human productivity.

Bun Next.js TypeScript License


🙄 What is this?

unscroll is a visual document extraction engine designed for people who value their time slightly more than the average Instagram user.

Instead of manually squinting at low-res carousel slides, screenshotting them, and then typing out ingredients or workout sets like it's 2005, unscroll grabs the post, downloads the slides, feeds them to high-speed Vision AI models, resolves all the hidden canonical links, and outputs formatted Markdown ready for Notion, Apple Notes, or your favorite note-taking void.


⚡ Features (Because apparently swiping is hard)

  • Instagram Carousel Unscroller: Hand it a public Instagram post URL, and watch it extract every slide before Instagram tries to make you log in.
  • Manual Image Dropzone: Drag & drop 1 to 20 slide screenshots. Yes, up to 20. If a post has 20 slides, it probably could have been a blog post, but here we are.
  • Sub-3-Second Dynamic Parallel Extraction: We dynamically scale parallelism (Math.min(totalSlides, maxLimit)). While local Ollama models spent 2 minutes thinking about life choices, Google Gemini Flash processes 7 slides in under 2.5 seconds.
  • Zero Hallucination Canonical Link Resolver: Extracts YouTube, GitHub, and web URLs mentioned in visual text, searches for verified canonical links, and generates clickable markdown badges.
  • Paranoid Input Sanitizer: Rejects loopback IPs (127.0.0.1), local network targets, and AWS metadata endpoints (169.254.169.254). Nice try, script kiddies.

🛠️ Monorepo Topology

Because one package.json was obviously too simple:

unscroll/
├── apps/
│   └── web/              # Next.js 14 App Router UI & REST API endpoints
├── packages/
│   ├── domain/           # Core TypeScript types & document entities
│   ├── schemas/          # Zod validation schemas & paranoid input sanitizers
│   ├── adapters/         # Instagram scrapers & upload capture adapters
│   ├── cache/            # Thread-safe ephemeral document store
│   └── ai/               # Vision & Reasoning AI providers + parallel pipeline
└── cli.ts                # Terminal CLI for terminal nerds

🚀 Quickstart (If you insist on running it yourself)

Prerequisites

  • Bun (v1.3 or higher)
  • A GEMINI_API_KEY (unless you like waiting around for slow local VLMs)

Installation

# Clone the repo (you know the drill)
git clone https://github.com/PiKa919/unscroll.git
cd unscroll

# Install workspace dependencies using Bun
bun install

💻 CLI Usage

Don't want to open a browser? We built a CLI just for you:

# Set your API Key
export GEMINI_API_KEY="your-gemini-api-key"

# Unscroll an Instagram carousel post directly in your terminal
bun run cli.ts "https://www.instagram.com/p/C_samplePost123/"

Output Example

=================================================
   UNSCROLL VISUAL KNOWLEDGE & NOTION ENGINE     
=================================================
Target URL : https://www.instagram.com/p/C_samplePost123/

>>> STEP 1: Capturing Instagram post slides...
✓ Capture Complete! Post Title: "High Protein Meal Prep"
✓ Total Carousel Slides Captured: 6

>>> STEP 2: Running Live Vision AI Processing & Canonical Link Resolution...
Configured Provider: Google Gemini (gemini-flash-lite-latest) | Dynamic Parallel Concurrency: 7

🎉 DOCUMENT PROCESSING COMPLETE! Status: COMPLETE
Primary Document Category: RECIPE

=================================================
    NOTION / NOTES FORMATTED MARKDOWN EXPORT     
=================================================

# High Protein Meal Prep
*Extracted via unscroll Visual Knowledge Engine*

## 🛒 Ingredients
- 500g Chicken Breast [Slide 1, 2]
- 2 tbsp Olive Oil [Slide 2]
- 1 cup Jasmine Rice [Slide 3]

## 📋 Instructions
1. Season chicken breast with spices and sear on high heat for 6 mins per side. [Slide 3]
2. Cook jasmine rice in chicken broth until fluffy. [Slide 4]

=================================================
✓ Ready to copy and paste into Notion, Notes, or Calendar!
=================================================

🌐 Running the Web Application

# Start the Next.js development server
GEMINI_API_KEY="your-gemini-api-key" bun dev

# Open http://localhost:3000 in your browser

🧪 Running Tests

Because tests are the only reason we sleep at night:

# Run all 40+ monorepo unit tests
bun test

# Build Next.js production bundle
bun --filter unscroll-web build

📄 License

MIT © PiKa919. Enjoy swiping less.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages