π΅ A beginner-friendly web app for managing your Archive.org collection
Easily edit metadata for hundreds of Archive.org items at once, with YouTube integration and real-time progress tracking.
Perfect for content creators who upload to Archive.org regularly!
β
Load your entire collection - See all your Archive.org items in one place
β
Batch edit metadata - Update 50+ items with just a few clicks
β
YouTube auto-matching - Automatically find matching YouTube videos
β
Real-time progress - Watch each item update live with green β
or red β
β
Sequential processing - Handles each item one by one for reliability
β
Beginner-friendly - No coding required, just point and click!
Use cases:
- Concert recordings: Add band names, venues, dates consistently
- Podcast collections: Standardize titles and descriptions
- Video archives: Link to YouTube versions and extract metadata
- Any large Archive.org collection that needs consistent formatting
New to web development? No problem! Follow these simple steps:
- Go to nodejs.org and download the LTS version (18+)
- Install it (just click through the installer)
- Test it worked: Open terminal and type
node --version
You need these to connect to Archive.org (and optionally YouTube):
Required: Archive.org credentials
Optional: YouTube API (for auto-matching features)
Super easy! Just 2 steps:
- Go to: archive.org/account/s3.php
- Log in with your Archive.org account
- Copy these 3 things:
- β
Access Key (looks like:
ABC123XYZ456) - β
Secret Key (looks like:
abcdef1234567890) - β Email (your Archive.org login email)
- β
Access Key (looks like:
That's it! Keep these safe - you'll paste them in Step 4.
Want YouTube integration? Here's how to get a free API key:
Step 2A: Create Google Cloud Project
- Go to Google Cloud Console
- Click "Create Project" (top of page)
- Give it any name like "Archive YouTube Matcher"
- Click "Create"
Step 2B: Enable YouTube API
- Search for "YouTube Data API v3" in the search bar
- Click on it, then click "Enable"
- Wait 30 seconds for it to activate
Step 2C: Get Your API Key
- Go to "Credentials" (left sidebar)
- Click "+ Create Credentials" β "API Key"
- Copy the key (starts with
AIzaS...) - Optional: Click "Restrict Key" for security
Step 2D: Find Your YouTube Channel ID
- Go to your YouTube channel
- Copy your handle (like
@YourChannelName) - Use commentpicker.com/youtube-channel-id.php
- Paste your handle, get your Channel ID (starts with
UC...)
π‘ Pro Tip: YouTube integration is completely optional! The app works great for metadata editing without it.
Option 1: Download ZIP (Easiest)
- Click the green "Code" button on this page
- Click "Download ZIP"
- Extract it to your Desktop or Documents folder
Option 2: Use Git (if you know git)
git clone <repository-url>
cd archivebatcheditor- Open terminal in your project folder
- Run this command:
npm install- Wait 2-3 minutes while it downloads everything needed
- You should see: "added XXX packages" when done β
Create your secret configuration file:
- In your project folder, create a new file called
.env(exactly that name) - Copy and paste this template:
# π Archive.org credentials (REQUIRED - get from step 2)
ARCHIVE_ACCESS_KEY=paste_your_access_key_here
ARCHIVE_SECRET_KEY=paste_your_secret_key_here
ARCHIVE_EMAIL=paste_your_email_here
# π₯ YouTube integration (OPTIONAL - get from step 2)
YOUTUBE_API_KEY=paste_your_youtube_api_key_here
YOUTUBE_CHANNEL_ID=paste_your_channel_id_here
# βοΈ Server settings (leave these as-is)
PORT=3001
NODE_ENV=development- Replace
paste_your_access_key_herewith your real Archive.org access key - Replace
paste_your_secret_key_herewith your real Archive.org secret key - Replace
paste_your_email_herewith your Archive.org email - If you got YouTube keys: replace those placeholders too
- If no YouTube: just leave those lines as-is or delete them
β
Save the file
π Never share this file - it contains your passwords!
π« Don't post it online - the app automatically keeps it private
You need TWO terminal windows:
npm run server:devYou should see:
- "Server running on port 3001" β
- "Server ready with quota-aware YouTube integration" β
- "Archive.org credentials loaded successfully" β
npm run devYou should see:
- "Local: http://localhost:3000" β
Go to: http://localhost:3000
You should see the Archive.org Batch Editor interface!
Perfect for beginners! Just follow these simple steps:
- Click the big "Load My Items" button
- Wait 5-10 seconds while it fetches your uploads
- See all your Archive.org items appear in the list β
What happens behind the scenes:
- π Fresh data: Loads your items directly from Archive.org each time
- π Secure: Only shows YOUR items (filtered by your email automatically)
- π Sequential: Processes items one by one for reliability
Want to update titles, descriptions, or other info? Here's how:
- βοΈ Check the boxes next to items you want to edit
- β Click "Add Field" and pick what to change (title, creator, description, etc.)
- βοΈ Type your new value in the text box
- π Click "Update X Items" button
- π Watch the magic! Each item updates with live progress:
- π Blue spinning = currently updating
- β Green checkmark = success!
- β Red X = error (shows why)
Pro Tips:
- β‘ Batch power: Select 50+ items and update them all at once!
- π― Replace mode: Your new value completely replaces the old one
- π Test first: Try with 1-2 items before doing large batches
Have YouTube videos of the same content? Auto-match them!
How it works:
- βοΈ Select Archive.org items you want to match
- π Click "Get YouTube Match" button
- β³ Wait while it searches YouTube for matching videos
- ποΈ Review suggestions - it extracts band names, venues, dates automatically!
- Choose what to apply:
- π "Add YouTube Links" = Just adds the YouTube URL
- β "Apply All Selected Fields" = Adds URL + extracted metadata
What gets extracted:
- πΈ Band/Artist name from video titles
- ποΈ Venue name (like "The Fillmore")
- π Date from video descriptions
- π YouTube URL for cross-referencing
π Sequential Processing
- One at a time: Processes items sequentially for reliability
- Fail-fast: Stops on first error to preserve API quota
- Fresh data: Always fetches latest information from APIs
- Status: See real-time processing updates in the server terminal
π Real-Time Progress
- Live updates: Watch each item process in real-time
- Error handling: See exactly which items failed and why
- Streaming: Progress updates even if you have 100+ items
- Quota-aware: Stops immediately on YouTube API quota exhaustion to preserve usage
π Security & Privacy
- Local only: Runs on your computer, not in the cloud
- API keys: Stored securely in .env file
- No tracking: Your data stays with you
β¨ Code Quality & Reliability
- TypeScript: Full type safety prevents runtime errors
- Comprehensive testing: 127 tests ensure reliability
- Robust error handling: Graceful failure with detailed logging
- API documentation: Self-documenting endpoints with examples
Don't panic! Here are the most common fixes:
Most common fixes:
-
Check your .env file:
- Is your Archive.org email correct?
- Did you paste the right access/secret keys?
- No extra spaces or quotes around your keys?
-
Try refreshing:
- Click the "π Refresh" button
- Wait 10-15 seconds for fresh data
-
Check the server terminal:
- Look for red error messages
- Common: "Invalid credentials" or "Access denied"
Still not working? Your Archive.org account might not have any public items, or your credentials expired.
Don't worry - YouTube is optional! Your main app still works perfectly.
Common YouTube issues:
- Quota exhausted: YouTube API has daily limits. The app automatically detects quota exhaustion and stops immediately to preserve remaining quota
- No matches: Not all Archive items have YouTube versions - totally normal!
- Wrong Channel ID: Double-check it starts with
UCand matches your actual channel
Quick fix: Just use the app without YouTube matching - still super powerful!
Check these basics:
- Node.js installed? Type
node --version- should show v18+ - Wrong folder? Make sure you're in the project folder
- Ports busy? Close other apps using ports 3000/3001
- Try reinstalling: Run
npm installagain
Mac users with SQLite errors:
xcode-select --installStill stuck? Delete the whole folder, re-download, and start over - sometimes that's fastest!
Quick fixes:
- Refresh the webpage (F5 or Cmd+R)
- Check your internet - updates stream live
- Look at server terminal - shows detailed progress even if UI breaks
- Wait it out - large batches can take 5-10 minutes
Nuclear option (fixes most issues):
- Close both terminals (Ctrl+C)
- Clear any temporary files: Delete any old cache files if they exist
- Restart everything:
npm run server:devandnpm run dev - Server starts fresh β
Before asking for help, gather this info:
- What error message do you see exactly?
- What step were you on when it broke?
- Are both terminals still running?
- What does your
.envfile look like? (Don't share the actual keys!)
Where to get help:
- Open a GitHub Issue with your error details
- Check if others had the same problem in existing Issues
Keep your API keys safe:
- π« Never share your
.envfile - treat it like your password - π« Don't post screenshots of your
.envfile - π« Don't commit it to git - the app automatically ignores it
- β Test with 1-2 items first before doing big batches
The app is secure by design:
- π Runs locally - your keys never leave your computer
- π― Surgical updates - only changes the metadata you specify
- ποΈ Transparent - you see exactly what changes before applying
Want to understand how it works or contribute? Here's the technical details:
archivebatcheditor/
βββ π₯οΈ src/ # Frontend React app (what you see in browser)
βββ βοΈ server/ # Backend Express server (handles API calls)
βββ π .env # Your secret keys (never commit this!)
βββ π¦ package.json # List of dependencies and scripts
βββ π README.md # This guide
- Frontend: React 18 + TypeScript + Vite (modern web framework)
- Backend: Node.js + Express + TypeScript (server technology)
- Real-time: Server-Sent Events (live progress updates)
- APIs: Archive.org + YouTube Data API v3
npm run dev # Start the website (port 3000)
npm run server:dev # Start the API server (port 3001)
npm run build # Build for production hosting
npm run preview # Test the production build
npm test # Run the comprehensive test suite (127 tests)
npm run type-check # Verify TypeScript compilationThis project includes a comprehensive test suite ensuring reliability:
- π 127 passing tests across 7 test suites (100% pass rate)
- π§ Integration tests for all API endpoints
- π Authentication regression tests to prevent auth bugs
- π End-to-end testing with real server interactions
- β‘ TypeScript compilation with zero errors
Run tests before contributing:
npm test # Full test suite
npm test -- --watch # Watch mode for development
npm run type-check # TypeScript validationFound a bug or want a new feature?
- π Report bugs: Open a GitHub Issue
- π‘ Request features: Open a GitHub Issue with "Feature Request"
- π§ Submit fixes: Open a Pull Request
Before contributing:
- β
Run tests:
npm testto ensure all 127 tests pass - β
Check types:
npm run type-checkfor TypeScript validation - β Test with real data: Test your changes with real Archive.org items
- π« Don't include: Your
.envfile in commits - π Document: Add comments explaining complex code
- π Update docs: Update this README if you change how things work
MIT License - This means:
- β Use it for personal projects
- β Use it for commercial projects
- β Modify it however you want
- β Share your improvements back (but not required)
Congratulations on setting up your Archive.org Batch Editor!
This tool can save you hours of manual work when managing large media collections. Whether you're organizing concert recordings, podcasts, or any other Archive.org uploads, you now have the power to update hundreds of items with just a few clicks.
Remember:
- π§ͺ Start small - test with a few items first
- π Sequential processing - items are handled one by one for reliability
- π Backup important data before large changes
- π Ask for help if you get stuck - we're here to help!
Happy archiving! π΅ππ¬
Last updated: September 2024