{"id":13621653,"url":"https://github.com/fourtf/i","last_synced_at":"2025-07-06T16:33:52.940Z","repository":{"id":37451042,"uuid":"81663477","full_name":"fourtf/i","owner":"fourtf","description":"Simple self-host image uploader.","archived":false,"fork":false,"pushed_at":"2023-09-21T19:20:00.000Z","size":71,"stargazers_count":21,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-05T13:47:04.221Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/fourtf.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}},"created_at":"2017-02-11T15:58:09.000Z","updated_at":"2025-04-30T09:13:01.000Z","dependencies_parsed_at":"2024-01-22T01:12:01.330Z","dependency_job_id":"7b1e279f-ab66-44b7-8077-680cce475532","html_url":"https://github.com/fourtf/i","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fourtf/i","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fourtf%2Fi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fourtf%2Fi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fourtf%2Fi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fourtf%2Fi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fourtf","download_url":"https://codeload.github.com/fourtf/i/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fourtf%2Fi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259699532,"owners_count":22898271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-08-01T21:01:09.129Z","updated_at":"2025-07-06T16:33:52.887Z","avatar_url":"https://github.com/fourtf.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# i\n\ni is a minimal program for uploading files to your server and getting a \"i.example.com/file.png\" link back, similar to imgur.com. It is compatible with the open source image capture program [Share X](https://getsharex.com/).\n\nIt does ***not*** serve the files or handle authentification. It is meant to be used with a server like nginx or caddy.\n\n## what you need to build\n - golang\n\n## how to use\n - Open `i.go` and edit the configuration (set the `root` and `webRoot` variable to your desired values)\n - Compile with `go build`\n - Create a init.d service (if you are using another system skip this part)\n   - Copy the exampleservice file to /etc/init.d/ and call it `i`\n   - Edit it and change the `WWW_USER` to the user you want and `APPROOT` to the directory that the executable is in.\n   - Make it executable `sudo chmod +x /etc/init.d/i`\n   - Make it a service `sudo update-rc.d i defaults`\n - Add a custom sharex uploader like this: ![sharex_example.png](sharex_example.png)\n\n## if you are using nginx\n - Install the `apach2-utils` to generate a htpasswd file for authentification\n - Create a reverse proxy for your webserver. For example use i.example.com/upload to upload the images (by default to port 9005). Add basic auth to hande the authentification.\n    ```\n    location /upload {\n        auth_basic \"Restricted Content\";\n        auth_basic_user_file /etc/fileupload.htpasswd;\n        proxy_pass http://localhost:9005;\n    }\n    ```\n - Create a .htpasswd file using `htpasswd -c /etc/fileupload.htpasswd user` and enter a password.\n - Base64 encode user:password `echo -n user:yourpassword | base64` and add a header `Authorization: Basic \u003cyour base64\u003e` in sharex\n\n    ![sharex_auth.png](sharex_auth.png)\n\n## if you are using caddy\n - Create a reverse proxy for your webserver. For example use i.example.com/upload to upload the images (by default to port 9005).\n - Create a hashed password with `caddy hash-password`, add basic auth to handle the authentification.\n    ```\n    i.example.com {\n        root * /var/www/i.example.com\n        file_server\n        basicauth /upload {\n            user hashed_password\n        }\n        reverse_proxy /upload localhost:9005\n    }\n    ```\n - Base64 encode user:password `echo -n user:yourpassword | base64` and add a header `Authorization: Basic \u003cyour base64\u003e` in sharex (image in the nginx example)\n\n## if you are using apache2\n - idk figure it out, should be similar to nginx ¯\\\\\\_(ツ)\\_/¯\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffourtf%2Fi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffourtf%2Fi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffourtf%2Fi/lists"}