@blinkdotnew/sdk 0.18.8 → 0.19.1
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.
- package/README.md +93 -9
- package/dist/index.d.mts +154 -10
- package/dist/index.d.ts +154 -10
- package/dist/index.js +220 -38
- package/dist/index.mjs +212 -39
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -145,15 +145,16 @@ const { publicUrl } = await blink.storage.upload(
|
|
|
145
145
|
This SDK powers every Blink-generated app with:
|
|
146
146
|
|
|
147
147
|
- **🔐 Authentication**: Flexible auth system with managed (redirect) and headless (custom UI) modes, email/password, social providers (Google, GitHub, Apple, Microsoft), magic links, RBAC, and custom email branding
|
|
148
|
-
- **🗄️ Database**: PostgREST-compatible CRUD operations with advanced filtering
|
|
149
|
-
- **🤖 AI**:
|
|
148
|
+
- **🗄️ Database**: PostgREST-compatible CRUD operations with advanced filtering
|
|
149
|
+
- **🤖 AI**: Multi-model image generation & editing (10 models), text generation with web search, object generation, speech synthesis, and transcription
|
|
150
150
|
- **📄 Data**: Extract text content from documents, secure API proxy with secret substitution, web scraping, screenshots, and web search
|
|
151
151
|
- **📁 Storage**: File upload, download, and management
|
|
152
152
|
- **📧 Notifications**: Email sending with attachments, custom branding, and delivery tracking
|
|
153
153
|
- **⚡ Realtime**: WebSocket-based pub/sub messaging, presence tracking, and live updates
|
|
154
154
|
- **📊 Analytics**: Automatic pageview tracking, custom event logging, session management, and privacy-first design
|
|
155
155
|
- **🌐 Universal**: Works on client-side and server-side
|
|
156
|
-
- **📱 Framework Agnostic**: React, Vue, Svelte, vanilla JS, Node.js, Deno
|
|
156
|
+
- **📱 Framework Agnostic**: React, Vue, Svelte, vanilla JS, Node.js, Deno, **React Native**
|
|
157
|
+
- **📱 React Native**: First-class mobile support with AsyncStorage integration and platform-aware features
|
|
157
158
|
- **🔄 Real-time**: Built-in auth state management and token refresh
|
|
158
159
|
- **⚡ Zero Boilerplate**: Everything works out of the box
|
|
159
160
|
|
|
@@ -190,6 +191,52 @@ const blink = createClient({
|
|
|
190
191
|
// Token injection is only needed when calling blink.auth.* methods on the server
|
|
191
192
|
```
|
|
192
193
|
|
|
194
|
+
### 📱 React Native (iOS & Android)
|
|
195
|
+
|
|
196
|
+
The SDK has **first-class React Native support** with platform-aware features that automatically adapt to mobile environments.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npm install @blinkdotnew/sdk @react-native-async-storage/async-storage
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
import { createClient, AsyncStorageAdapter } from '@blinkdotnew/sdk'
|
|
204
|
+
import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
205
|
+
|
|
206
|
+
const blink = createClient({
|
|
207
|
+
projectId: 'your-project-id',
|
|
208
|
+
authRequired: false,
|
|
209
|
+
// Use AsyncStorage for secure token persistence on mobile
|
|
210
|
+
storage: new AsyncStorageAdapter(AsyncStorage)
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
// All features work seamlessly in React Native!
|
|
214
|
+
const { data } = await blink.ai.generateImage({
|
|
215
|
+
prompt: 'A beautiful sunset over mountains',
|
|
216
|
+
n: 1
|
|
217
|
+
})
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Platform-Aware Features:**
|
|
221
|
+
- ✅ **AsyncStorage integration** for secure token persistence
|
|
222
|
+
- ✅ **Automatic platform detection** - skips browser-only features (analytics tracking, cross-tab sync)
|
|
223
|
+
- ✅ **No polyfills needed** - works out of the box
|
|
224
|
+
- ✅ **Optimized for mobile** - reduced memory footprint
|
|
225
|
+
|
|
226
|
+
**Configuration Options:**
|
|
227
|
+
```typescript
|
|
228
|
+
// With AsyncStorage (recommended for token persistence)
|
|
229
|
+
const blink = createClient({
|
|
230
|
+
projectId: 'your-project-id',
|
|
231
|
+
storage: new AsyncStorageAdapter(AsyncStorage)
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
// Without persistence (tokens in memory only)
|
|
235
|
+
const blink = createClient({
|
|
236
|
+
projectId: 'your-project-id'
|
|
237
|
+
})
|
|
238
|
+
```
|
|
239
|
+
|
|
193
240
|
## 📖 API Reference
|
|
194
241
|
|
|
195
242
|
### Authentication
|
|
@@ -661,29 +708,56 @@ const { object: todoList } = await blink.ai.generateObject({
|
|
|
661
708
|
// })
|
|
662
709
|
// Error: "schema must be a JSON Schema of 'type: \"object\"', got 'type: \"array\"'"
|
|
663
710
|
|
|
664
|
-
// Generate and modify images with AI
|
|
665
|
-
// 🔥
|
|
711
|
+
// Generate and modify images with AI - Multi-Model Support (10 models available)
|
|
712
|
+
// 🔥 Choose between fast generation or high-quality results
|
|
666
713
|
// 🎨 For style transfer: provide ALL images in the images array, don't reference URLs in prompts
|
|
667
714
|
|
|
668
|
-
// Basic image generation
|
|
715
|
+
// Basic image generation (uses default fast model: fal-ai/nano-banana)
|
|
669
716
|
const { data } = await blink.ai.generateImage({
|
|
670
717
|
prompt: 'A serene landscape with mountains and a lake at sunset'
|
|
671
718
|
})
|
|
672
719
|
console.log('Image URL:', data[0].url)
|
|
673
720
|
|
|
674
|
-
//
|
|
721
|
+
// High-quality generation with Pro model
|
|
722
|
+
const { data: proImage } = await blink.ai.generateImage({
|
|
723
|
+
prompt: 'A detailed infographic about AI with charts and diagrams',
|
|
724
|
+
model: 'fal-ai/nano-banana-pro', // High quality model
|
|
725
|
+
n: 1,
|
|
726
|
+
size: '1792x1024' // Custom size
|
|
727
|
+
})
|
|
728
|
+
|
|
729
|
+
// Generate multiple variations
|
|
675
730
|
const { data } = await blink.ai.generateImage({
|
|
676
731
|
prompt: 'A futuristic robot in different poses',
|
|
732
|
+
model: 'fal-ai/nano-banana', // Fast model
|
|
677
733
|
n: 3
|
|
678
734
|
})
|
|
679
735
|
data.forEach((img, i) => console.log(`Image ${i+1}:`, img.url))
|
|
680
736
|
|
|
681
|
-
|
|
737
|
+
**Available Models for Text-to-Image:**
|
|
738
|
+
|
|
739
|
+
| Model | Speed | Quality | Best For |
|
|
740
|
+
|-------|-------|---------|----------|
|
|
741
|
+
| `fal-ai/nano-banana` (default) | ⚡ Fast | Good | Prototypes, high-volume generation |
|
|
742
|
+
| `fal-ai/nano-banana-pro` | Standard | ⭐ Excellent | Marketing materials, high-fidelity visuals |
|
|
743
|
+
| `fal-ai/gemini-25-flash-image` | ⚡ Fast | Good | Alias for `nano-banana` |
|
|
744
|
+
| `fal-ai/gemini-3-pro-image-preview` | Standard | ⭐ Excellent | Alias for `nano-banana-pro` |
|
|
745
|
+
| `gemini-2.5-flash-image-preview` | ⚡ Fast | Good | Legacy - Direct Gemini API |
|
|
746
|
+
| `gemini-3-pro-image-preview` | Standard | ⭐ Excellent | Legacy - Direct Gemini API |
|
|
747
|
+
|
|
748
|
+
// Image editing - transform existing images with prompts (uses default fast model)
|
|
682
749
|
const { data: headshots } = await blink.ai.modifyImage({
|
|
683
|
-
images: ['https://storage.example.com/user-photo.jpg'], // Up to
|
|
750
|
+
images: ['https://storage.example.com/user-photo.jpg'], // Up to 16 images supported!
|
|
684
751
|
prompt: 'Transform into professional business headshot with studio lighting'
|
|
685
752
|
})
|
|
686
753
|
|
|
754
|
+
// High-quality editing with Pro model
|
|
755
|
+
const { data: proEdited } = await blink.ai.modifyImage({
|
|
756
|
+
images: ['https://storage.example.com/portrait.jpg'],
|
|
757
|
+
prompt: 'Add a majestic ancient tree in the background with glowing leaves',
|
|
758
|
+
model: 'fal-ai/nano-banana-pro/edit' // High quality editing
|
|
759
|
+
})
|
|
760
|
+
|
|
687
761
|
// Advanced image editing with multiple input images
|
|
688
762
|
const { data } = await blink.ai.modifyImage({
|
|
689
763
|
images: [
|
|
@@ -692,9 +766,19 @@ const { data } = await blink.ai.modifyImage({
|
|
|
692
766
|
'https://storage.example.com/photo3.jpg'
|
|
693
767
|
],
|
|
694
768
|
prompt: 'Combine these architectural styles into a futuristic building design',
|
|
769
|
+
model: 'fal-ai/nano-banana/edit', // Fast editing
|
|
695
770
|
n: 2
|
|
696
771
|
})
|
|
697
772
|
|
|
773
|
+
**Available Models for Image Editing:**
|
|
774
|
+
|
|
775
|
+
| Model | Speed | Quality | Best For |
|
|
776
|
+
|-------|-------|---------|----------|
|
|
777
|
+
| `fal-ai/nano-banana/edit` (default) | ⚡ Fast | Good | Quick adjustments, style transfers |
|
|
778
|
+
| `fal-ai/nano-banana-pro/edit` | Standard | ⭐ Excellent | Detailed retouching, complex edits |
|
|
779
|
+
| `fal-ai/gemini-25-flash-image/edit` | ⚡ Fast | Good | Alias for `nano-banana/edit` |
|
|
780
|
+
| `fal-ai/gemini-3-pro-image-preview/edit` | Standard | ⭐ Excellent | Alias for `nano-banana-pro/edit` |
|
|
781
|
+
|
|
698
782
|
// 🎨 Style Transfer & Feature Application
|
|
699
783
|
// ⚠️ IMPORTANT: When applying styles/features from one image to another,
|
|
700
784
|
// provide ALL images in the array - don't reference images in the prompt text
|
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage adapter for cross-platform compatibility
|
|
3
|
+
* Allows using AsyncStorage on React Native and localStorage on web
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Storage adapter interface
|
|
7
|
+
* Supports both synchronous (web localStorage) and asynchronous (React Native AsyncStorage) implementations
|
|
8
|
+
*/
|
|
9
|
+
interface StorageAdapter {
|
|
10
|
+
getItem(key: string): Promise<string | null> | string | null;
|
|
11
|
+
setItem(key: string, value: string): Promise<void> | void;
|
|
12
|
+
removeItem(key: string): Promise<void> | void;
|
|
13
|
+
clear(): Promise<void> | void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Web localStorage adapter (synchronous)
|
|
17
|
+
* Used automatically on web browsers
|
|
18
|
+
*/
|
|
19
|
+
declare class WebStorageAdapter implements StorageAdapter {
|
|
20
|
+
getItem(key: string): string | null;
|
|
21
|
+
setItem(key: string, value: string): void;
|
|
22
|
+
removeItem(key: string): void;
|
|
23
|
+
clear(): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Async storage adapter wrapper (for React Native AsyncStorage)
|
|
27
|
+
* Usage:
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
30
|
+
* const storage = new AsyncStorageAdapter(AsyncStorage)
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare class AsyncStorageAdapter implements StorageAdapter {
|
|
34
|
+
private asyncStorage;
|
|
35
|
+
constructor(asyncStorage: any);
|
|
36
|
+
getItem(key: string): Promise<string | null>;
|
|
37
|
+
setItem(key: string, value: string): Promise<void>;
|
|
38
|
+
removeItem(key: string): Promise<void>;
|
|
39
|
+
clear(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* No-op storage adapter (for server-side or when storage is disabled)
|
|
43
|
+
* Used automatically on Node.js or when no storage is available
|
|
44
|
+
*/
|
|
45
|
+
declare class NoOpStorageAdapter implements StorageAdapter {
|
|
46
|
+
getItem(_key: string): null;
|
|
47
|
+
setItem(_key: string, _value: string): void;
|
|
48
|
+
removeItem(_key: string): void;
|
|
49
|
+
clear(): void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get default storage adapter based on platform
|
|
53
|
+
*/
|
|
54
|
+
declare function getDefaultStorageAdapter(): StorageAdapter;
|
|
55
|
+
|
|
1
56
|
/**
|
|
2
57
|
* Core type definitions for Blink SDK
|
|
3
58
|
*/
|
|
59
|
+
|
|
4
60
|
interface BlinkClientConfig {
|
|
5
61
|
projectId: string;
|
|
6
62
|
authRequired?: boolean;
|
|
7
63
|
auth?: BlinkAuthConfig;
|
|
64
|
+
/**
|
|
65
|
+
* Storage adapter for cross-platform token persistence
|
|
66
|
+
*
|
|
67
|
+
* Web: Uses localStorage by default
|
|
68
|
+
* React Native: Pass AsyncStorageAdapter(AsyncStorage)
|
|
69
|
+
* Node.js: Uses NoOpStorageAdapter by default
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* // React Native
|
|
73
|
+
* import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
74
|
+
* import { AsyncStorageAdapter } from '@blinkdotnew/sdk'
|
|
75
|
+
*
|
|
76
|
+
* const blink = createClient({
|
|
77
|
+
* projectId: 'your-project',
|
|
78
|
+
* storage: new AsyncStorageAdapter(AsyncStorage)
|
|
79
|
+
* })
|
|
80
|
+
*/
|
|
81
|
+
storage?: StorageAdapter;
|
|
8
82
|
}
|
|
9
83
|
interface BlinkAuthConfig {
|
|
10
84
|
mode?: 'managed' | 'headless';
|
|
@@ -34,6 +108,11 @@ interface BlinkAuthConfig {
|
|
|
34
108
|
redirectUrl?: string;
|
|
35
109
|
authUrl?: string;
|
|
36
110
|
coreUrl?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Storage adapter for auth token persistence (overrides global storage)
|
|
113
|
+
* If not provided, uses the global storage from BlinkClientConfig
|
|
114
|
+
*/
|
|
115
|
+
storage?: StorageAdapter;
|
|
37
116
|
}
|
|
38
117
|
type AuthProvider = 'email' | 'google' | 'github' | 'apple' | 'microsoft' | 'twitter' | 'linkedin' | 'discord';
|
|
39
118
|
interface AuthOptions {
|
|
@@ -808,6 +887,23 @@ declare class HttpClient {
|
|
|
808
887
|
private parseDataStream;
|
|
809
888
|
}
|
|
810
889
|
|
|
890
|
+
/**
|
|
891
|
+
* Platform detection for cross-platform compatibility
|
|
892
|
+
* Detects whether code is running on web, React Native, or Node.js
|
|
893
|
+
*/
|
|
894
|
+
type Platform = 'web' | 'react-native' | 'node';
|
|
895
|
+
/**
|
|
896
|
+
* Current platform
|
|
897
|
+
*/
|
|
898
|
+
declare const platform: Platform;
|
|
899
|
+
/**
|
|
900
|
+
* Platform detection helpers
|
|
901
|
+
*/
|
|
902
|
+
declare const isWeb: boolean;
|
|
903
|
+
declare const isReactNative: boolean;
|
|
904
|
+
declare const isNode: boolean;
|
|
905
|
+
declare const isBrowser: boolean;
|
|
906
|
+
|
|
811
907
|
/**
|
|
812
908
|
* Blink Auth Module - Client-side authentication management
|
|
813
909
|
* Handles token storage, user state, and authentication flows
|
|
@@ -825,6 +921,7 @@ declare class BlinkAuth {
|
|
|
825
921
|
private isIframe;
|
|
826
922
|
private initializationPromise;
|
|
827
923
|
private isInitialized;
|
|
924
|
+
private storage;
|
|
828
925
|
constructor(config: BlinkClientConfig);
|
|
829
926
|
/**
|
|
830
927
|
* Generate project-scoped storage key
|
|
@@ -1636,55 +1733,99 @@ declare class BlinkAIImpl implements BlinkAI {
|
|
|
1636
1733
|
*/
|
|
1637
1734
|
streamObject(options: ObjectGenerationRequest, onPartial: (partial: any) => void): Promise<ObjectGenerationResponse>;
|
|
1638
1735
|
/**
|
|
1639
|
-
* Generates images from text descriptions using
|
|
1736
|
+
* Generates images from text descriptions using AI image models.
|
|
1640
1737
|
*
|
|
1641
1738
|
* @param options - Object containing:
|
|
1642
1739
|
* - `prompt`: Text description of the desired image (required, up to 100k characters)
|
|
1740
|
+
* - `model`: AI model to use (optional). Available models:
|
|
1741
|
+
* **Fal.ai Models (Recommended):**
|
|
1742
|
+
* - `"fal-ai/nano-banana"` (default) - Gemini 2.5 Flash Image (Fast)
|
|
1743
|
+
* - `"fal-ai/nano-banana-pro"` - Gemini 3 Pro Image (High quality)
|
|
1744
|
+
* - `"fal-ai/gemini-25-flash-image"` - Alias for nano-banana
|
|
1745
|
+
* - `"fal-ai/gemini-3-pro-image-preview"` - Alias for nano-banana-pro
|
|
1746
|
+
* **Legacy Gemini Models:**
|
|
1747
|
+
* - `"gemini-2.5-flash-image-preview"` - Direct Gemini API
|
|
1748
|
+
* - `"gemini-3-pro-image-preview"` - Direct Gemini API
|
|
1643
1749
|
* - `n`: Number of images to generate (default: 1)
|
|
1750
|
+
* - `size`: Image dimensions (e.g., "1024x1024", "512x512")
|
|
1644
1751
|
* - Plus optional signal parameter
|
|
1645
1752
|
*
|
|
1646
1753
|
* @example
|
|
1647
1754
|
* ```ts
|
|
1648
|
-
* // Basic image generation
|
|
1755
|
+
* // Basic image generation (uses default fast model)
|
|
1649
1756
|
* const { data } = await blink.ai.generateImage({
|
|
1650
1757
|
* prompt: "A serene landscape with mountains and a lake at sunset"
|
|
1651
1758
|
* });
|
|
1652
1759
|
* console.log("Image URL:", data[0].url);
|
|
1653
1760
|
*
|
|
1654
|
-
* //
|
|
1761
|
+
* // High quality generation with Pro model
|
|
1762
|
+
* const { data } = await blink.ai.generateImage({
|
|
1763
|
+
* prompt: "A detailed infographic about AI with charts and diagrams",
|
|
1764
|
+
* model: "fal-ai/nano-banana-pro",
|
|
1765
|
+
* n: 2
|
|
1766
|
+
* });
|
|
1767
|
+
*
|
|
1768
|
+
* // Fast generation with specific size
|
|
1655
1769
|
* const { data } = await blink.ai.generateImage({
|
|
1656
1770
|
* prompt: "A futuristic city skyline with flying cars",
|
|
1771
|
+
* model: "fal-ai/nano-banana",
|
|
1772
|
+
* size: "1024x1024",
|
|
1657
1773
|
* n: 3
|
|
1658
1774
|
* });
|
|
1659
1775
|
* data.forEach((img, i) => console.log(`Image ${i+1}:`, img.url));
|
|
1660
1776
|
*
|
|
1661
|
-
* //
|
|
1777
|
+
* // Using legacy Gemini model
|
|
1662
1778
|
* const { data } = await blink.ai.generateImage({
|
|
1663
|
-
* prompt: "A cute robot mascot for a tech company,
|
|
1779
|
+
* prompt: "A cute robot mascot for a tech company",
|
|
1780
|
+
* model: "gemini-2.5-flash-image-preview"
|
|
1664
1781
|
* });
|
|
1665
1782
|
* ```
|
|
1666
1783
|
*
|
|
1667
1784
|
* @returns Promise<ImageGenerationResponse> - Object containing:
|
|
1668
1785
|
* - `data`: Array of generated images with URLs
|
|
1669
1786
|
* - `created`: Timestamp of generation
|
|
1670
|
-
* - `model`:
|
|
1787
|
+
* - `model`: The model used for generation
|
|
1671
1788
|
*/
|
|
1672
1789
|
generateImage(options: {
|
|
1673
1790
|
prompt: string;
|
|
1791
|
+
model?: string;
|
|
1674
1792
|
n?: number;
|
|
1793
|
+
size?: string;
|
|
1675
1794
|
signal?: AbortSignal;
|
|
1676
1795
|
}): Promise<ImageGenerationResponse>;
|
|
1677
1796
|
/**
|
|
1678
|
-
* Modifies existing images using
|
|
1797
|
+
* Modifies existing images using AI image editing models with text prompts for image-to-image editing.
|
|
1679
1798
|
*
|
|
1680
1799
|
* @param options - Object containing:
|
|
1681
1800
|
* - `images`: Array of public image URLs to modify (required, up to 50 images)
|
|
1682
1801
|
* - `prompt`: Text description of desired modifications (required, up to 100k characters)
|
|
1802
|
+
* - `model`: AI model to use (optional). Available editing models:
|
|
1803
|
+
* **Fal.ai Editing Models (Recommended):**
|
|
1804
|
+
* - `"fal-ai/nano-banana/edit"` (default) - Flash editing (Fast)
|
|
1805
|
+
* - `"fal-ai/nano-banana-pro/edit"` - Pro editing (High quality)
|
|
1806
|
+
* - `"fal-ai/gemini-25-flash-image/edit"` - Alias for nano-banana/edit
|
|
1807
|
+
* - `"fal-ai/gemini-3-pro-image-preview/edit"` - Alias for nano-banana-pro/edit
|
|
1808
|
+
* **Legacy Gemini Models:**
|
|
1809
|
+
* - `"gemini-2.5-flash-image-preview"` - Direct Gemini API
|
|
1810
|
+
* - `"gemini-3-pro-image-preview"` - Direct Gemini API
|
|
1683
1811
|
* - `n`: Number of output images to generate (default: 1)
|
|
1684
1812
|
* - Plus optional signal parameter
|
|
1685
1813
|
*
|
|
1686
1814
|
* @example
|
|
1687
1815
|
* ```ts
|
|
1816
|
+
* // Fast editing with default model
|
|
1817
|
+
* const { data } = await blink.ai.modifyImage({
|
|
1818
|
+
* images: ["https://storage.example.com/photo.jpg"],
|
|
1819
|
+
* prompt: "make it green"
|
|
1820
|
+
* });
|
|
1821
|
+
*
|
|
1822
|
+
* // High quality editing with Pro model
|
|
1823
|
+
* const { data } = await blink.ai.modifyImage({
|
|
1824
|
+
* images: ["https://storage.example.com/landscape.jpg"],
|
|
1825
|
+
* prompt: "add a tree in the background",
|
|
1826
|
+
* model: "fal-ai/nano-banana-pro/edit"
|
|
1827
|
+
* });
|
|
1828
|
+
*
|
|
1688
1829
|
* // Professional headshots from casual photos
|
|
1689
1830
|
* const { data } = await blink.ai.modifyImage({
|
|
1690
1831
|
* images: [
|
|
@@ -1692,6 +1833,7 @@ declare class BlinkAIImpl implements BlinkAI {
|
|
|
1692
1833
|
* "https://storage.example.com/user-photo-2.jpg"
|
|
1693
1834
|
* ],
|
|
1694
1835
|
* prompt: "Transform into professional business headshots with studio lighting",
|
|
1836
|
+
* model: "fal-ai/nano-banana/edit",
|
|
1695
1837
|
* n: 4
|
|
1696
1838
|
* });
|
|
1697
1839
|
* data.forEach((img, i) => console.log(`Headshot ${i+1}:`, img.url));
|
|
@@ -1699,7 +1841,8 @@ declare class BlinkAIImpl implements BlinkAI {
|
|
|
1699
1841
|
* // Artistic style transformation
|
|
1700
1842
|
* const { data } = await blink.ai.modifyImage({
|
|
1701
1843
|
* images: ["https://storage.example.com/portrait.jpg"],
|
|
1702
|
-
* prompt: "Transform into oil painting style with dramatic lighting"
|
|
1844
|
+
* prompt: "Transform into oil painting style with dramatic lighting",
|
|
1845
|
+
* model: "fal-ai/nano-banana-pro/edit"
|
|
1703
1846
|
* });
|
|
1704
1847
|
*
|
|
1705
1848
|
* // Background replacement
|
|
@@ -1737,11 +1880,12 @@ declare class BlinkAIImpl implements BlinkAI {
|
|
|
1737
1880
|
* @returns Promise<ImageGenerationResponse> - Object containing:
|
|
1738
1881
|
* - `data`: Array of modified images with URLs
|
|
1739
1882
|
* - `created`: Timestamp of generation
|
|
1740
|
-
* - `model`:
|
|
1883
|
+
* - `model`: The model used for editing
|
|
1741
1884
|
*/
|
|
1742
1885
|
modifyImage(options: {
|
|
1743
1886
|
images: string[];
|
|
1744
1887
|
prompt: string;
|
|
1888
|
+
model?: string;
|
|
1745
1889
|
n?: number;
|
|
1746
1890
|
signal?: AbortSignal;
|
|
1747
1891
|
}): Promise<ImageGenerationResponse>;
|
|
@@ -1920,4 +2064,4 @@ declare class BlinkRealtimeImpl implements BlinkRealtime {
|
|
|
1920
2064
|
onPresence(channelName: string, callback: (users: PresenceUser[]) => void): () => void;
|
|
1921
2065
|
}
|
|
1922
2066
|
|
|
1923
|
-
export { type AnalyticsEvent, type AuthState, type AuthStateChangeCallback, type AuthTokens, type BlinkAI, BlinkAIImpl, type BlinkAnalytics, BlinkAnalyticsImpl, type BlinkClient, type BlinkClientConfig, type BlinkData, BlinkDataImpl, BlinkDatabase, type BlinkRealtime, BlinkRealtimeChannel, BlinkRealtimeError, BlinkRealtimeImpl, type BlinkStorage, BlinkStorageImpl, BlinkTable, type BlinkUser, type CreateOptions, type DataExtraction, type FileObject, type FilterCondition, type ImageGenerationRequest, type ImageGenerationResponse, type Message, type ObjectGenerationRequest, type ObjectGenerationResponse, type PresenceUser, type QueryOptions, type RealtimeChannel, type RealtimeGetMessagesOptions, type RealtimeMessage, type RealtimePublishOptions, type RealtimeSubscribeOptions, type SearchRequest, type SearchResponse, type SpeechGenerationRequest, type SpeechGenerationResponse, type StorageUploadOptions, type StorageUploadResponse, type TableOperations, type TextGenerationRequest, type TextGenerationResponse, type TokenUsage, type TranscriptionRequest, type TranscriptionResponse, type UpdateOptions, type UpsertOptions, createClient };
|
|
2067
|
+
export { type AnalyticsEvent, AsyncStorageAdapter, type AuthState, type AuthStateChangeCallback, type AuthTokens, type BlinkAI, BlinkAIImpl, type BlinkAnalytics, BlinkAnalyticsImpl, type BlinkClient, type BlinkClientConfig, type BlinkData, BlinkDataImpl, BlinkDatabase, type BlinkRealtime, BlinkRealtimeChannel, BlinkRealtimeError, BlinkRealtimeImpl, type BlinkStorage, BlinkStorageImpl, BlinkTable, type BlinkUser, type CreateOptions, type DataExtraction, type FileObject, type FilterCondition, type ImageGenerationRequest, type ImageGenerationResponse, type Message, NoOpStorageAdapter, type ObjectGenerationRequest, type ObjectGenerationResponse, type PresenceUser, type QueryOptions, type RealtimeChannel, type RealtimeGetMessagesOptions, type RealtimeMessage, type RealtimePublishOptions, type RealtimeSubscribeOptions, type SearchRequest, type SearchResponse, type SpeechGenerationRequest, type SpeechGenerationResponse, type StorageAdapter, type StorageUploadOptions, type StorageUploadResponse, type TableOperations, type TextGenerationRequest, type TextGenerationResponse, type TokenUsage, type TranscriptionRequest, type TranscriptionResponse, type UpdateOptions, type UpsertOptions, WebStorageAdapter, createClient, getDefaultStorageAdapter, isBrowser, isNode, isReactNative, isWeb, platform };
|