GatherHub includes a flexible tagging system that allows you to organize and categorize your download jobs. Tags make it easier to find related content and manage your archives more efficiently.
Tags in GatherHub are simple text labels that can be attached to any job. A job can have multiple tags, and the same tag can be applied to multiple jobs, creating a many-to-many relationship.
Tags are stored in the database and are preserved even if the job status changes or if the job is retried.
There are several ways to add tags to jobs:
You can also add tags programmatically:
POST /api/jobs/{id}/tags
Content-Type: application/json
{
"tag": "tutorial"
}
DELETE /api/jobs/{id}/tags/{tag_name}
One of the main benefits of tags is the ability to filter jobs based on them:
The jobs list will update to show only jobs that have all the selected tags.
You can combine tag filters with other filters like status or media type:
While tags are created ad-hoc when you add them to jobs, you can see a complete list of all available tags:
You can also view tags through the API:
GET /api/tags
GatherHub doesn't enforce specific tag naming conventions, but here are some recommendations:
Here are some effective ways to use tags:
tutorial
, documentation
, article
, reference
video
, audio
, text
, image
programming
, design
, science
, history
python
, golang
, javascript
github
, youtube
, medium
, twitter
personal
, work
, research
important
, urgent
, reference
, archive
project-x
, research-2025
, thesis
Using multiple tags together creates a powerful organization system:
github
, code
, golang
, project-x
youtube
, video
, tutorial
, programming
This allows for very specific filtering like "show me all programming tutorials that are videos."
You can use event hooks to automatically add tags based on content:
#!/bin/bash
# Example of a post_download hook that adds tags based on content type
# Get job data from stdin
json_data=$(cat)
# Extract the URL and media type
url=$(echo "$json_data" | jq -r '.url')
media_type=$(echo "$json_data" | jq -r '.media_type')
job_id=$(echo "$json_data" | jq -r '.id')
# Add appropriate tag based on URL pattern
if [[ "$url" == *"github.com"* ]]; then
curl -X POST -H "Content-Type: application/json" \
-d '{"tag":"github"}' \
"http://localhost:8060/api/jobs/$job_id/tags"
fi
# Add language tag based on repository content
if [[ "$media_type" == "git" ]]; then
# Check if repository contains Go files
if [[ -f "$file_path/go.mod" ]]; then
curl -X POST -H "Content-Type: application/json" \
-d '{"tag":"golang"}' \
"http://localhost:8060/api/jobs/$job_id/tags"
fi
fi