{"id":19430735,"url":"https://github.com/alpacatechjp/istore","last_synced_at":"2026-06-13T12:32:32.523Z","repository":{"id":29472215,"uuid":"33008827","full_name":"AlpacaTechJP/istore","owner":"AlpacaTechJP","description":null,"archived":false,"fork":false,"pushed_at":"2015-05-15T00:23:27.000Z","size":760,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":7,"default_branch":"develop","last_synced_at":"2025-01-07T20:14:41.320Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlpacaTechJP.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-27T20:57:26.000Z","updated_at":"2022-11-02T09:39:06.000Z","dependencies_parsed_at":"2022-09-06T20:40:59.505Z","dependency_job_id":null,"html_url":"https://github.com/AlpacaTechJP/istore","commit_stats":null,"previous_names":["alpacadb/istore"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlpacaTechJP%2Fistore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlpacaTechJP%2Fistore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlpacaTechJP%2Fistore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlpacaTechJP%2Fistore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlpacaTechJP","download_url":"https://codeload.github.com/AlpacaTechJP/istore/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240612535,"owners_count":19829027,"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-11-10T14:26:21.129Z","updated_at":"2025-12-15T02:21:16.901Z","avatar_url":"https://github.com/AlpacaTechJP.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# istore\n\nistore is to fill the space between storage, database, application and image recognition.\nThis component is\n\n- an object storage similar to S3\n- an image proxy that caches contents as well as processes pixels\n- a name service that provides uniform access to different data sources\n- a hierarchical database system that maintains metadata associated with each image data, and provides prefix-key iteration\n- a backend storage system to applications as well as various database products\n\n## Dependency\n\nAt the time of wrting, istore depends on ffmpeg installed on the system with pkg-config.\nIn the latest Ubuntu, there is no official package for ffmpeg anymore, so you should build\nit.  Refer to https://gist.github.com/xdamman/e4f713c8cd1a389a5917\n\n## User Guide\n\nCurrently there is no special client module.  You can interact with istore using curl.\n\n### Simple Operation\n\n#### POST\n\nYou can POST or PUT any URL object under a path.  `metadata` parameter can register a json\nassociated with the path key.\n\n```\n$ curl -XPOST $HOST/path/sample/http://video.webmfiles.org/elephants-dream.webm -d metadata='{\"name\": \"my video\"}'\n```\n\nPUT overwrites the metadata entirely with the input json, whereas POST method merges the input\nwith the existing json.\n\n#### GET\n\nAfter you register an object, you can query it.\n\n```\n$ curl -XGET $HOST/path/sample/http://video.webmfiles.org/elephants-dream.webm\n```\n\nThis will return the object at the original URL.  istore caches the object.\n\n#### LIST\n\nIf you GET at the directory, istore returns the list of json under the directory.\n\n\n```\n$ curl -XGET $HOST/path/sample/\n\n[{\"_id\":493,\"_filepath\":\"/path/sample/http://video.webmfiles.org/elephants-dream.webm\",\"metadata\":{\"name\":\"my video\"}}]\n```\n\n### Image Processing\n\nistore implements most of the image processing from the imaging package.  To call each function,\nsimply add ?apply={function}\u0026{param}={value}... to GET request.\n\n- adjustBrightness(percentage)\n- adjustContrast(percentage)\n- adjustGamma(gamma)\n- adjustSigmoid(midpoint, factor)\n- blur(sigma)\n- crop(x1, y1, x2, y2)\n- drawRect(rects=[(x1, y1, x2, y2, r, g, b)...])\n- fit(w, h)\n- flipH()\n- flipV()\n- grayscale()\n- invert()\n- sharpen(sigmoid)\n- transpose()\n- transverse()\n- resize(w, h)\n\nFor video objects, the below function is available.\n\n- frame(sec)\n\nSee also https://godoc.org/github.com/disintegration/imaging\n\n\n### Video Slicing\n\nYou can slice video into frames by\n\n```\n$ curl -XPOST $HOST/path/slice/_expand -d '{\"video\": \"/path/to/video\"}'\n```\n\nIt registers as many objects as duration of the video.\n\n### URL Scheme\n\nCurrently the following URL schemes is handled.\n\n- http, https\n  Retrieves object from remote http(s)\n- file\n  Retrieves object from the local disk of istore\n- self\n  Retrieves object from the istore path.  This makes it possible to nested image processing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpacatechjp%2Fistore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falpacatechjp%2Fistore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpacatechjp%2Fistore/lists"}