Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Tests

ScanSync logo white for dark mode

ScanSync logo black for light mode

ScanSync

ScanSync is a Python application designed to streamline document management by:

  • Creating an SMB server with custom targets.
  • Performing OCR (Optical Character Recognition) with OCRmyPdf on new documents in English (ENG) and German (GER).
  • Syncing documents to a specified location within your OneDrive.
  • Renaming files intelligently using OpenAI or your local Ollama server.
  • Ensuring redundancy with RabbitMQ.
  • Supporting multiple sync targets.

Dashboard

🚀 Features

  • SMB Server: Easily connect and manage your documents.
  • OCR Support: Automatic text recognition in multiple languages.
  • OneDrive Integration: Seamless syncing to your preferred location.
  • AI-Powered File Renaming: Smart renaming using using OpenAI or your local Ollama server..
  • Redundancy: Reliable document handling with RabbitMQ.
  • Multiple Sync Targets: Flexibility to sync across various locations.

Why this project?

I ran into the following issue: I wanted to scan a document using a regular network scanner, OCR that file and move it automatically to SharePoint or OneDrive. There are ver expensive scanners that do have that option, but buying new hardware was out of scope. Then there also is 3rd party software, but it usually requires paid cloud services and subscriptions: Not suitable for a small business or even personal use. Therefore this application, that enables you to use a regular network scanner, make the document searchable by running OCR and then automatically pushing it into your desired OneDrive location. No big hastle, everything local and for free (except the optional OpenAI file naming, but the cost is in the cents.)

📦 Installation

  1. Clone the repository:
    git clone https://github.com/maxi07/ScanSync.git
  2. Install dependencies:
  3. Start the application:
    docker compose up --build -d

Once started:

  • Connect to the SMB server using:
    • Username: ocr
    • Password: ocr
    • Share: Scans
  • Access the web server at your server's IP on port 5001.
  • Setup your onedrive connection, add a smb share and start scanning

🛠 Development

For development purposes, you can use the built-in Flask server:

  1. Update the ENV variable in the docker-compose.yml file to development.
  2. Restart the application to enable debug output and Flask development mode.
  3. Run pytests via the run-tests.sh script (Spins up a docker test-service)

📡 API

GET /api/status

Returns aggregated document processing status including per-stage breakdowns, currently processing items, and recent completion history.

Response fields:

FieldTypeDescription
processed_pdfsintCount of completed documents
processing_pdfsintCount of in-progress documents
latest_processing_timestampstring|nullMost recent processing update timestamp
latest_completed_timestampstring|nullMost recent completion timestamp
latest_created_namestring|nullFilename of the latest document
latest_created_statusint|nullStatus code of the latest document
total_pdfsintTotal document count across all statuses
failed_pdfsintCount of failed documents
avg_processing_secondsfloat|nullAverage processing time for completed documents
processing_detailsarrayBreakdown of in-progress documents grouped by status
currently_processingarrayList of individual documents currently being processed
recent_filesarrayLast 5 completed or failed documents with timestamps
Example response
{
"processed_pdfs": 10,
"processing_pdfs": 3,
"latest_processing_timestamp": "2024-06-01 12:00:00",
"latest_completed_timestamp": "2024-06-01 11:30:00",
"latest_created_name": "invoice.pdf",
"latest_created_status": 2,
"total_pdfs": 15,
"failed_pdfs": 2,
"avg_processing_seconds": 45.68,
"processing_details": [
{"status": "OCR Processing", "status_code": 2, "count": 2},
{"status": "Reading Metadata", "status_code": 1, "count": 1}
],
"currently_processing": [
{
"id": 12,
"file_name": "scan1.pdf",
"status": "OCR Processing",
"status_code": 2,
"created": "2024-06-01 12:00:00",
"pdf_pages": 3
}
],
"recent_files": [
{
"id": 11,
"file_name": "doc1.pdf",
"status": "Completed",
"status_code": 5,
"created": "2024-06-01 10:00:00",
"completed": "2024-06-01 10:01:00",
"pdf_pages": 2
}
]
}

🔮 Upcoming Features

  • Notifications: Stay informed with real-time updates.
  • OCR Settings: Take control of OCR settings in the web interface

Thank you for using ScanSync! If you encounter any issues or have feature requests, feel free to open an issue on the GitHub repository.

About

ScanSync uses OCR on new files on a SMB server and uploads them to OneDrive.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages