見出し画像

Holaraの画像生成APIとGAS連動にチャレンジするも失敗したので運営に相談した話

novelAIよりも、HolaraAIのイラストが好きだ!

HolaraAI
const HOLARA_API_KEY = 'secret-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
const GOOGLE_DRIVE_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const HOLARA_URL = 'https://holara.ai/holara/api/external/1.0/generate_image';

function HOLARA( arg_prompt = '1girl, solo, black hair, red eyes, snowing, long hair, fox ears') {
  var data = {
    'api_key': HOLARA_API_KEY,
    'model': 'Akasha: Anime',
    'num_images': 1,
    'prompt': arg_prompt,
    'negative_prompt': 'bad hands, bad arms',
    'width': 512,
    'height': 512,
    'steps': 28,
    'cfg_scale': 12
  };
  var options = {
    'method': 'post',
    'payload': data,
    'muteHttpExceptions': true
  };
  
  var response = UrlFetchApp.fetch(HOLARA_URL, options);
  var responseCode = response.getResponseCode();
  
  if (responseCode != 200) {
    return [['Error',responseCode + ' ' + response.getContentText()]];
  } else {
    var jsonResponse = JSON.parse(response.getContentText());
    
    var imageBase64 = jsonResponse['images'][0];
    var imageBlob = Utilities.base64Decode(imageBase64);
    
    // Save the image to the specified Google Drive folder
    var folder = DriveApp.getFolderById(GOOGLE_DRIVE_ID);
    var imageFile = folder.createFile('generated_image.png', imageBlob, MimeType.PNG);
    
    var msg = jsonResponse['status'] + ',' +  jsonResponse['execution_time'] + ',' + jsonResponse['generation_cost'] +","+ jsonResponse['hologems_remaining'];
    return [['IMAGE("' + imageFile.getUrl() + '")', msg]];
  }
}

GASで =HOLARA("1girl, smile, mehyou") と入れたら、女豹のポーズで笑顔の女の子が出る予定だった。ついでに指定したGoogleドライブに保存して使えるようにした。


HolaraのGASAPI連携失敗

400 {"error": "invalid width or height"}

ダメみたいですね…… UrlFetchApp.fetchでWidth,Heightの2つを512で渡しているが、コードが200の正常じゃなくて「400のエラー」が返って来た。

Holara(@Holara_AI)さん / Twitter

HolaraのGuideのコードを見返したり、chatGPT4さんに頼ったり、GASマニュアルを読んでみたが結局わからず、DMしてみた。


HolaraTwitter

日本語で対応してくれた。結果としては「送信方法が間違っていて見直して」とのこと。もうちょっと頑張ってみようと思う。

  var data = {
    'api_key': HOLARA_API_KEY,
    'model': 'Akasha: Anime',
    'num_images': 1,
    'prompt': arg_prompt,
    'negative_prompt': 'bad hands, bad arms',
    'width': 512,
    'height': 512,
    'steps': 28,
    'cfg_scale': 12
  };
  var options = {
    'method': 'post',
    'payload': data,
    'muteHttpExceptions': true
  };
  
  var response = UrlFetchApp.fetch(HOLARA_URL, options);
  var responseCode = response.getResponseCode();

ここの設定のどこかがおかしい! もし分かったITに詳しい方いたらコメントお願いします!

GASによるHTTPリクエスト(GET/POST)方法を解説!UrlFetchAppクラスでフェッチ | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門 (auto-worker.com)

このあたり、勉強するか……

いいなと思ったら応援しよう!