{"id":23178557,"url":"https://github.com/artur24814/dicomaestro","last_synced_at":"2026-05-04T00:32:56.852Z","repository":{"id":266642898,"uuid":"890064870","full_name":"artur24814/DICOMaestro","owner":"artur24814","description":"DICOM Viewer with Image Manipulation and User Authentication","archived":false,"fork":false,"pushed_at":"2025-02-18T23:09:31.000Z","size":4478,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T02:16:00.715Z","etag":null,"topics":["asyncio","design-patterns","dicom","django-rest-framework","docker","docker-compose","jwt","medical-imaging","memento-pattern","react"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artur24814.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-17T23:00:18.000Z","updated_at":"2025-02-18T23:09:35.000Z","dependencies_parsed_at":"2025-02-18T23:22:13.576Z","dependency_job_id":"dabc919e-6988-47ca-91ee-11a8d42a2ecb","html_url":"https://github.com/artur24814/DICOMaestro","commit_stats":null,"previous_names":["artur24814/dicomaestro"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/artur24814/DICOMaestro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artur24814%2FDICOMaestro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artur24814%2FDICOMaestro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artur24814%2FDICOMaestro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artur24814%2FDICOMaestro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artur24814","download_url":"https://codeload.github.com/artur24814/DICOMaestro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artur24814%2FDICOMaestro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32590274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","design-patterns","dicom","django-rest-framework","docker","docker-compose","jwt","medical-imaging","memento-pattern","react"],"created_at":"2024-12-18T07:11:46.319Z","updated_at":"2026-05-04T00:32:56.821Z","avatar_url":"https://github.com/artur24814.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"frontend/public/logo512.png\" alt=\"Diagram aplikacji\" width=\"25\" /\u003e DICOMaestro\n\n\u003cstrong\u003eDICOMaestro\u003c/strong\u003e is a free, open-source application for viewing DICOM images and sequences,\nexploring metadata, and creating custom DICOM files via an API for developers.\nBuilt with privacy and security in mind, the application does not store any image data,\nensuring compliance with data protection requirements.\n\nWhether you are a medical professional, researcher, or developer,\nDICOMaestro provides powerful tools for working with medical imaging data,\nalong with flexible APIs for integrating its features into your own applications.\n\nKey Features\n* DICOM Image Viewer:\nSupports single images and sequences such as CT scans or MRIs.\n* Metadata Viewer:\nDisplays detailed metadata from DICOM files.\n* Custom DICOM File Creation:\nGenerate new DICOM files using the developer-friendly API.\n* Secure and Private:\nProcesses data locally without storing sensitive information.\n\n## API Documentation for Developers\nThis documentation describes the steps for developers to authenticate and interact with the API to manage their API keys and work with DICOM files. \u003ca href=\"https://dicomaestro.readthedocs.io/en/latest/\"\u003e Full documentation -\u003e\u003c/a\u003e\n\n### Prerequisites\nBefore interacting with the API, developers must have an account on our platform and obtain an access token. This token will be used for authentication in subsequent requests.\n\n## Endpoints that do not require authentication\n\n### Get Allowed DICOM Fields\nThis endpoint retrieves a list of allowed DICOM fields that can be used in queries or processing. You can filter the results using optional query parameters.\n\n#### Endpoint\n* `URL`: `/api/dicom-format/allowed-fields/`\n* `Method`: `GET`\n* `Description`: Returns a JSON object containing the list of allowed DICOM fields, with optional filtering based on query parameters.\n\n#### Request\n* __Headers__:\n    * Authorization: ApiKey your_api_key_here\n    * Content-Type: application/json\n* __Query Parameters (Optional)__:\nYou can filter the results using the following query parameters:\n\n    * `fields__contains` – Returns fields containing the specified substring.\n    * `fields__startswith` – Returns fields that start with the specified substring.\n    * `fields__endswith` – Returns fields that end with the specified substring.\n    * `fields__regex` – Returns fields matching a specified regex pattern.\n\n#### Example Request:\n```http\nGET /api/dicom-format/allowed-fields/?fields__contains=Patient HTTP/1.1\nHost: localhost:8080\nAuthorization: ApiKey amRqSgZZ....\n```\n#### Response\nIf successful, the API returns a JSON object containing the list of allowed DICOM fields along with the DICOM standard version.\n\nExample Response:\n```json\n{\n    \"allowedFields\": [\n        \"PatientName\",\n        \"PatientID\",\n        \"PatientBirthDate\",\n        \"PatientSex\",\n        \"PatientAge\",\n        \"PatientWeight\",\n        \"PatientAddress\",\n        \"PatientTelephoneNumbers\",\n        \"PatientState\",\n        \"PatientInsurancePlanCodeSequence\"\n    ],\n    \"dicomVersion\": \"3.0.1\"\n}\n```\n#### Explanation of Response Fields:\n* `allowedFields`: A list of DICOM fields that are allowed for use.\n* `dicomVersion`: The version of the DICOM standard used by the system.\n\n\n### Get Required DICOM Field Types\nThis endpoint provides a list of required DICOM fields along with their expected data types.\n\n#### Endpoint\n* `URL`: `/api/dicom-format/required-field-type/`\n* `Method`: `GET`\n* `Description`: Returns a JSON object containing the required DICOM field types and the DICOM standard version used.\n\n#### Request\n* Headers:\n    * `Authorization`: `ApiKey your_api_key_here`\n    * `Content-Type`: `application/json`\n\n#### Example Request:\n```http\nGET /api/dicom-format/required-field-type/ HTTP/1.1\nHost: localhost:8080\nAuthorization: ApiKey amRqSgZZ....\n```\n\n#### Response\nIf successful, the API returns a JSON object containing the required DICOM field types and the DICOM version.\n\nExample Response:\n```json\n{\n    \"requiredFieldTypes\": {\n        \"CommandGroupLength\": \"\u003cclass 'int'\u003e\",\n        \"CommandLengthToEnd\": \"\u003cclass 'int'\u003e\",\n        \"AffectedSOPClassUID\": \"\u003cclass 'pydicom.uid.UID'\u003e\",\n        \"RequestedSOPClassUID\": \"\u003cclass 'pydicom.uid.UID'\u003e\",\n        \"CommandRecognitionCode\": \"\u003cclass 'str'\u003e\",\n        \"CommandField\": \"\u003cclass 'int'\u003e\",\n        \"MessageID\": \"\u003cclass 'int'\u003e\",\n        \"MessageIDBeingRespondedTo\": \"\u003cclass 'int'\u003e\",\n        \"Initiator\": \"\u003cclass 'str'\u003e\",\n        \"Receiver\": \"\u003cclass 'str'\u003e\",\n        \"FindLocation\": \"\u003cclass 'str'\u003e\",\n        \"MoveDestination\": \"\u003cclass 'str'\u003e\",\n        \"Priority\": \"\u003cclass 'int'\u003e\",\n        \"CommandDataSetType\": \"\u003cclass 'int'\u003e\",\n        \"NumberOfMatches\": \"\u003cclass 'int'\u003e\",\n        \"ResponseSequenceNumber\": \"\u003cclass 'int'\u003e\",\n        \"Status\": \"\u003cclass 'int'\u003e\",\n        \"OffendingElement\": \"\u003cclass 'tuple'\u003e\",\n        \"ErrorComment\": \"\u003cclass 'str'\u003e\",\n        \"ErrorID\": \"\u003cclass 'int'\u003e\",\n        \"AffectedSOPInstanceUID\": \"\u003cclass 'pydicom.uid.UID'\u003e\",\n        \"RequestedSOPInstanceUID\": \"\u003cclass 'pydicom.uid.UID'\u003e\",\n        \"EventTypeID\": \"\u003cclass 'int'\u003e\",\n        \"AttributeIdentifierList\": \"\u003cclass 'tuple'\u003e\",\n        \"ActionTypeID\": \"\u003cclass 'int'\u003e\",\n        \"NumberOfRemainingSuboperations\": \"\u003cclass 'int'\u003e\",\n        \"NumberOfCompletedSuboperations\": \"\u003cclass 'int'\u003e\",\n\n        \"....\": \"...\",\n\n        \"FloatPixelData\": \"\u003cclass 'bytes'\u003e\",\n        \"DoubleFloatPixelData\": \"\u003cclass 'bytes'\u003e\",\n        \"PixelData\": \"\u003cclass 'str'\u003e\",\n        \"CoefficientsSDVN\": \"\u003cclass 'bytes'\u003e\",\n        \"CoefficientsSDHN\": \"\u003cclass 'bytes'\u003e\",\n        \"CoefficientsSDDN\": \"\u003cclass 'bytes'\u003e\",\n        \"DigitalSignaturesSequence\": \"\u003cclass 'str'\u003e\",\n        \"DataSetTrailingPadding\": \"\u003cclass 'bytes'\u003e\",\n        \"Item\": \"\u003cclass 'str'\u003e\",\n        \"ItemDelimitationItem\": \"\u003cclass 'str'\u003e\",\n        \"SequenceDelimitationItem\": \"\u003cclass 'str'\u003e\"\n    },\n    \"dicomVersion\": \"3.0.1\"\n}\n```\n#### Explanation of Response Fields:\n* `requiredFieldTypes`: A dictionary where keys represent DICOM field names and values represent their expected Python data types.\n* `dicomVersion`: The version of the DICOM standard used by the system.\n\n## Authentication\n### 1. Obtain an Access Token\nTo interact with the API, developers must first authenticate by obtaining an access token. This token will be used in the Authorization header to make authenticated requests.\n\nEndpoint\n* URL: `/api/token/`\n* Method: `POST`\n* Description: This endpoint accepts user credentials and returns an access token and a refresh token.\n#### Request\nYou need to send a `POST` request to the `api/token/` endpoint with the following payload:\n\n```json\n{\n  \"email\": \"user5@example.com\",\n  \"password\": \"securepassword123\"\n}\n```\n#### Response\nIf authentication is successful, you'll receive a response containing the access and refresh tokens:\n\n```json\n{\n  \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....\",\n  \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXV......\"\n}\n```\n* access: Use this token in the `Authorization` header as   `Bearer \u003caccess_token\u003e` for authenticated requests.\n* refresh: Use this token to refresh the access token when it expires.\n## Developer Profile\nOnce you have the access token, you need to create a developer profile before you can obtain an API key.\n\n### 2. Create a Developer Profile\nTo register your profile as a developer, send a POST request to the `api/developer/profiles/` endpoint with the following details.\n\nEndpoint\n* URL: `/api/developer/profiles/`\n* Method: `POST`\n* Description: This endpoint creates a new developer profile.\n#### Request\nInclude the Authorization header with your Bearer access token and the profile information in the request body:\n\n```json\n{\n  \"purpose\": \"testing\",\n  \"organization\": \"My Organization\"\n}\n```\n#### Response\nIf the profile creation is successful, you will receive a 201 Created status along with the details of your new profile:\n\n```json\n{\n  \"purpose\": \"testing\",\n  \"organization\": \"My Organization\"\n}\n```\n* Status 201 Created: Indicates that the profile has been successfully created.\n\n## API Key Management\nAfter creating your developer profile, you can obtain and manage your API keys.\n\n### 3. List and Create API Keys\n\nOnce your profile is set up, you can create and list your API keys.\n\nEndpoint\n* URL: /api-keys/\n* Method: `GET`, `POST`\n* Description:\n    * `GET`: Retrieves the list of API keys associated with your developer profile.\n    * `POST`: Creates a new API key for your developer profile.\n#### Request\nTo list the API keys, send a `GET` request with the `Authorization` header:\n\n```http\nGET /api-keys/ HTTP/1.1\nAuthorization: Bearer \u003caccess_token\u003e\n```\nTo create a new API key, send a `POST` request with the following `JSON` payload:\n\n```http\nPOST /api-keys/ HTTP/1.1\nAuthorization: Bearer \u003caccess_token\u003e\n\n{\n  \"name\": \"New API Key\"\n}\n```\n#### Response\n* GET `/api-keys/`:\n    * Status 200 OK: A list of API keys.\n* POST `/api-keys/`:\n    * Status 201 Created: The newly created API key.\n\nExample Response for `POST`:\n\n```json\n{\n  \"id\": 1,\n  \"name\": \"New API Key\",\n  \"key\": \"API_KEY_12345\"\n}\n```\n* key: This is the actual API key you will use to authenticate API requests.\n4. Delete API Key\n\nYou can delete an existing API key by specifying its ID.\n\nEndpoint\n* URL: `/api-keys/delete/\u003cstr:pk\u003e/`\n* Method: `DELETE`\n* Description: Deletes the specified API key.\n### Request\nTo delete an API key, send a `DELETE` request to the URL `/api-keys/delete/\u003cpk\u003e/` with the `Authorization` header:\n\n```http\nDELETE /api-keys/delete/1/ HTTP/1.1\nAuthorization: Bearer \u003caccess_token\u003e\n```\n### Response\nIf the deletion is successful, the API will return a 204 No Content status:\n\n```json\n{\n  \"detail\": \"Key deleted successfully.\"\n}\n```\n## Example API Key Flow\nHere’s a step-by-step example to help you understand the process:\n\n### Step 1: Obtain an Access Token\nSend a POST request to the `/api/token/` endpoint with your email and password:\n\n```json\n{\n  \"email\": \"user5@example.com\",\n  \"password\": \"securepassword123\"\n}\n```\nResponse:\n\n```json\n{\n  \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n```\n### Step 2: Create Developer Profile\nUse the access token to create your developer profile by sending a `POST` request to `/api/developer/profiles/`:\n\n```json\n{\n  \"purpose\": \"testing\",\n  \"organization\": \"My Organization\"\n}\n```\n### Response:\n\n```json\n{\n  \"purpose\": \"testing\",\n  \"organization\": \"My Organization\"\n}\n```\n### Step 3: Create an API Key\nWith the developer profile created, you can now request your API key. Send a `POST` request to `/api-keys/`:\n\n```json\n{\n  \"name\": \"New API Key\"\n}\n```\n### Response:\n\n```json\n{\n  \"id\": 1,\n  \"name\": \"New API Key\",\n  \"key\": \"API_KEY_12345\"\n}\n```\n\n## DICOM File Upload and Image Retrieval\n\nTo upload a DICOM file for processing and retrieve image data, you need to send a `POST` request to the `/api/dicom/read/file/` endpoint. The request should include the following:\n\nEndpoint\n* URL: `/api/dicom/read/file/`\n* Method: `POST`\n* Description: This endpoint allows developers to upload a DICOM file, process it, and receive a response with DICOM metadata along with image data in the desired format.\n#### Request\n* Headers:\n    * `Authorization`: `ApiKey amRqSg....`\n* Body: The request body should contain the following parameters:\n\n    * `file`: The DICOM file to be uploaded.\n    * `fields` (optional): A comma-separated list of specific DICOM fields you wish to retrieve. If this is not provided, all fields will be included.\n    * `return_format` (optional): The desired image format for the response. Valid values are gif, png, and jpeg.\n#### Example Request:\n```http\nPOST /api/dicom/read/file/ HTTP/1.1\nHost: localhost:8080\nAuthorization: ApiKey amRqSgZZ.CLevHmvt7WJucw2gKA5sGhEUs2Fh6Svq\nContent-Type: multipart/form-data\n\n--boundary\nContent-Disposition: form-data; name=\"file\"; filename=\"dicom-file.dcm\"\nContent-Type: application/dicom\n\n\u003cbinary DICOM file content\u003e\n\n--boundary\nContent-Disposition: form-data; name=\"fields\"\n\nPatientName,StudyDate,Modality\n\n--boundary\nContent-Disposition: form-data; name=\"return_format\"\n\npng\n--boundary--\n```\nParameters:\n* `file` (required): The DICOM file to upload. Must be one of the following formats: `.dcm`, `.DCM`, `.zip`.\n* `fields` (optional): A comma-separated list of specific DICOM fields to retrieve. If not provided, all available fields will be returned.\n* `return_format` (optional): The image format you prefer for the response. Valid options are:\n    * `gif`\n    * `png`\n    * `jpeg`\n#### Response\nUpon successful processing of the file, you will receive a response containing DICOM metadata and the image in the requested format.\n\nExample Response:\n\n```json\n{\n  \"ImageType\": \"['DERIVED', 'PRIMARY', 'SINGLE PLANE', 'SINGLE A']\",\n  \"SOPClassUID\": \"1.2.840.10008.5.1.4.1.1.12.1\",\n  \"SOPInstanceUID\": \"1.3.12.2.1107.5.4.3.321890.19960124.162922.29\",\n  \"StudyDate\": \"19941013\",\n  \"StudyTime\": \"141917\",\n  \"Modality\": \"XA\",\n  \"LossyImageCompressionRetired\": \"01\",\n  \"SourceImageSequence\": \"[(0008,1150) Referenced SOP Class UID            UI: X-Ray Angiographic Image Storage\\n(0008,1155) Referenced SOP Instance UID         UI: 1.3.12.2.1107.5.4.3.321890.19960124.162922.28]\",\n  \"PatientName\": \"Rubo DEMO\",\n  \"PatientID\": \"556342B\",\n  \"PatientBirthDate\": \"19951025\",\n  \"PatientSex\": \"M\",\n  \"FrameTime\": \"33\",\n  \"RadiationSetting\": \"GR\",\n  \"PositionerPrimaryAngle\": \"-32\",\n  \"PositionerSecondaryAngle\": \"2\",\n  \"StudyInstanceUID\": \"1.3.12.2.1107.5.4.3.123456789012345.19950922.121803.6\",\n  \"SeriesInstanceUID\": \"1.3.12.2.1107.5.4.3.123456789012345.19950922.121803.8\",\n  \"SeriesNumber\": \"1\",\n  \"SamplesPerPixel\": \"1\",\n  \"PhotometricInterpretation\": \"MONOCHROME2\",\n  \"NumberOfFrames\": \"96\",\n  \"FrameIncrementPointer\": \"(0018,1063)\",\n  \"Rows\": \"512\",\n  \"Columns\": \"512\",\n  \"BitsAllocated\": \"8\",\n  \"BitsStored\": \"8\",\n  \"HighBit\": \"7\",\n  \"PixelIntensityRelationship\": \"LIN\",\n  \"RecommendedViewingMode\": \"NAT\",\n  \"RWavePointer\": \"[20, 53, 77]\",\n  \"MaskSubtractionSequence\": \"[(0028,6101) Mask Operation                      CS: 'NONE'\\n(0028,6110) Mask Frame Numbers                  US: 0]\",\n  \"PixelData\": \"b'\\\\xfe\\\\xff\\\\x00\\\\xe0\\\\x80\\\\x01\\\\x00\\\\x00\\\\x00.....\",\n  \"ImageFormat\": \"PNG\",\n  \"Images\": [\"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAAAAADRE4s...\", \"d...\", ....]\n}\n```\n#### Explanation of Response Fields:\n* `ImageType`: Describes the type of image (e.g., derived, primary).\n* `SOPClassUID`: The unique identifier for the DICOM SOP class.\n* `SOPInstanceUID`: The unique identifier for the specific instance of the DICOM image.\n* `PatientName`: Name of the patient.\n* `Modality`: Type of medical imaging modality used (e.g., XA for X-ray angiography).\n* `PixelData`: The pixel data of the image (in binary format).\n* `ImageFormat`: The format of the image returned (e.g., PNG).\n* `Images`: A list of base64-encoded image data for each image.\n\n## DICOM File Generation and Download\nTo generate a DICOM file from provided metadata and an image file, send a `POST` request to the `/api/dicom/write/upload_content/` endpoint.\n\nEndpoint\n* URL: `/api/dicom/generate/`\n* Method: `POST`\n* Description: This endpoint allows users to upload an image and provide necessary DICOM metadata to generate a valid DICOM file.\n\n#### Request\n* Headers:\n    * `Authorization`: `ApiKey your_api_key_here`\n    * `Content-Type`: `multipart/form-data`\n* Body Parameters:\n    * `file_name` (required): The name of the generated DICOM file (without extension).\n    * `image` (required): The image file to be embedded in the DICOM file. Supported formats: `png`, `jpeg`.\n    * `Additional DICOM metadata fields` (optional): Key-value pairs of metadata fields to be included in the DICOM file.\n\n#### Example Request:\n```http\nPOST /api/dicom/generate/ HTTP/1.1\nHost: localhost:8080\nAuthorization: ApiKey amRqSgZZ...\nContent-Type: multipart/form-data; boundary=boundary\n\n--boundary\nContent-Disposition: form-data; name=\"file_name\"\n\nexample_dicom\n--boundary\nContent-Disposition: form-data; name=\"image\"; filename=\"image.png\"\nContent-Type: image/png\n\n\u003cbinary image file content\u003e\n\n--boundary\nContent-Disposition: form-data; name=\"PatientName\"\n\nJohn Doe\n--boundary\nContent-Disposition: form-data; name=\"Modality\"\n\nCT\n--boundary--\n```\n\n#### Response\nIf the request is successful, the server will return a downloadable DICOM file.\n\nExample Response Headers:\n```bash\nHTTP/1.1 200 OK\nContent-Type: application/dicom\nContent-Disposition: attachment; filename=\"example_dicom.dcm\"\n```\nThe response body will contain the binary content of the generated DICOM file.\n\n## API Usage Limits\n\nEach developer has access to the DICOM file upload endpoint up to 1000 times per month. To check your remaining usage, you can use the following endpoint:\n\nTo view the daily and monthly usage for your developer profile, send a `GET` request to the `activity-summary` endpoint.\n\nEndpoint\n* URL: `api/developer/profiles/activity-summary/`\n* Method: GET\n* Description: Retrieves the daily and monthly usage statistics for your API access.\n#### Request\n* Headers:\n    * `Authorization`: `Bearer \u003caccess_token\u003e`\n#### Example Request:\n```http\nGET /api/developer/profiles/activity-summary/ HTTP/1.1\nHost: localhost:8080\nAuthorization: Bearer \u003caccess_token\u003e\n```\n#### Response\nYou will receive a response with your daily and monthly usage:\n\n```json\n{\n  \"daily_activity\": [\n    {\n      \"day\": \"2025-01-05\",\n      \"count\": 1\n    }\n  ],\n  \"monthly_total\": 1\n}\n```\n* `daily_activity`: An array showing how many requests have been made each day.\n* `monthly_total`: The total number of requests made for the current month.\n## Error Handling: API Limit Exceeded\nIf the monthly usage limit is exceeded, you will receive a 429 Too Many Requests response. The response will contain an error message indicating that the limit has been reached, and you will need to wait until the new month to refresh your quota.\n\n#### Example Response for Exceeded Limit:\n\n```json\n{\n  \"error\": \"Monthly API request for '/api/dicom/read/file/' limit exceeded.\",\n  \"quota\": 1000,\n  \"requests_used\": 1001\n}\n```\n* `error`: A description of the error, including the endpoint and the exceeded limit.\n* `quota`: The maximum number of requests allowed per month for that endpoint.\n* `requests_used`: The number of requests that have been used during the current month.\n\nOnce the limit is reached, you will need to wait for the start of the new month for your API request quota to reset.\n\n## Installation\n### Prerequisites:\n* Python 3.8+\n* Node.js 16+\n* PostgreSQL\n### Backend Setup (Django):\n\n* Clone the repository:\n    \n    ```bash\n    git clone https://github.com/yourusername/DICOMaestro.git  \n    cd DICOMaestro/backend\n    ```\n* Create a virtual environment:\n    ```bash\n    python -m venv env  \n    source env/bin/activate\n    ``` \n* Install dependencies:\n    ```bash\n    pip install -r requirements.txt\n    ```\n* Configure the .env file with your database credentials.\n\n* Run database migrations:\n    ```bash\n    python manage.py migrate\n    ```\n* Start the backend server:\n    ```bash\n    python manage.py runserver\n    ```\n### Frontend Setup (React):\n* Navigate to the frontend directory:\n    ```bash\n    cd ../frontend\n    ```\n* Install dependencies:\n    ```bash\n    npm install\n    ```\n* Start the development server:\n    ```bash\n    npm start\n    ```\n\n### Alternative Setup Using Docker:\nYou can also use Docker to set up both the backend and frontend with the docker-compose.dev.yml file.\n\n1. Clone the repository:\n\n    ```bash\n    git clone https://github.com/yourusername/DICOMaestro.git\n    cd DICOMaestro\n    ```\n2. Create a `.env` file: In the root directory of the project, create a .env file and configure it with the following values:\n\n    ```env\n    SECRET_KEY='super_secret'\n    DEBUG=True\n\n    DB_HOST='db'\n    DB_DB='postgres'\n    DB_PORT=5432\n    DB_USER='postgres'\n    DB_PASSWORD='super_password'\n\n    DJANGO_ALLOWED_HOSTS='localhost 0.0.0.0 127.0.0.1'\n\n    CSRF_TRUSTED_ORIGINS='http://localhost:80'\n    ```\n3. Build and start the containers: From the root directory, use the following command to build and start the Docker containers using `docker-compose.dev.yml`:\n\n    ```bash\n    docker-compose -f docker-compose.dev.yml up --build\n    ```\n    This will set up both the backend (Django) and frontend (React) in Docker containers.\n\n4. Access the Application: Once the containers are running, you can access the application by opening your browser and navigating to:\n\n    * `http://localhost:80` for the frontend\n    * `http://localhost:80/api/` for the backend API (Django)\n\n\n### Usage\n\nOpen your browser and navigate to `http://localhost:3000`.\n\nUse the intuitive web interface to upload and view DICOM files, explore metadata, or interact with the API.\nRefer to the API documentation (/api/docs) for integrating DICOMaestro into your applications.\n\n## Contributing\nWe welcome contributions from the community! Here's how you can help:\n\n* Report Issues: Use the GitHub issue tracker to report bugs or suggest features.\n* Submit Pull Requests: Fork the repository, make your changes, and submit a pull request.\n* Improve Documentation: Help us improve the installation and usage guides.\n## Guidelines:\nFollow the PEP 8 standard for Python code.\nUse ESLint to lint JavaScript code.\nEnsure your changes are covered by tests.\n## License\nDICOMaestro is licensed under the MIT License, making it free to use, modify, and distribute. See the LICENSE file for details.\n\n#### Start using DICOMaestro today to simplify your work with medical imaging data!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartur24814%2Fdicomaestro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartur24814%2Fdicomaestro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartur24814%2Fdicomaestro/lists"}