pixivflow 2.23.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,12 +31,22 @@ export interface PixivMetadata {
31
31
  name: string;
32
32
  is_chinese: boolean;
33
33
  };
34
+ assets?: Array<{
35
+ marker: string;
36
+ kind: 'uploadedimage' | 'pixivimage';
37
+ sourceId: string;
38
+ url?: string;
39
+ localPath?: string;
40
+ status: 'pending' | 'downloaded' | 'failed' | 'unavailable';
41
+ failureReason?: string;
42
+ }>;
34
43
  }
35
44
  export declare class FileService implements IFileService {
36
45
  private readonly storage;
37
46
  constructor(storage: StorageConfig);
38
47
  initialise(): Promise<void>;
39
48
  saveImage(buffer: ArrayBuffer, fileName: string, metadata?: FileMetadata): Promise<string>;
49
+ saveBinary(buffer: ArrayBuffer, fileName: string, directory: string): Promise<string>;
40
50
  saveText(content: string, fileName: string, metadata?: FileMetadata): Promise<string>;
41
51
  private static readonly MAX_FILENAME_BYTES;
42
52
  sanitizeFileName(name: string): string;
@@ -27,6 +27,12 @@ class FileService {
27
27
  await node_fs_1.promises.writeFile(uniquePath, Buffer.from(buffer));
28
28
  return uniquePath;
29
29
  }
30
+ async saveBinary(buffer, fileName, directory) {
31
+ await (0, fs_1.ensureDir)(directory);
32
+ const uniquePath = await this.findUniquePath(directory, fileName);
33
+ await node_fs_1.promises.writeFile(uniquePath, Buffer.from(buffer));
34
+ return uniquePath;
35
+ }
30
36
  async saveText(content, fileName, metadata) {
31
37
  const baseDirectory = this.storage.novelDirectory ?? this.storage.downloadDirectory;
32
38
  const organizationMode = this.storage.novelOrganization ?? 'flat';
@@ -35,7 +35,9 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.NovelDownloader = void 0;
37
37
  const logger_1 = require("../logger");
38
+ const node_path_1 = require("node:path");
38
39
  const language_detection_1 = require("../utils/language-detection");
40
+ const novelMarkers_1 = require("./novelMarkers");
39
41
  const LANGUAGE_CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
40
42
  class NovelDownloader {
41
43
  client;
@@ -156,6 +158,45 @@ class NovelDownloader {
156
158
  date: detail.create_date ? new Date(detail.create_date) : new Date(),
157
159
  };
158
160
  const filePath = await this.fileService.saveText(content, fileName, metadata);
161
+ const assets = typeof textResponse === 'string'
162
+ ? []
163
+ : (0, novelMarkers_1.extractNovelAssets)(text, textResponse);
164
+ const hadImages = assets.length > 0;
165
+ const pendingAssets = assets.filter((a) => Boolean(a.url));
166
+ if (pendingAssets.length) {
167
+ const imagesDir = (0, node_path_1.join)((0, node_path_1.dirname)(filePath), 'images');
168
+ for (const asset of pendingAssets) {
169
+ try {
170
+ const buffer = await this.client.downloadImage(asset.url);
171
+ asset.localPath = await this.fileService.saveBinary(buffer, novelAssetFileName(asset), imagesDir);
172
+ asset.status = 'downloaded';
173
+ }
174
+ catch (error) {
175
+ asset.status = 'failed';
176
+ asset.failureReason = error instanceof Error ? error.message : String(error);
177
+ logger_1.logger.warn(`Failed to download novel inline image ${asset.sourceId} for novel ${detail.id}`, {
178
+ novelId: detail.id,
179
+ sourceId: asset.sourceId,
180
+ reason: asset.failureReason,
181
+ });
182
+ }
183
+ }
184
+ if (hadImages) {
185
+ logger_1.logger.info(`Novel ${detail.id} inline images: ${assets.filter((a) => a.status === 'downloaded').length}/${assets.length} downloaded`, { novelId: detail.id });
186
+ }
187
+ }
188
+ // Rich-media markdown sidecar (RFC 1 Phase 2): same path as the .txt
189
+ // (compat format stays), inline images become relative ![](images/x.jpg)
190
+ // refs so a later TelePress/TelePost phase can render the Telegraph page.
191
+ if (assets.some((a) => a.status === 'downloaded')) {
192
+ try {
193
+ const mdPath = await this.fileService.saveText(`${header}\n${(0, novelMarkers_1.renderNovelMarkdown)(text, assets)}`, fileName.replace(/\.txt$/, '.md'), metadata);
194
+ logger_1.logger.info(`Saved novel ${detail.id} rich-media markdown sidecar`, { filePath: mdPath });
195
+ }
196
+ catch (error) {
197
+ logger_1.logger.warn(`Failed to save rich-media markdown sidecar for novel ${detail.id}: ${error instanceof Error ? error.message : String(error)}`);
198
+ }
199
+ }
159
200
  const pixivMetadata = {
160
201
  pixiv_id: detail.id,
161
202
  title: detail.title,
@@ -181,6 +222,19 @@ class NovelDownloader {
181
222
  },
182
223
  }
183
224
  : {}),
225
+ ...(assets.length
226
+ ? {
227
+ assets: assets.map((a) => ({
228
+ marker: a.marker,
229
+ kind: a.kind,
230
+ sourceId: a.sourceId,
231
+ url: a.url,
232
+ localPath: a.localPath,
233
+ status: a.status,
234
+ failureReason: a.failureReason,
235
+ })),
236
+ }
237
+ : {}),
184
238
  };
185
239
  let metadataPath;
186
240
  try {
@@ -222,4 +276,18 @@ class NovelDownloader {
222
276
  }
223
277
  }
224
278
  exports.NovelDownloader = NovelDownloader;
279
+ function novelAssetFileName(asset) {
280
+ let ext = '';
281
+ try {
282
+ const pathname = new URL(asset.url).pathname;
283
+ const last = pathname.split('/').pop() || '';
284
+ const dot = last.lastIndexOf('.');
285
+ if (dot >= 0)
286
+ ext = last.slice(dot);
287
+ }
288
+ catch {
289
+ // fall through: no extension
290
+ }
291
+ return `${asset.sourceId}${ext}` || asset.sourceId;
292
+ }
225
293
  //# sourceMappingURL=NovelDownloader.js.map
@@ -0,0 +1,62 @@
1
+ import type { PixivNovelTextResponse } from '@redtidev/pixiv-client';
2
+ /**
3
+ * Single-pass novel text tokenizer, ported from PixEz
4
+ * (Notsfsssf/pixez-flutter lib/page/novel/viewer/image_text.dart,
5
+ * NovelSpansGenerator.buildSpans). Same endpoint + same extraction path as
6
+ * PixivFlow's webview fallback; keeps the `[[...]]` double-bracket close rule so
7
+ * URLs/etc. inside jumpuri/ruby markers are not truncated early.
8
+ */
9
+ export type NovelMarker = {
10
+ type: 'text';
11
+ value: string;
12
+ } | {
13
+ type: 'newpage';
14
+ raw: string;
15
+ } | {
16
+ type: 'chapter';
17
+ raw: string;
18
+ title: string;
19
+ } | {
20
+ type: 'pixivimage';
21
+ raw: string;
22
+ key: string;
23
+ } | {
24
+ type: 'uploadedimage';
25
+ raw: string;
26
+ key: string;
27
+ } | {
28
+ type: 'jumpuri';
29
+ raw: string;
30
+ url?: string;
31
+ } | {
32
+ type: 'ruby';
33
+ raw: string;
34
+ reading: string;
35
+ };
36
+ export interface NovelAsset {
37
+ marker: string;
38
+ kind: 'uploadedimage' | 'pixivimage';
39
+ sourceId: string;
40
+ url?: string;
41
+ localPath?: string;
42
+ status: 'pending' | 'downloaded' | 'failed' | 'unavailable';
43
+ failureReason?: string;
44
+ }
45
+ export declare function scanNovelMarkers(source: string): NovelMarker[];
46
+ /**
47
+ * Build the ordered set of inline image assets referenced by the novel text.
48
+ * `unavailable` = the source is missing in the webview payload (deleted/no
49
+ * permission) so it will never succeed; `pending` = resolvable + downloadable.
50
+ */
51
+ export declare function extractNovelAssets(text: string, response?: Pick<PixivNovelTextResponse, 'images' | 'illusts'>): NovelAsset[];
52
+ /** Minimal self-check for the scanner's double-bracket handling. */
53
+ export declare function demo(): void;
54
+ /**
55
+ * Rich-media Markdown sidecar (RFC 1 Phase 2). Rebuilds the novel body with
56
+ * each downloaded inline resource as a relative `![](images/xxx.jpg)` reference
57
+ * (the `.txt` file remains the authoritative/compat format and its path is
58
+ * unchanged). Markers whose asset is `unavailable`/`failed` are left in the
59
+ * original text so nothing is silently dropped (partial success).
60
+ */
61
+ export declare function renderNovelMarkdown(source: string, assets: NovelAsset[]): string;
62
+ //# sourceMappingURL=novelMarkers.d.ts.map
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scanNovelMarkers = scanNovelMarkers;
4
+ exports.extractNovelAssets = extractNovelAssets;
5
+ exports.demo = demo;
6
+ exports.renderNovelMarkdown = renderNovelMarkdown;
7
+ const node_path_1 = require("node:path");
8
+ const linkRegex = /https?:\/\/\S+/;
9
+ function parseMarker(span) {
10
+ if (span.startsWith('[newpage]'))
11
+ return { type: 'newpage', raw: span };
12
+ if (span.startsWith('[chapter:')) {
13
+ return { type: 'chapter', raw: span, title: span.slice('[chapter:'.length, -1) };
14
+ }
15
+ if (span.startsWith('[pixivimage:')) {
16
+ return { type: 'pixivimage', raw: span, key: span.slice('[pixivimage:'.length, -1) };
17
+ }
18
+ if (span.startsWith('[uploadedimage:')) {
19
+ return { type: 'uploadedimage', raw: span, key: span.slice('[uploadedimage:'.length, -1) };
20
+ }
21
+ if (span.startsWith('[[jumpuri:')) {
22
+ const body = span.slice('[[jumpuri:'.length, span.endsWith(']]') ? -2 : -1);
23
+ return { type: 'jumpuri', raw: span, url: body.match(linkRegex)?.[0] };
24
+ }
25
+ if (span.startsWith('[[rb:')) {
26
+ const reading = span.slice('[[rb:'.length, span.endsWith(']]') ? -2 : -1);
27
+ return { type: 'ruby', raw: span, reading };
28
+ }
29
+ return { type: 'text', value: span };
30
+ }
31
+ function scanNovelMarkers(source) {
32
+ const result = [];
33
+ let now = '';
34
+ for (const ch of source) {
35
+ if (ch === '[') {
36
+ if (!now) {
37
+ now = ch;
38
+ }
39
+ else if (now === '[') {
40
+ now += ch;
41
+ }
42
+ else {
43
+ result.push(parseMarker(now));
44
+ now = ch;
45
+ }
46
+ }
47
+ else if (ch === ']') {
48
+ if (now.startsWith('[[')) {
49
+ if (now.endsWith(']')) {
50
+ now += ch;
51
+ result.push(parseMarker(now));
52
+ now = '';
53
+ }
54
+ else {
55
+ now += ch;
56
+ }
57
+ }
58
+ else {
59
+ now += ch;
60
+ result.push(parseMarker(now));
61
+ now = '';
62
+ }
63
+ }
64
+ else {
65
+ now += ch;
66
+ }
67
+ }
68
+ if (now)
69
+ result.push(parseMarker(now));
70
+ return result;
71
+ }
72
+ function uploadedImageUrl(img) {
73
+ if (!img?.urls)
74
+ return undefined;
75
+ return img.urls.original ?? img.urls.the1200X1200 ?? img.urls.the480Mw ?? img.urls.the240Mw ?? img.urls.the128X128;
76
+ }
77
+ function illustImageUrl(ref) {
78
+ if (!ref?.illust?.images)
79
+ return undefined;
80
+ return ref.illust.images.original ?? ref.illust.images.medium ?? ref.illust.images.small;
81
+ }
82
+ /**
83
+ * Build the ordered set of inline image assets referenced by the novel text.
84
+ * `unavailable` = the source is missing in the webview payload (deleted/no
85
+ * permission) so it will never succeed; `pending` = resolvable + downloadable.
86
+ */
87
+ function extractNovelAssets(text, response) {
88
+ const assets = [];
89
+ for (const marker of scanNovelMarkers(text)) {
90
+ if (marker.type === 'uploadedimage') {
91
+ const url = uploadedImageUrl(response?.images?.[marker.key]);
92
+ assets.push({
93
+ marker: marker.raw,
94
+ kind: 'uploadedimage',
95
+ sourceId: marker.key,
96
+ url,
97
+ status: url ? 'pending' : 'unavailable',
98
+ });
99
+ }
100
+ else if (marker.type === 'pixivimage') {
101
+ const url = illustImageUrl(response?.illusts?.[marker.key]);
102
+ assets.push({
103
+ marker: marker.raw,
104
+ kind: 'pixivimage',
105
+ sourceId: marker.key,
106
+ url,
107
+ status: url ? 'pending' : 'unavailable',
108
+ });
109
+ }
110
+ }
111
+ return assets;
112
+ }
113
+ /** Minimal self-check for the scanner's double-bracket handling. */
114
+ function demo() {
115
+ const { assert } = require('node:assert');
116
+ for (const s of [
117
+ 'before [uploadedimage:11] after',
118
+ '[[jumpuri:Title > https://example.com/a]] tail',
119
+ 'mixed [pixivimage:12551-1] and [[rb:漢字>かな]] done',
120
+ ]) {
121
+ assert(Array.isArray(scanNovelMarkers(s)) && scanNovelMarkers(s).length > 0, 'markers parsed');
122
+ }
123
+ }
124
+ /**
125
+ * Rich-media Markdown sidecar (RFC 1 Phase 2). Rebuilds the novel body with
126
+ * each downloaded inline resource as a relative `![](images/xxx.jpg)` reference
127
+ * (the `.txt` file remains the authoritative/compat format and its path is
128
+ * unchanged). Markers whose asset is `unavailable`/`failed` are left in the
129
+ * original text so nothing is silently dropped (partial success).
130
+ */
131
+ function renderNovelMarkdown(source, assets) {
132
+ const downloaded = new Map(assets
133
+ .filter((a) => a.status === 'downloaded' && Boolean(a.localPath))
134
+ .map((a) => [a.marker, a]));
135
+ return scanNovelMarkers(source)
136
+ .map((marker) => {
137
+ if (marker.type === 'text')
138
+ return marker.value;
139
+ const asset = downloaded.get(marker.raw);
140
+ return asset ? `![](images/${(0, node_path_1.basename)(asset.localPath)})` : marker.raw;
141
+ })
142
+ .join('');
143
+ }
144
+ //# sourceMappingURL=novelMarkers.js.map
@@ -16,6 +16,10 @@ export interface IFileService {
16
16
  * Save text file (novel)
17
17
  */
18
18
  saveText(content: string, fileName: string, metadata?: FileMetadata): Promise<string>;
19
+ /**
20
+ * Save a binary asset into an explicit directory (e.g. novel inline images).
21
+ */
22
+ saveBinary(buffer: ArrayBuffer, fileName: string, directory: string): Promise<string>;
19
23
  /**
20
24
  * Sanitize file name
21
25
  */
@@ -50,12 +50,18 @@ class NotificationPolicy {
50
50
  };
51
51
  noteOutcome(slotId, slot, schedule, target, outcome) {
52
52
  const name = this.targetName(target);
53
- if (!name)
53
+ if (!name) {
54
+ logger_1.logger.debug('Notification skipped: target has no delivery target name', {
55
+ targetId: target.id ?? target.filterTag ?? target.tag ?? target.type,
56
+ });
54
57
  return;
58
+ }
55
59
  // No notifiable endpoint configured: drop the notification instead of
56
60
  // enqueuing it against a submission target that will reject it forever.
57
- if (!this.notifiableTargets().has(name))
61
+ if (!this.notifiableTargets().has(name)) {
62
+ logger_1.logger.debug(`Notification skipped for ${name}: no notifiable endpoint configured`, { targetName: name });
58
63
  return;
64
+ }
59
65
  const label = target.id || target.filterTag || target.tag || target.type;
60
66
  if (outcome.kind === 'no_candidate' && target.noMatchPolicy?.notify === true) {
61
67
  this.send(name, NotificationPolicy.keys.noMatch(slotId, target.id ?? label), [
@@ -77,8 +83,16 @@ class NotificationPolicy {
77
83
  }
78
84
  /** One consolidated summary per slot, delivered to every notifying target's endpoint. */
79
85
  sendSlotSummary(slot, schedule, rows) {
80
- if (slot.manualRequestId || rows.length === 0 || rows.some((r) => !['submitted', 'no_candidate', 'duplicate', 'failed'].includes(r.status)))
86
+ if (slot.manualRequestId || rows.length === 0)
81
87
  return;
88
+ const nonSummaryRows = rows.filter((r) => !['submitted', 'no_candidate', 'duplicate', 'failed'].includes(r.status));
89
+ if (nonSummaryRows.length) {
90
+ logger_1.logger.warn(`Slot summary skipped: ${nonSummaryRows.length} row(s) with non-summarizable status`, {
91
+ slotId: slot.slotId,
92
+ targets: nonSummaryRows.map((r) => ({ targetId: r.targetId, status: r.status })),
93
+ });
94
+ return;
95
+ }
82
96
  const memberIds = new Set(rows.map((r) => r.targetId));
83
97
  const targets = this.targetsWithUrl('scheduleOutcomeUrl', memberIds);
84
98
  if (targets.size === 0)
@@ -174,8 +188,7 @@ class NotificationPolicy {
174
188
  }
175
189
  catch (error) {
176
190
  // Durable enqueue failure must not unwind the content run.
177
- // eslint-disable-next-line no-console
178
- console.warn('notification enqueue failed', { targetName, key, error: error.message });
191
+ logger_1.logger.warn('notification enqueue failed', { targetName, key, error: error.message });
179
192
  }
180
193
  }
181
194
  /**
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow",
4
- "version": "2.23.0",
4
+ "version": "2.25.0",
5
5
  "private": true
6
6
  }
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BUILD = void 0;
4
4
  // GENERATED by scripts/write-version.js — do not edit manually.
5
- exports.BUILD = { version: '2.23.0', commit: 'f664f8cc1c6a' };
5
+ exports.BUILD = { version: '2.25.0', commit: '532ba3534889' };
6
6
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow-webui-backend",
4
- "version": "2.23.0",
4
+ "version": "2.25.0",
5
5
  "description": "PixivFlow WebUI Backend - CommonJS module"
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"novels.d.ts","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAa,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAKvH,iFAAiF;AACjF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,kCAAkC;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAiBxG,gEAAgE;IAC1D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAavE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBxH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAajF,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBnI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAapF,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAuBzG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAanE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6B/E;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA8D/H,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"novels.d.ts","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAa,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAiBvH,iFAAiF;AACjF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,kCAAkC;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAiBxG,gEAAgE;IAC1D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAavE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBxH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAajF,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBnI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAapF,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAuBzG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAanE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6B/E;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4E/H,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAGlB"}
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NovelsApi = void 0;
4
4
  const errors_1 = require("../errors/errors");
5
5
  const BROWSER_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36';
6
+ function isRecord(v) {
7
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
8
+ }
6
9
  /** Novel endpoints of the Pixiv public App API (+ required webview fallback). */
7
10
  class NovelsApi {
8
11
  transport;
@@ -186,8 +189,21 @@ class NovelsApi {
186
189
  if (end !== -1) {
187
190
  const parsed = JSON.parse(html.slice(from, end));
188
191
  const text = this.nonEmptyText(parsed?.text);
189
- if (text)
190
- return { novel_text: text };
192
+ if (text) {
193
+ return {
194
+ novel_text: text,
195
+ coverUrl: typeof parsed.coverUrl === 'string' ? parsed.coverUrl : undefined,
196
+ seriesNavigation: isRecord(parsed.seriesNavigation)
197
+ ? parsed.seriesNavigation
198
+ : undefined,
199
+ images: isRecord(parsed.images)
200
+ ? parsed.images
201
+ : undefined,
202
+ illusts: isRecord(parsed.illusts)
203
+ ? parsed.illusts
204
+ : undefined,
205
+ };
206
+ }
191
207
  }
192
208
  }
193
209
  failures.push('webview returned no non-empty novel text');
@@ -1 +1 @@
1
- {"version":3,"file":"novels.js","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novels.js","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export type { TransportConfig } from './transport/transport';
16
16
  export { paginate, firstPage } from './pagination';
17
17
  export { IllustrationsApi, NovelsApi, TagsApi, MediaApi, UsersApi, } from './app-api/exports';
18
18
  export type { IllustSearchOptions, NovelSearchOptions, RankingOptions, UserWorksOptions, IllustRankingMode, NovelRankingMode, SearchSort, SearchTarget, OnePageResult, } from './app-api/options';
19
- export type { PixivUser, PixivTag, PixivIllust, PixivIllustPage, PixivNovel, PixivNovelTextResponse, UgoiraFrame, UgoiraMetadata, Paginated, PixivListResponse, } from './models';
19
+ export type { PixivUser, PixivTag, PixivIllust, PixivIllustPage, PixivNovel, PixivNovelTextResponse, PixivNovelUploadedImage, PixivNovelIllustRef, NovelSeriesNavItem, UgoiraFrame, UgoiraMetadata, Paginated, PixivListResponse, } from './models';
20
20
  export type { PixivClientOptions, ProxyOptions, RateLimitOptions, RateLimitState, RateLimitStateStore, RateLimitStatus, RequestOptions, PaginationOptions, KitEvent, KitEventListener, FetchLike, ResponseLike, } from './types';
21
21
  export { silentLogger } from './logger';
22
22
  export type { KitLogger } from './logger';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAA0D;AAAjD,qGAAA,WAAW,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAGvC,sCAAkE;AAAzD,4GAAA,mBAAmB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAG3C,4DAKoC;AAJlC,8GAAA,aAAa,OAAA;AACb,0HAAA,yBAAyB,OAAA;AACzB,mHAAA,kBAAkB,OAAA;AAClB,gHAAA,eAAe,OAAA;AAEjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAElB,2CAAmD;AAA1C,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE5B,6CAM2B;AALzB,2GAAA,gBAAgB,OAAA;AAChB,oGAAA,SAAS,OAAA;AACT,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AA0CV,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAGrB,0CAcyB;AAbvB,oGAAA,UAAU,OAAA;AACV,wGAAA,cAAc,OAAA;AACd,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,0GAAA,gBAAgB,OAAA;AAChB,+GAAA,qBAAqB,OAAA;AACrB,yGAAA,eAAe,OAAA;AACf,uGAAA,aAAa,OAAA;AACb,sGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAA0D;AAAjD,qGAAA,WAAW,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAGvC,sCAAkE;AAAzD,4GAAA,mBAAmB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAG3C,4DAKoC;AAJlC,8GAAA,aAAa,OAAA;AACb,0HAAA,yBAAyB,OAAA;AACzB,mHAAA,kBAAkB,OAAA;AAClB,gHAAA,eAAe,OAAA;AAEjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAElB,2CAAmD;AAA1C,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE5B,6CAM2B;AALzB,2GAAA,gBAAgB,OAAA;AAChB,oGAAA,SAAS,OAAA;AACT,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AA6CV,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAGrB,0CAcyB;AAbvB,oGAAA,UAAU,OAAA;AACV,wGAAA,cAAc,OAAA;AACd,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,0GAAA,gBAAgB,OAAA;AAChB,+GAAA,qBAAqB,OAAA;AACrB,yGAAA,eAAe,OAAA;AACf,uGAAA,aAAa,OAAA;AACb,sGAAA,YAAY,OAAA"}
@@ -80,12 +80,48 @@ export interface PixivNovel {
80
80
  }
81
81
  export interface PixivNovelTextResponse {
82
82
  novel_text: string;
83
- /**
84
- * Marker/next-url style fields are endpoint-specific; the webview fallback
85
- * parses only the text. Hosts should not rely on other fields.
86
- */
83
+ /** Cover thumbnail URL (webview v2 novel: block). */
84
+ coverUrl?: string;
85
+ /** Previous/next series navigation (webview v2 novel: block). */
86
+ seriesNavigation?: {
87
+ nextNovel?: NovelSeriesNavItem;
88
+ prevNovel?: NovelSeriesNavItem;
89
+ };
90
+ /** Uploaded inline images, keyed by `[uploadedimage:KEY]` marker id. */
91
+ images?: Record<string, PixivNovelUploadedImage>;
92
+ /** Referenced published illusts, keyed by `[pixivimage:KEY]` marker id; null = deleted/no permission. */
93
+ illusts?: Record<string, PixivNovelIllustRef | null>;
94
+ /** Other endpoint-specific fields (v1/webaudio fallbacks); hosts must not depend on them. */
87
95
  [key: string]: unknown;
88
96
  }
97
+ /** Author-uploaded inline image in the webview v2 novel: block. */
98
+ export interface PixivNovelUploadedImage {
99
+ novelImageId?: string;
100
+ urls: {
101
+ the128X128?: string;
102
+ the240Mw?: string;
103
+ the480Mw?: string;
104
+ the1200X1200?: string;
105
+ original?: string;
106
+ [k: string]: string | undefined;
107
+ };
108
+ }
109
+ /** Referenced published illust (webview v2 novel: block). */
110
+ export interface PixivNovelIllustRef {
111
+ illust: {
112
+ images: {
113
+ small?: string;
114
+ medium?: string;
115
+ original?: string;
116
+ };
117
+ };
118
+ }
119
+ export interface NovelSeriesNavItem {
120
+ id: number;
121
+ viewable: boolean;
122
+ title?: string;
123
+ coverUrl?: string;
124
+ }
89
125
  export interface UgoiraFrame {
90
126
  file: string;
91
127
  delay: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,18 @@ import type { NovelRankingMode, NovelSearchOptions, OnePageResult, RankingOption
6
6
  const BROWSER_UA =
7
7
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36';
8
8
 
9
+ type WebviewNovelJson = {
10
+ text?: unknown;
11
+ coverUrl?: unknown;
12
+ seriesNavigation?: unknown;
13
+ images?: unknown;
14
+ illusts?: unknown;
15
+ };
16
+
17
+ function isRecord(v: unknown): v is Record<string, unknown> {
18
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
19
+ }
20
+
9
21
  /** Novel endpoints of the Pixiv public App API (+ required webview fallback). */
10
22
  export class NovelsApi {
11
23
  constructor(private readonly transport: Transport) {}
@@ -201,9 +213,23 @@ export class NovelsApi {
201
213
  const from = start + marker.length;
202
214
  const end = html.indexOf(',\n', from);
203
215
  if (end !== -1) {
204
- const parsed = JSON.parse(html.slice(from, end)) as { text?: unknown };
216
+ const parsed = JSON.parse(html.slice(from, end)) as WebviewNovelJson;
205
217
  const text = this.nonEmptyText(parsed?.text);
206
- if (text) return { novel_text: text };
218
+ if (text) {
219
+ return {
220
+ novel_text: text,
221
+ coverUrl: typeof parsed.coverUrl === 'string' ? parsed.coverUrl : undefined,
222
+ seriesNavigation: isRecord(parsed.seriesNavigation)
223
+ ? parsed.seriesNavigation as PixivNovelTextResponse['seriesNavigation']
224
+ : undefined,
225
+ images: isRecord(parsed.images)
226
+ ? parsed.images as PixivNovelTextResponse['images']
227
+ : undefined,
228
+ illusts: isRecord(parsed.illusts)
229
+ ? parsed.illusts as PixivNovelTextResponse['illusts']
230
+ : undefined,
231
+ };
232
+ }
207
233
  }
208
234
  }
209
235
  failures.push('webview returned no non-empty novel text');
@@ -50,6 +50,9 @@ export type {
50
50
  PixivIllustPage,
51
51
  PixivNovel,
52
52
  PixivNovelTextResponse,
53
+ PixivNovelUploadedImage,
54
+ PixivNovelIllustRef,
55
+ NovelSeriesNavItem,
53
56
  UgoiraFrame,
54
57
  UgoiraMetadata,
55
58
  Paginated,
@@ -85,13 +85,43 @@ export interface PixivNovel {
85
85
 
86
86
  export interface PixivNovelTextResponse {
87
87
  novel_text: string;
88
- /**
89
- * Marker/next-url style fields are endpoint-specific; the webview fallback
90
- * parses only the text. Hosts should not rely on other fields.
91
- */
88
+ /** Cover thumbnail URL (webview v2 novel: block). */
89
+ coverUrl?: string;
90
+ /** Previous/next series navigation (webview v2 novel: block). */
91
+ seriesNavigation?: { nextNovel?: NovelSeriesNavItem; prevNovel?: NovelSeriesNavItem };
92
+ /** Uploaded inline images, keyed by `[uploadedimage:KEY]` marker id. */
93
+ images?: Record<string, PixivNovelUploadedImage>;
94
+ /** Referenced published illusts, keyed by `[pixivimage:KEY]` marker id; null = deleted/no permission. */
95
+ illusts?: Record<string, PixivNovelIllustRef | null>;
96
+ /** Other endpoint-specific fields (v1/webaudio fallbacks); hosts must not depend on them. */
92
97
  [key: string]: unknown;
93
98
  }
94
99
 
100
+ /** Author-uploaded inline image in the webview v2 novel: block. */
101
+ export interface PixivNovelUploadedImage {
102
+ novelImageId?: string;
103
+ urls: {
104
+ the128X128?: string;
105
+ the240Mw?: string;
106
+ the480Mw?: string;
107
+ the1200X1200?: string;
108
+ original?: string;
109
+ [k: string]: string | undefined;
110
+ };
111
+ }
112
+
113
+ /** Referenced published illust (webview v2 novel: block). */
114
+ export interface PixivNovelIllustRef {
115
+ illust: { images: { small?: string; medium?: string; original?: string } };
116
+ }
117
+
118
+ export interface NovelSeriesNavItem {
119
+ id: number;
120
+ viewable: boolean;
121
+ title?: string;
122
+ coverUrl?: string;
123
+ }
124
+
95
125
  export interface UgoiraFrame {
96
126
  file: string;
97
127
  delay: number;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pixivflow",
3
- "version": "2.23.0",
4
- "description": "🎨 Pixiv 下载、筛选与自动收集工具 - 批量下载插画和小说、按标签/热度/日期筛选、定时任务与可靠 HTTP 交付 | Pixiv downloader and automation toolkit with filtering, scheduling and reliable HTTP delivery",
3
+ "version": "2.25.0",
4
+ "description": "\ud83c\udfa8 Pixiv \u4e0b\u8f7d\u3001\u7b5b\u9009\u4e0e\u81ea\u52a8\u6536\u96c6\u5de5\u5177 - \u6279\u91cf\u4e0b\u8f7d\u63d2\u753b\u548c\u5c0f\u8bf4\u3001\u6309\u6807\u7b7e/\u70ed\u5ea6/\u65e5\u671f\u7b5b\u9009\u3001\u5b9a\u65f6\u4efb\u52a1\u4e0e\u53ef\u9760 HTTP \u4ea4\u4ed8 | Pixiv downloader and automation toolkit with filtering, scheduling and reliable HTTP delivery",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/redtidev1918/PixivFlow.git"