iqdb.org api client for Node.js.
English | 中文文档
- Type definitions ready.
- Support 'ignore color'.
- Support searching on single lib (simple search).
- Support both iqdb2d and iqdb3d.
- Support searching by file(buffer or stream) and url
- Based on Fetch
npm install iqdb-client
# or with yarn
yarn add iqdb-client
const searchPic = require('iqdb-client')
const result = (await searchPic('https://pixiv.cat/84035784-3.jpg', { lib: 'www' }))
/** also support ES Module Import*/
//see ./src/api.test.ts for more examples.
if(result.ok){
console.log(result.data)
}
searchPic(pic: string | Buffer | Readable,
{ lib, forcegray, libs,fileName }: IQDB_SEARCH_OPTIONS_ALL)
- lib: string, required
'www'(for iqdb2d) or '3d'(for 3diqdb), or other lib name defined in type
IQDB_SEARCH_LIBRARY_2D
in h.ts for single-lib search. - forcegray: boolean, default false whether ignore color.
- fileName: string
Determines field 'filename' in form data. Only make sense when searching by files. When not provide, a random-summon string will hold the place. - service: Array<number> Determine services to search on when performing search on multi-service.
export enum IQDBLibs_2D {
danbooru = 1,
konachan = 2,
'yande.re' = 3,
gelbooru = 4,
'sankaku channel' = 5,
'e-shuushuu' = 6,
zerochan = 11,
'anime-picture' = 13
}
export enum IQDBLibs_3D {
'3dbooru' = 7,
'idol' = 9
}
While successfully request iqdb.org, function will return an object with {ok:boolean}
. If similarity check passes, field ok
will be set to true
. See Example Result
While meet exceptions, function will return it in an object as text. For example:
{
ok:false,
/*error info*/
err:'HTTP 400'
}
Exception handle in this package is not mature yet due to lack of real test. Example Result
{
"ok": true,
"data": [{
"head": "Your image",
"img": "/thu/thu_114514.jpg",
"name": "84035784_p2.jpg",
"size": {
"width": 1703,
"height": 2459
}
}, {
"head": "Best match",
"sourceUrl": "//danbooru.donmai.us/posts/4076714",
"img": "/danbooru/1/f/8/1f8ff3c560a0689e795938138dac7b1f.jpg",
"size": {
"width": 1703,
"height": 2459
},
"type": "Safe",
"source": ["Danbooru", "Gelbooru"]
}, {
"head": "Additional match",
"sourceUrl": "https://yande.re/post/show/678391",
"img": "/moe.imouto/8/0/1/801df5f665e61e6f87eb85431f2ca2a1.jpg",
"size": {
"width": 1703,
"height": 2459
},
"type": "Safe",//shows whether is nsfw, might be one of 'Safe' | 'Ero' | 'Explicit'
"source": ["yande.re"]
}],
"service": [1, 2, 3, 4, 5, 6, 11, 13] //services used in this search
}
interface IQDBClientConfig {
baseDomain: string,
simlarityPass: number
userAgent: string,
fetchOptions?: import('node-fetch').RequestInit
}
const { makeSearchFunc } = require('iqdb-client')
const searchPic = await makeSearchFunc({
baseDomain: `127.0.0.1`,
simlarityPass: 0.6,
userAgent: 'testa',
})
Use makeSearchFunc()
to customize config. makeSearchFunc()
will return a new searchPic()
searchPic()
which is default exported by this module uses defaultConfig
:
export const defaultConfig: IQDBClientConfig = {
baseDomain: 'iqdb.org',
simlarityPass: 0.6,
userAgent: 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)',
}
- This package makes sense because of iqdb.org. Support them is supporting the package.
- Open issue or PR for questions.
The code contained within this repository is licensed under the MIT License. See LICENSE for more information.